重複の可能性:
円線の衝突検出
私は問題があります。ポイントAを見つける必要があります。
どうすればこれを最善の方法で行うことができますか?
プログラミング言語はJavaです。
与えられたもの:中心がC = [x2、y2]で半径がRの円は、CからB = [x1、y2]までの線分で交点を計算します。
端点の1つが円の中心であるため、これは簡単です。CからBに向かってRの距離を歩く必要があります。距離は円に到達することを保証し、方向は光線C->Bに到達することを保証します。交差点がセグメント上にあるかどうかを確認する必要があります。
ベクトルライブラリがある場合の擬似コードは次のとおりです
- offset = B-C
- if length_square(offset) < R^2 output "no intersection"
- offset_a = normalize(B-C) * R
- output C + offset_a
ライブラリがないと、コードは長くなります。
- off_x = x1-x2;
- off_y = y1-y2;
- ls = off_x*off_x + off_y*off_y
- if ls < R*R
-- return an empty array, meaning "no intersections"
- scale = R / sqrt(ls)
- res_x = off_x * scale + x2
- res_y = off_y * scale + y2
- return [[off_x, off_y]]