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 に答える