1

わかりました、Android でパーティクル システムを使用しています。

現在、私は 500 個ほどのパーティクルを使用しており、それらは画面上をランダムに動き回っています。私はそれをオンタッチ(実際には今の動き)に設定しました。すべての粒子が指に近づきます。問題は、それらが静的な角度で近づいていることです(タッチポイントからの角度を考慮していません)。

ポイントに均等にアプローチする方法を決定するアルゴリズムを持っている人はいますか? ランディアンで角度を取得しようとする試み..変換など..本当に面倒になりました。この単純なアプローチは、私が適切なペースで動くことを示しています..しかし、それは単純な 45 角度のアプローチです。(Android では、負の x、y 座標がないことに注意してください。左上は 0、0、右下は (max、max) です。関数は ontouch (x、y) 座標を取ります。bx、by は粒子座標。

public void moveParticles(float x, float y) {
    for (Particle b : Particles)
        {
         if (x <= b.x)
             b.x = b.x -1;
         else b.x = b.x +1;

          if (y <= b.y)
            b.y = b.y -1;
          else b.y = b.y +1;
         }          
}
4

2 に答える 2

2

タッチが画面の中央にあると仮定する単純なコード:

public void moveParticles(float x, float y) {
    for (Particle b : Particles) {
      b.x += ((b.x-x)/(x/2))*speedmodifier;
      b.y += ((b.y-y)/(y/2))*speedmodifier;
    }
}

タッチ軸の両側で正規化された速度をコード化します。

public void moveParticles(float x, float y) {
    for (Particle b : Particles) {
      height_difference = screenheight-x;
      width_difference = screenwidth-y;
      height_ratio = (b.x < x) ? screen_height-height_difference : height_diffrence;
      width_ratio = (b.y < y) ? screenwidth-width_difference : width_difference;

      b.x += ((b.x-x)/height_ratio)*speedmodifier;
      b.y += ((b.y-y)/width_ratio)*speedmodifier;
    }
}

このコードを作成する手順: タッチがどこにあってもパーティクルの速度を 0 から 1 に正規化するために、x 軸と y 軸の上下の画面の比率を取得する必要があります。

height_difference = screenheight-x;
width_difference = screenwidth-y;
height_ratio = (b.x < x) ? screen_height-height_difference : height_diffrence;
width_ratio = (b.y < y) ? screenwidth-width_difference : width_difference;

正規化情報を取得したら、それを使用して粒子速度を正規化できます。

b.x += ((b.x-x)/height_ratio)*speedmodifier;
b.y += ((b.y-y)/width_ratio)*speedmodifier;
于 2011-09-29T02:13:24.860 に答える
1

パーティクルの変位を、収束点を原点とするベクトルとして取得します。

x = particle.x - finger.x
y = particle.y - finger.y

単位ベクトルを取得します。

norm = sqrt(pow(x, 2.0) + pow(y, 2.0))
x = x / norm
y = y / norm

パーティクルを単位ベクトル * -1 * 速度係数で移動:

particle.x -= x * speed
particle.y -= y * speed

それは動作しますか?私はこれを書いただけで、試したり、試したりしませんでした。

于 2011-09-29T02:21:40.900 に答える