我正在尝试绘制一个二维六边形格点用于凸壳研究。但我只能得到矩形格子。这是代码:
在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
答案 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