试图绘制二维六边形格点以进行凸壳研究

时间:2018-02-15 01:55:52

标签: matlab mathematical-lattices

我正在尝试绘制一个二维六边形格点用于凸壳研究。但我只能得到矩形格子。这是代码:

在2D平面上绘制六边形网格

u = 0:1:100;
if mod(u,2) == 0;
  v = 0:2*sqrt(3):50*sqrt(3);
else 
  v = 1:2*sqrt(3):50*sqrt(3)    
end

定义应构造凸包的区域。将所有数据点发送到convhull函数。

[u,v] = meshgrid(u,v);
idx = sqrt((u-25).^2+(v-25).^2) <= 25 ;
u = u(idx);
v = v(idx);
c = convhull(u,v);

绘制图像

plot(u(c),v(c),'r-',u,v,'b.');
hold off

1 个答案:

答案 0 :(得分:1)

if语句在MATLAB中不会像这样工作。程序将始终只遵循一条路径,而不是您想象的每个向量元素的不同路径。

相反,使用逻辑索引:

u = 0:1:100;
index = mod(u,2) == 0;
v(index) = 0:2*sqrt(3):50*sqrt(3); 
v(~index) = 1:2*sqrt(3):50*sqrt(3);

(如果此处的矢量大小不匹配,则未经测试可能会失败。)

但是,这仍然不能为您提供六边形网格,因为meshgrid函数根据定义生成矩形网格。

六边形网格是交织在一起的两个矩形网格。产生它的一种方法可以如下:

u = 0:1:100;
v = 0:2*sqrt(3):50*sqrt(3); 
[v,u] = meshgrid(v,u);
v(2:2:end,:) = v(2:2:end,:)+sqrt(3);

% and then the rest of your code:
idx = sqrt((u-25).^2+(v-25).^2) <= 25;
u = u(idx);
v = v(idx);
c = convhull(u,v);
plot(u(c),v(c),'r-',u,v,'b.');
axis equal

output of code