1

私は、特定の速度で特定のポイントに向かって長方形を移動する方法を見つける必要があるという概念に取り組み始めました。私は Android 向けに開発しているので、これは比較的速度が重要です (数百のオブジェクトのフレームごとに計算される可能性もあります)。

私が考えることができる解決策は次のとおりです。

float diff_x = x2 - x1;
float diff_y = y2 - y1;
float length = sqrt((diff_x * diff_x) + (diff_y * diff_y));
float dir_x = diff_x / len;
float dir_y = diff_y / len;

float move_x = dir_x * MOVE_SPEED;
float move_y = dir_y * MOVE_SPEED;

ご覧のとおり、この方法では平方根が必要であり、かなりコストがかかることがわかっています。三角法を使用する別の方法を考えましたが、コストもかかります。

float diff_x = x2 - x1;
float diff_y = y2 - y1;
float angle = atan2(diff_y, diff_x);

float move_x = sin(angle) * MOVE_SPEED;
float move_y = cos(angle) * MOVE_SPEED;

他の方法はありますか?そうでない場合、どのソリューションがより高速になりますか? 助けてくれてありがとう。

4

1 に答える 1

2

使用できる非常に一般的なトリックは、すべてを 2 乗/2 の累乗/ ^2 にすることです。

sqrt を使用する代わりに、この方法を使用します

length = (diff_x * diff_x) + (diff_y * diff_y);
diff_x*diff_x/length
于 2011-06-19T23:22:48.950 に答える