Spread a random user in hexagonal cell
    4 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    Ahmed Hassaan
 il 27 Gen 2012
  
    
    
    
    
    Commentato: Walter Roberson
      
      
 il 10 Lug 2016
            Hello,i drawn one hexagonal cells and I want to spread a random users in it and specify the coordinates of each user in an array. thats my trial :
clear all;
close all;
clc;
t=linspace(0,2*pi,7);
x=0+1*cos(t);
y=0+1*sin(t);
plot(x,y);
hold on
grid on;
 for i=1:100
     xa=-0.8+1.6*rand(1,1);  
     ya=-0.8+1.6*rand(1,1);  
     xra(i)=xa;  
     yra(i)=ya;  
    figure(1)  
    plot(xra(i),yra(i),'k.');  
    hold on
 end
as u see the whole cell cannot be filled by the users ,
Thanks for ur help :)
0 Commenti
Risposta accettata
  Walter Roberson
      
      
 il 27 Gen 2012
        When you are choosing xa and ya, you are choosing the coordinates from a square from [-0.8, 0.8] in both x and y. Your hexagon extends a bit past +/- 0.8 in y, and extends to +/- 1 in x, and because of the angled lines there are parts of the square (whose coordinates you are choosing from) that are not within the hexagon.
The square: because -0.8+1.6*rand(1,1) ranges from -0.8 + 1.6*0 to -0.8 + 1.6 * 1 which is -0.8 to +0.8, and you use that calculation for both x and y.
You need to find a way of choosing exactly withinin the hexagon, or you need to find a way of choosing over a larger area and discarding the points that are not in the hexagon.
3 Commenti
  Walter Roberson
      
      
 il 28 Gen 2012
				http://matlab.wikia.com/wiki/FAQ#How_can_I_create_variables_A1.2C_A2.2C....2CA10_in_a_loop.3F
  Walter Roberson
      
      
 il 28 Gen 2012
				Hint: http://www.mathworks.com/help/techdoc/ref/inpolygon.html
There is even a relevant example.
Più risposte (1)
  Ahmed Ibrahim
 il 6 Mag 2016
        
      Modificato: Ahmed Ibrahim
 il 6 Mag 2016
  
      this is an update for your code:
-----------------------------------
function [xra,yra]=hex_rand(R,i)
% R is the hexagon side length
% i is the number of samples
t=linspace(0,2*pi,7);
x=0+R*cos(t);
y=0+R*sin(t);
plot(x,y);
hold on
grid on;
for m=1:i
xa=x(1)*2*(rand()-1/2);
ya=y(2)*2*(rand()-1/2);
     if ((xa>(R/2)) && (ya>(-sqrt(3)*xa+(R*sqrt(3))))) %%the areas where the problem occur
        ya=-sqrt(3)*xa+(R*sqrt(3));
     elseif ((xa>(R/2)) && (ya<(sqrt(3)*xa-(R*sqrt(3)))))
        ya=sqrt(3)*xa-(R*sqrt(3));
     elseif ((xa<(-R/2)) && (ya>(sqrt(3)*xa+(R*sqrt(3)))))
        ya=sqrt(3)*xa+(R*sqrt(3));
     elseif ((xa<(-R/2)) && (ya<(-sqrt(3)*xa-(R*sqrt(3)))))
        ya=-sqrt(3)*xa-(R*sqrt(3));
     end
     xra(m)=xa;  
     yra(m)=ya;  
    figure(1)   
 end  
 plot(xra,yra,'k.');  
   hold on
end
2 Commenti
  AMAL ALGEDIR
 il 10 Lug 2016
				
      Modificato: AMAL ALGEDIR
 il 10 Lug 2016
  
			how I can change this code if the center of the hexagon is not (0,0). how I can make work with more than one cell? I could draw more than one cell but I could not fix the position od users?
  Walter Roberson
      
      
 il 10 Lug 2016
				It is often easiest to generate the numbers around an origin of 0 and then add the center as the last step.
Vedere anche
Categorie
				Scopri di più su Surface and Mesh Plots in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



