c# – 查找源自中心顶点的等边三角形网格中的顶点

我想问一下是否有代码,或者你是否可以给我一些帮助(C#,但我猜数学在各地都是一样的).

我想指定一个中心点,从中心点创建一个等边三角形网格,并获得这些三角形的顶点.中心点不应该是面中心,而应该是顶点本身.
另一个输入是三角形的大小(即边长)和生成三角形顶点的半径.

其背后的原因是我想创建一个网格,它在屏幕/窗口中心很好地居中,尽可能少的代码.我只是找到网格生成代码,但不是“径向向外传播”的例子.

最后,我想让随后更远的顶点以对数方式移位,但我想这只是一个简单的添加,一旦网格代码存在.

任何人都可以帮助我吗?谢谢!

最佳答案
您需要指定两个方面,即半径和第一个三角形指向的方向.

>半径将是从初始点到第一个三角形顶点的距离.所有三角形都具有相同的半径.
>方向是弧度的一些规格.我将假设0表示指向右侧(PI将指向左侧).

找到第一个三角形的顶点可以这样做(伪代码,而不是语言特定):

float theta = 0; // The direction, 0 means pointing to the right
float thetaInc = TWO_PI/3; // 3 because you want a triangle
for (int i = 0; i < 3; i++) {
    vertX[i] = initialPointX+cos(theta)*radius;
    vertY[i] = initialPointY+sin(theta)*radius;
    theta += thetaInc;
}

有许多方法可以找到相邻三角形的中心点.一种方法是使用相同的代码,但初始化theta = TWO_PI / 6,用foo替换radius(参见下面的数学),在for循环中分配相邻三角形的新中心点,然后使用相同的代码并适当旋转方向(theta = PI)找到那些三角形的顶点.

从一个三角形中心到另一个三角形中心的距离

> hypotenuse = sqrt(sq(radius)sq(radius));
> halfHypotenuse = hypotenuse / 2.0;
>毕达哥拉斯定理找到从三角形中心到边缘中心的距离:foo = sqrt(sq(radius)-sq(halfHypotenuse));
>最终距离= foo * 2.0;

用于查找相邻三角形的中心点的代码:

float[] nx = new float[3];
float[] ny = new float[3];

float theta = TWO_PI/6;
float hyp = sqrt(sq(radius)+sq(radius));
float halfHyp = hyp/2.0;
float foo = sqrt((sq(radius)-sq(halfHyp)))*2.0;
for (int i = 0; i < 3; i++) {
    nx[i] = initialPointX+cos(theta)*foo;
    ny[i] = initialPointY+sin(theta)*foo;
    theta += thetaInc;
}

转载注明原文:c# – 查找源自中心顶点的等边三角形网格中的顶点 - 代码日志