我正在编写一个程序,我需要在其中绘制任意多边形的多边形,每个多边形都由动态变化的给定公式转换。涉及到一些相当有趣的数学,但我被困在这个问题上。
如何计算正多边形(所有角度都相等的多边形)的顶点坐标,仅给出边数,并且理想情况下(但不一定)具有原点在中心?
例如:一个六边形可能有以下点(都是float
):
( 1.5 , 0.5 *Math.Sqrt(3) )
( 0 , 1 *Math.Sqrt(3) )
(-1.5 , 0.5 *Math.Sqrt(3) )
(-1.5 , -0.5 *Math.Sqrt(3) )
( 0 , -1 *Math.Sqrt(3) )
( 1.5 , -0.5 *Math.Sqrt(3) )
我的方法是这样的:
void InitPolygonVertexCoords(RegularPolygon poly)
并且需要将坐标添加到此(或类似的东西,如列表):
Point[] _polygonVertexPoints;
我主要对此处的算法感兴趣,但 C# 中的示例会很有用。我什至不知道从哪里开始。 我应该如何实现?有可能吗?!
谢谢。
最佳答案
for (i = 0; i < n; i++) {
printf("%f %f\n",r * Math.cos(2 * Math.PI * i / n), r * Math.sin(2 * Math.PI * i / n));
}
其中 r
是外接圆的半径。抱歉语言错误 No Habla C#。
基本上任何两个顶点之间的角度都是 2 pi/n 并且所有顶点与原点的距离为 r。
编辑: 如果你想让中心位于原点以外的某个地方,比如 (x,y)
for (i = 0; i < n; i++) {
printf("%f %f\n",x + r * Math.cos(2 * Math.PI * i / n), y + r * Math.sin(2 * Math.PI * i / n));
}
关于c# - 计算正多边形顶点的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3436453/