0

I made a script of "packing hexagons inside a hexagon" as shown in the fig.A bunch of small hexagons of "Radius=250" is packed inside big ones. Now i want to convert these smaller hexagons into circles of same radius i.e. 250 packed inside the hexagons same way. Here is the script for hexagons. Anyone can guide me the changes i can make in this script to replace these hexagons to circles in same geometry. Any solution?

Radius=250;
j = 0;
i = 1;
Centre_x(i) = 100;
Centre_y(i) = 100;
R=1000;     % radius of macrocell in meters
v_x = 100+R * cos((0:6)*pi/3); %Vertexes
v_y = 100+R * sin((0:6)*pi/3);
v_x_b = v_x;
v_y_b = v_y;
while Centre_x(i) < R+100  
while Centre_y(i) < ((((3)^0.5)*R)/2)+100

i = i + 1;
Centre_x(i) = Centre_x(i-1);
Centre_y(i) = Centre_y(i-1) + (((3)^0.5)*Radius);
end
j = j + 1;
if mod(j,2) == 0
i = i + 1;
Centre_x(i) = Centre_x(i-1) + 3*Radius/2;
Centre_y(i) = 100;
else
i = i + 1;
Centre_x(i) = Centre_x(i-1) + 3*Radius/2;
Centre_y(i) = ((((3)^0.5)*Radius)/2)+100;
end
end
for i =  1 : size(Centre_x,2)

    Tempx(i,1) = Centre_x(i)- Radius;
    Tempx(i,2) = Centre_x(i) - Radius/2;
    Tempx(i,3) = Centre_x(i) + Radius/2;
    Tempx(i,4) = Centre_x(i) + Radius;
    Tempx(i,5) = Centre_x(i) + Radius/2;
    Tempx(i,6) = Centre_x(i) - Radius/2;
    Tempx(i,7) = Centre_x(i) - Radius;

    Tempy(i,1) = Centre_y(i);
    Tempy(i,2) = Centre_y(i) - ((((3)^0.5)*Radius)/2);
    Tempy(i,3) = Centre_y(i) - ((((3)^0.5)*Radius)/2);
    Tempy(i,4) = Centre_y(i);
    Tempy(i,5) = Centre_y(i) + ((((3)^0.5)*Radius)/2);
    Tempy(i,6) = Centre_y(i) + ((((3)^0.5)*Radius)/2);
    Tempy(i,7) = Centre_y(i);
end
LL1 = size(Tempx,1); 
j = 0;
for i =  1 : LL1   
 in =  inpolygon(Tempx(i,1),Tempy(i,2),v_x_b,v_y_b);
 if in == 1
     j = j +1        
     V_X_New(j,:) = Tempx(i,:);
     V_Y_New(j,:) = Tempy(i,:);
end
end
j = 1;
i = size(Centre_x,2) + 1;
Centre_x(i) = 100 - 3*Radius/2;
Centre_y(i) = ((((3)^0.5)*Radius)/2)+100;
while Centre_x(i) > -R+100
while Centre_y(i) < (((((3)^0.5)*R)/2))+100 

i = i + 1;
Centre_x(i) = Centre_x(i-1);
Centre_y(i) = Centre_y(i-1) + (((3)^0.5)*Radius);
end
j = j + 1;
if mod(j,2) == 0   
i = i + 1;
Centre_x(i) = Centre_x(i-1) - 3*Radius/2;
Centre_y(i) = 100;
else
i = i + 1;
Centre_x(i) = Centre_x(i-1) - 3*Radius/2;
Centre_y(i) = ((((3)^0.5)*Radius)/2)+100;
end
end
for i =  LL1+1 : size(Centre_x,2)
Tempx(i,1) = Centre_x(i)- Radius;
    Tempx(i,2) = Centre_x(i) - Radius/2;
    Tempx(i,3) = Centre_x(i) + Radius/2;
    Tempx(i,4) = Centre_x(i) + Radius;
    Tempx(i,5) = Centre_x(i) + Radius/2;
    Tempx(i,6) = Centre_x(i) - Radius/2;
    Tempx(i,7) = Centre_x(i) - Radius;

    Tempy(i,1) = Centre_y(i);
    Tempy(i,2) = Centre_y(i) - ((((3)^0.5)*Radius)/2);
    Tempy(i,3) = Centre_y(i) - ((((3)^0.5)*Radius)/2);
    Tempy(i,4) = Centre_y(i);
    Tempy(i,5) = Centre_y(i) + ((((3)^0.5)*Radius)/2);
    Tempy(i,6) = Centre_y(i) + ((((3)^0.5)*Radius)/2);
    Tempy(i,7) = Centre_y(i);
end
LL2 = size(Tempx,1);
j = size(V_X_New,1); 
for i =  LL1+1 : LL2

 in =  inpolygon(Tempx(i,4),Tempy(i,3),v_x_b,v_y_b);
 if in == 1
     j = j +1;

     V_X_New(j,:) = Tempx(i,:);
     V_Y_New(j,:) = Tempy(i,:);

 end     
end
j = 0;
i = size(Centre_x,2) + 1;
Centre_x(i) = 100;
Centre_y(i) = -((((3)^0.5)*Radius))+100;
while Centre_x(i) > -R+100  
while Centre_y(i) > -((((3)^0.5)*R)/2)+100    
i = i + 1;
Centre_x(i) = Centre_x(i-1);
Centre_y(i) = Centre_y(i-1) - (((3)^0.5)*Radius);
end
j = j + 1;
if mod(j,2) == 0   
i = i + 1;
Centre_x(i) = Centre_x(i-1) - 3*Radius/2;
Centre_y(i) = -((((3)^0.5)*Radius))+100;
else
i = i + 1;
Centre_x(i) = Centre_x(i-1) - 3*Radius/2;
Centre_y(i) = -((((3)^0.5)*Radius)/2)+100;
end
end
for i =  LL2+1 : size(Centre_x,2)          
    Tempx(i,1) = Centre_x(i)- Radius;
    Tempx(i,2) = Centre_x(i) - Radius/2;
    Tempx(i,3) = Centre_x(i) + Radius/2;
    Tempx(i,4) = Centre_x(i) + Radius;
    Tempx(i,5) = Centre_x(i) + Radius/2;
    Tempx(i,6) = Centre_x(i) - Radius/2;
    Tempx(i,7) = Centre_x(i) - Radius;                
    Tempy(i,1) = Centre_y(i);
    Tempy(i,2) = Centre_y(i) - ((((3)^0.5)*Radius)/2);
    Tempy(i,3) = Centre_y(i) - ((((3)^0.5)*Radius)/2);
    Tempy(i,4) = Centre_y(i);
    Tempy(i,5) = Centre_y(i) + ((((3)^0.5)*Radius)/2);
    Tempy(i,6) = Centre_y(i) + ((((3)^0.5)*Radius)/2);
    Tempy(i,7) = Centre_y(i);
end
LL3 = size(Tempx,1); 
j = size(V_X_New,1); 
for i =  LL2+1 : LL3   
 in =  inpolygon(Tempx(i,4),Tempy(i,5),v_x_b,v_y_b);
 if in == 1
     j = j +1;        
     V_X_New(j,:) = Tempx(i,:);
     V_Y_New(j,:) = Tempy(i,:);
end
end
j = 1;
i = size(Centre_x,2) + 1;
Centre_x(i) = 100 + 3*Radius/2;
Centre_y(i) = -((((3)^0.5)*Radius)/2)+100;
while Centre_x(i) < R+100
while Centre_y(i) > -((((3)^0.5)*R)/2)+100   
i = i + 1;
Centre_x(i) = Centre_x(i-1);
Centre_y(i) = Centre_y(i-1) - (((3)^0.5)*Radius);
end
j = j + 1;
if mod(j,2) == 0
i = i + 1;
Centre_x(i) = Centre_x(i-1) + 3*Radius/2;
Centre_y(i) = -((((3)^0.5)*Radius))+100;
else
i = i + 1;
Centre_x(i) = Centre_x(i-1) + 3*Radius/2;
Centre_y(i) = -((((3)^0.5)*Radius)/2)+100;
end
end
for i =  LL3+1 : length(Centre_x)

    Tempx(i,1) = Centre_x(i)- Radius;
    Tempx(i,2) = Centre_x(i) - Radius/2;
    Tempx(i,3) = Centre_x(i) + Radius/2;
    Tempx(i,4) = Centre_x(i) + Radius;
    Tempx(i,5) = Centre_x(i) + Radius/2;
    Tempx(i,6) = Centre_x(i) - Radius/2;
    Tempx(i,7) = Centre_x(i) - Radius;               
    Tempy(i,1) = Centre_y(i);
    Tempy(i,2) = Centre_y(i) - ((((3)^0.5)*Radius)/2);
    Tempy(i,3) = Centre_y(i) - ((((3)^0.5)*Radius)/2);
    Tempy(i,4) = Centre_y(i);
    Tempy(i,5) = Centre_y(i) + ((((3)^0.5)*Radius)/2);
    Tempy(i,6) = Centre_y(i) + ((((3)^0.5)*Radius)/2);
    Tempy(i,7) = Centre_y(i);   
end
LL4 = size(Tempx,1); 
j = size(V_X_New,1); 
for i =  LL3+1 : LL4    
 in =  inpolygon(Tempx(i,1),Tempy(i,6),v_x_b,v_y_b);
 if in == 1
     j = j +1;         
     V_X_New(j,:) = Tempx(i,:);
     V_Y_New(j,:) = Tempy(i,:);
end
end
for i =  1 : size(V_X_New,1)
plot(V_X_New(i,:),V_Y_New(i,:),'c--');
x = V_X_New(i,6);
y = V_Y_New(i,6);
text1=[num2str(i)]; dx = 0; dy = 90; text(x+dx,y-dy,text1);
end
Ander Biguri
  • 35,140
  • 11
  • 74
  • 120

0 Answers0