和我一起,我的三角学不是很好。
目前,我正在找到圆圈中心与三角形之间的角度,如下所示:
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))
以下是所发生情况的示例,因为您可以看到圆圈中的最后几个三角形看起来正面向外。
答案 0 :(得分: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
[所有这些数学的归功于this answer ]
现在您已经拥有了每个三角形的正确位置,您应该可以应用旋转(使用angle
),它应该看起来很惊人!
注意:位置将从右侧开始计算(即90度)。因此,在进行旋转时,请额外增加90度!
http://jsfiddle.net/TcENr/(这是最快的测试!)
答案 1 :(得分:0)
旋转的微妙偏移的问题是因为我没有将三角形的半宽和高度添加到它的位置,这解决了问题:
rotation = atan2(centreY-(triangleY+triangleHalfHeight),centreX-(triangleX+triangleHalfWidth)) * 180 / Math.PI - 90;