円周上の点から離れた固定されたアークの長さを計算する方法(x、y)
-
29-09-2019 - |
質問
私はこれに何時間も費やして、私の正気がゆっくりと滑るのを感じることができます。だから、どんな助けも本当に感謝しているでしょう。私はできるだけ簡潔にしようとします。
2Dプレーンに円があります。中心点(C)と半径(R)のデカルト座標を知っています。
私の混乱はこの問題に由来しています。円の外側の平面上に点が与えられた場合。その点に最も近い円の円周上の点(p)を計算できます。
私がやりたいのは、円周上の2ポイントの(x、y)座標を決定することです。それらをP1とP2と呼びましょう。 P1とP2は、アークの両端です。アークは固定長(x)です。 Pは、P1とP2の間の中間点です。そのため、PからP1&PからP2までのアークの長さは両方ともx/2です。
要するに、C、R、P、Xを与えられた。 P1とP2を計算する必要があります。
私はこれをC ++でコーディングしようとしていますが、どんな提案や擬似コードは素晴らしいでしょう。
編集:Xはアークの長さであり、P1とP2の間の直線ではありません
解決
円の上で、角度 theta
のアークの長さに対応します theta * R
, 、アークが角度を抑えることを意味します theta = X / R
. 。したがって、あなたのポイントから始めてください
P = C + R * (sin(u), cos(u))
次に、上を/下ります theta/2
:
P1 = C + R * (sin(u + theta/2), cos(u + theta/2))
と
P2 = C + R * (sin(u - theta/2), cos(u - theta/2))
他のヒント
θ(ラジアン)の角度を帯びる弧は、θrのアークの長さを持っています。したがって、θ= x/(2R)の半角が必要です。次に、ベクトル(p -c)を取得し、±θの角度で回転させ、Cに戻してp1とp2を取得する必要があります。ベクトルを角度で回転させるには、 回転マトリックス.
したがって、Pseudocodeでは、次のようになります。
θ = X/(2R)
A = 2x2 rotation matrix corresponding to a rotation by θ radians
A' = transpose of A
P1 = C + A * (P - C)
P2 = C - A' * (P - C)
役立つことがいくつかあります。コードを書くつもりはありませんが、ソリューションは三角形に基づいていると思います。検討:
半径は同じ長さです。
したがって、p1-p1-cから描かれた三角形はイソスセルです。
どんな接線も半径に垂直です。
私はここと今それを証明するのは難しいでしょうが、CからP1/P2からC-> Pの円と交差する接線に線を伸ばすと、同イソセルも形成します。
そこから簡単に理解できるはずです。