2012-01-09 13 views
4

私は、あるサイレンの半径の周りに点を作成して一連のポリゴンを描画するゲームを作成しています。回転した形の点の位置を計算するにはどうすればいいですか?AS3

後で私は形を回転させ、回転に基づいて点の新しい位置(X、Y)を計算する必要があります。私は各点のOld XY、形状の中心のXY、形状の半径と回転を持っています。

私の問題の図を見てください。

Diagram of problem

答えて

3

このために行列変換を使用することが可能でなければなりませんが、あなたはまた、手動でそれを行うことができます。 http://www.siggraph.org/education/materials/HyperGraph/modeling/mod_tran/2drota.htm

だから、基本的に。

newX = initialX * Math.cos(angle) - initialY * Math.sin(angle); 
newY = initialY * Math.cos(angle) + initialX * Math.sin(angle); 
//Angle is in radians btw 

これはinitialX/Yは、回転の中心に相対的であることを前提として、あなたが開始する前に、中心点を減算して、それを正しく配置するために計算した後、それを再度追加する必要があります。

希望すると便利です。各点について

+0

これは大変感謝しています! – Max

+0

シェイプを3D空間で回転させた場合、どうしますか? – BladePoint

1

を行う:

alpha = arctan2(x, y) 
len = sqrt(x^2 + y^2) 
newX = len * cos(alpha + rotation) 
newy = len * sin(alpha + rotation) 

オリジナル[X、Y]と新しい[newX、newY]座標が両方あなたの回転の中心に対するものです。元の[X、Y]がアブソルートある場合は、相対的な最初の計算する必要があります。

x = xAbs - xCenter 
y = yAbs - yCenter 

は、x = 0の場合、あなたの上記Arctan2機能は、PI/2または-PI/2の結果を提供していることを確認します。プリミティブarctan関数はx = 0を許さない。

+0

これについては、元の点の長さも計算し、cos/sinの結果にそれを掛けて正しい位置を取得する必要があります。 –

+0

はい@JonatanHedborg、あなたは正しいです。私はそれに応じて編集したので、正しいはずです。 – Jpsy

関連する問題