質問

私はこれに何時間も費やして、私の正気がゆっくりと滑るのを感じることができます。だから、どんな助けも本当に感謝しているでしょう。私はできるだけ簡潔にしようとします。

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の円と交差する接線に線を伸ばすと、同イソセルも形成します。

そこから簡単に理解できるはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top