我想问一下那里是否有代码,或者您是否可以在编写某些代码方面给我一些帮助(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,将radius替换为foo(请参见下面的数学方法),在for循环中分配相邻三角形的新中心点,然后使用具有适当旋转方向的相同代码(theta += PI)找到那些三角形的顶点。

    从一个三角形中心到另一个仅知道radius的距离:
  • 斜边= 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# - 在源自中心顶点的等边三角形网格中查找顶点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18435704/

    10-17 00:17