gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:46:21 26 4
gpt4 key购买 nike

我想问一下是否有代码,或者您是否可以帮我写一些代码(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) 的相同代码来查找这些三角形的顶点。

从一个三角形中心到另一个只知道半径的距离:

  • 斜边 = 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com