试图为凸包研究映射一个二维六边形格点
Trying to map a 2 D hexagonal lattice point for convex hull study
我正在尝试为凸包研究绘制一个二维六边形晶格点。但我只能得到矩形格子。这是代码:
在二维平面上绘制六角点阵图
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
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
我正在尝试为凸包研究绘制一个二维六边形晶格点。但我只能得到矩形格子。这是代码:
在二维平面上绘制六角点阵图
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
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