2

だから私はjavascriptとキャンバスでパーティクルエミッターに取り組んでいます。
そして、角度に基づいてパーティクルが放出する方向を設定できるようにしたいと考えています。

これは、次の関数で実行できます。

y = Math.tan(45 * Math.PI/180);

角度が 45 の場合は 1 を返します。

しかし、ピクセルの計算方法が少し異なるため、これをどのように実装すればよいか正確にはわかりません。-1 は各ステップで 1 ピクセルを削除し、1 は 1 ピクセルを追加すると考えてください。

角度が 45 の場合、Y は 1、X は 1 で正しいです。
しかし、315 度で移動するピクセルを取得するには、Y は -1 で、X は 1 である必要があります
。225 度では、Y は -1 (ただし 1 です) で、X は -1 である必要があります。

このように機能する場合、関数はどのように見えるべきですか?

これが私がどのように考えているかのイメージです:
(エミッターは原点にあります。)

エミッターは原点にあります

4

2 に答える 2

1

実は簡単です、

angle = (angle * Math.PI/180) % 360;
tangent = Math.tan(angle);

xがどこにあるかわからないので;

section_x_positive = (angle<90||angle>270?1:-1);
section_y_positive = (angle>0&&angle<180?1:-1);
x = abs(tangent) * section_x_positive;
y = abs(tangent) * section_y_positive;
于 2012-06-23T14:48:02.210 に答える
0

あなたの問題は、ベクトル量である方向をスカラーであるかのように考えていることのように思えます。

2D ベクトルは 2 つのコンポーネントとして表されることを覚えておく必要があります。

ここに画像の説明を入力

ここに画像の説明を入力

単位ベクトルで作業できるので、大きさ r = 1 です。

したがって、ラジアンで測定され、反時計回りの方向に増加し、x = 0 水平軸から始まる方向角がある場合、目的の方向を指す単位ベクトルの 2 つのコンポーネントになります。 .

于 2012-06-23T18:08:21.643 に答える