0

我正在找到我的圆心和三角形之间的角度,如下所示:

atan2((centre.y-triangle.y), (centre.x-triangle.x) * 180 / PI - 90

我正在设置以度为参数的三角形对象的旋转。问题是我的所有三角形都没有正确向外旋转,我认为这是我的位置计算的结果,如下所示:

triangle.x = -(width / 2) + (stage.width / 2) + radius * sin((index / total) * (2 * PI))

这是发生情况的一个示例,您可以看到圆圈中的最后几个三角形似乎正确地朝外。

在此处输入图像描述

4

2 回答 2

1

好的,我需要一些答案空间来放置所有这些信息。

首先,您需要计算给定三角形的角度。您可以通过以下方式做到这一点:

int angle = (360 / numberOfElements) * triangleIndex;

您还需要计算出一个“切片”(不要不知道那是什么,只是阅读它)用于计算新位置:

var slice = (2 * Math.PI / numberOfElements) * triangleIndex;

接下来,您需要计算出每个三角形的位置:

int tempRadius = radius + (int)(triangleHeight / 2);
int traingleCentreX = (int)(centre.X + tempRadius * Math.Cos(slice));
int traingleCentreY = (int)(centre.Y + tempRadius * Math.Sin(slice));
//assuming centre is the centre of the circle

[所有这些数学的功劳归于这个答案 ]

现在您有了每个三角形的正确位置,您应该能够应用旋转(使用angle),它应该看起来很棒!

注意:位置将从右侧开始计算(即 90 度)。因此,在进行旋转时,请额外增加 90 度!

http://jsfiddle.net/TcENr/(它是最快的测试!)

于 2013-04-10T11:22:48.883 回答
0

旋转的细微偏移问题是因为我没有将三角形的一半宽度和高度添加到它的位置,这解决了问题:

rotation = atan2(centreY-(triangleY+triangleHalfHeight),centreX-(triangleX+triangleHalfWidth)) * 180 / Math.PI - 90;
于 2013-04-10T15:01:20.450 回答