1

私はAndroidを使用しており、中心を中心に点(A)を回転させようとしていますが、それが私の中心を空間内の他の点(B)に接続する線に属している場合にのみ停止します。

ここに画像の説明を入力

ポイント座標は次のようなものです: pointX = 45.123456f , pointY = 21.654321f , ポイント B は動いていません.

実行中のスレッド内でこのコードを使用しています:

pointAX = (float) (centerX + ray*Math.cos(SPEED*time));
pointAY = (float) (centerY + ray*Math.sin(SPEED*time));

canvas.drawCircle(pointAX,pointAY, 2, paint);
time++;

弾道は本当に良く、アニメーションは十分に滑らかです。ラインに最も近い位置でポイントを停止するにはどうすればよいですか? このコードを使用していますが、機能しません:

if(pointAY/pointAX == pointBY/pointBX){
    stop();
}

小数点以下 3 桁または 4 桁のみを使用して値を丸めようとしても、点は線から離れすぎた場所で停止します。

4

1 に答える 1

0

あなたの円は によって定義されx^2 + y^2 = r^2、あなたの線はy = k*x + bです。
2 つの点が交差する点 I(x,y) を見つけ、次の反復で各ステップについて I から A までの距離を計算します。距離が伸び始めたら止めます。

x/y をチェックすると、選択したステップと円の半径に応じて、まったく異なる精度が得られます。

于 2013-05-24T10:21:15.687 に答える