【问题标题】:Trying to map a 2 D hexagonal lattice point for convex hull study尝试为凸包研究绘制二维六边形晶格点
【发布时间】:2018-02-15 01:55:52
【问题描述】:

我正在尝试为凸包研究绘制二维六边形晶格点。但我只能得到矩形格子。代码如下:

在二维平面上映射六边形晶格

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

【问题讨论】:

    标签: matlab mathematical-lattices


    【解决方案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
    

    【讨论】:

    • 非常感谢。现在逻辑对我来说更清楚了。
    猜你喜欢
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多