我需要创建一个适合给定几何形状的等边三角形网格。
我有一个包含几何图形的图像,它可能包括孔或细路径。我需要创建一个类似于此图像的网格:
这些圆的直径是可变的,并且需要覆盖整个几何图形。这些点不必在几何图形上。
我需要创建一个适合给定几何形状的等边三角形网格。
我有一个包含几何图形的图像,它可能包括孔或细路径。我需要创建一个类似于此图像的网格:
这些圆的直径是可变的,并且需要覆盖整个几何图形。这些点不必在几何图形上。
您可以将三角形网格视为倾斜的矩形网格
例如,这使您能够将每个圆的状态存储在二维矩阵中,并使用简单的嵌套循环进行处理。当然,您必须将这些逻辑坐标转换为几何平面坐标以进行绘图。
const double Sin30 = 0.5;
static readonly double Cos30 = Math.Cos(30*Math.PI/180);
for (int xLogical = 0; xLogical < NX; xLogical++) {
for (int yLogical = 0; yLogical < NY; yLogical++) {
double xGeo = GridDistance * xLogical * Cos30;
double yGeo = GridDistance * (yLogical + xLogical * Sin30);
...
}
}
我假设这是创建一个 2D 网格划分工具。如果是这样,而且这是家庭作业,我建议你自己做,因为你会从中受益匪浅。如果这不是啮合问题,无论如何我要说的应该对您有所帮助...
为此,请使用网格节点中心来生成等边线。如果您没有开始的中心点,您将需要首先为您的对象选择一个方向,然后创建这些(基于矩形的)网格节点(您将必须想出一种方法来测试这些点是否真的位于您的对象边界内)。然后,您可以使用这些点构建您的等边三角形。笔记。您将不得不再次处理边缘检测以获得一半的准确度。
要在等边线的基础上走得更远,并获得更准确的网格,您将不得不使用三角剖分研究各向异性网格自适应 (AMA)。这将比上面概述的基本方法困难得多 - 但很有趣!
查看此链接到使用 AMA 的 2D tet-mesh 生成器。此代码所基于的论文是: