0

次の C# コードが必要です。

私は2点(2D)を持っています。点は半径 r の円上にあります。各ポイントの接線角度を知っています。円の中点をつかむ必要があります。

//トーマス


OK、私は少し不明確だったと思います。下の画像を参照してください。点 P1 は線の終点にあり、線は角度 At1 を持ちます。点 P2 は、角度 At2 の線の始点にあります。P1 と P2 の座標はわかっています。角度 At1 と At2 も知っています。P1 と P2 の間に半径が形成され、P1、P2、At1、および At2 で形成される (見えない) 円の中心点 Pc を知る必要があります。ポイント P1 と P2 は、座標系のどこにでも配置できます。

私はそれがC#ではないことを知っていますが、これを解決した人に出くわしたいと思っていました.

画像を見る

4

3 に答える 3

1

点が円上で互いに最も離れていることがわかっていない場合、点が存在できる円は無限にあります。

それ以外の場合は、次のように簡単です。

Point pt1 = ...
Point pt2 = ...

Point mid = new Point((pt1.X + pt2.X) / 2, (pt1.Y + pt2.Y) / 2);
于 2012-05-08T14:35:47.080 に答える
0

まず、接線角度が平行かどうかを確認します。もしそうなら、あなたがする必要があるのは、Yorye Nathanの解決策に従って、それらの間の中点を見つけることです(両方とも円の直径に沿っているため)。

それらが平行でない場合は、既知の P1 と P2 から始まる接線角度に垂直な 2 本の線を引くことができます。この 2 つの直線の交点を解くと、その交点が Pc になります。

今は完全な C# の計算を書き上げてテストする時間はありませんが、疑似コードは次のようになります。

public Point CalculateCircleCentre(Point p1, Degrees tangent1, Point p2, Degrees tangent2)
{
    if (AreAnglesParallel(tangent1, tangent2))
    {
        return Midpoint(p1, p2);
    }
    else
    {
        var line1 = new Line(p1, tangent1 + 90);
        var line2 = new Line(p2, tangent2 + 90);
        var intersectionPoint = FindIntersection(line1, line2);

        return intersectionPoint;
    }
}
于 2012-05-09T19:12:25.497 に答える
-1

座標 (x1, y1), (x2, y2) の円上に 2 つの点があり、点 (x3, y3) が半径 r の円の中心であると仮定すると、x3 と y3 を見つけるだけで済みます。この系を解く:

(x3-x1)^2+(y3-y1)^2=r^2
(x3-x2)^2+(y3-y2)^2=r^2

に展開します

 x3*x3-2*x3*x1+x1*x1 + y3*y3-2*y3*y1+y1*y1 = r*r

 x3*x3-2*x3*x2+x2*x2 + y3*y3-2*y3*y2+y2*y2 = r*r

2*x3*(x2-x1) + 2*y3*(y2-y1) + x1*x1 + x2*x2 + y1*y1 + y2*y2 = 0

x3 をこの長い式に置き換えて、y3 を見つけることができます。

x3 = (2*y3*(y1-y2) - (x1*x1 + x2*x2 + y1*y1 + y2*y2)) / (2*(x2-x1))

その後、x3 を見つけるためのすべてを知ることができます。

于 2012-05-08T15:06:28.763 に答える