2016-07-04 4 views
0

私は単純な粒子シミュレーションを作成しようとしています。静的な粒子と動いている粒子の2種類があります。静的粒子は、動く粒子をその中心に引き付ける。静的粒子は、移動する粒子を引いているどのようにハード粒子がオーバーシュートするのを止めることはできません

var angle:Number = Math.atan2(moving.y - static.y , moving.x - static.x); 
var dist = Point.distance(new Point(moving.x,moving.y) , new Point(static.x,static.y)); 

moving.velX += Math.cos(angle + Math.PI) * static.strength/dist; 
moving.velY += Math.sin(angle + Math.PI) * static.strength/dist; 

問題は、粒子がちょうど中心を通過したときの距離が非常に小さいことである指示強度属性を持っている非常に大きな速度値をもたらします。

私は、速度を計算する前に距離のチェックを追加しました。

if (dist < 1) 
    dist = 1; 

しかし、この問題は引き続き発生します。私は問題を把握できません。

ここには、発生しているオーバーシュートのスナップショットがあります。

enter image description here

答えて

1

ノーマルフォースフィールドは改質剤としての距離の2乗を使用し、あなたはここで距離の単一電源を使用し、もちろん力場が異なり行います。次へvar dist行を変更する必要があります。

var dist:Number = (moving.x-static.x)*(moving.x-static.x) + (moving.y-static.y)*(moving.y-static.y); 

この方法でdistを、実際の距離の2乗を開催しますので、distで割ることは、あなたに適切な力場の設定を与えるだろう。

staticは、AS3の予約語ですので、名前を変更してください。

+0

私は元のコードで変数名として 'static'を使用していません。 –

+0

@SayamQazi、あなたのコードをチェックすると、 'static.x'と' static.y'があります。それを 'force'と呼ぶか、' atttractor'とか、変数ではないものやクラス名を予約語と同じ色に変えます。 –

+0

はい私は知っています。私は元のコードについて話していました。私はここに元のコードを貼り付けてコピーしませんでした。 –

2

dist計算を実行する前に、またはvel計算を実行した後に、おそらくdistの値を宣言しているとします。代わりに、実行中のディシジョンチェックがdist計算とvel計算の間にあることを確認してください。ヴェスパーは正しい力効果を得るには、距離の二乗を使用すべきです。しかし、それでも、あなたは依然として望ましくない(完全に正確で数学的には)結果を得ることができます。

var angle:Number = Math.atan2(moving.y - static.y , moving.x - static.x); 
var dist = Point.distance(new Point(moving.x,moving.y) , new Point(static.x,static.y)); 

if (dist < 1) dist = 1; // just make sure your constraint goes here. 

moving.velX += Math.cos(angle + Math.PI) * static.strength/dist/dist; // this uses dist squared 
moving.velY += Math.sin(angle + Math.PI) * static.strength/dist/dist; // but don't use this method in addition to Vesper's or you'll have dist to the power of 4. 
+0

はい私は、距離計算と速度部分の更新の間に距離チェックをしています。あなたはまだ私が望ましくない結果を得るかもしれないと言っているので、私に解決策を提案してください。 –

+0

明らかにヴェスパーはあなたの問題を解決しました。あなたは私のアドバイスを無視することができます。または彼の解決策は機能しませんでしたか? –

関連する問題