2

私は2つのポイントを持っているとしましょう

Point p1 = new Pen(100, 100);
Point p2 = new Pen(200, 150);

そして、その点が楕円の中心にあるように、指定された半径でその点の楕円を描画します。

int radius = 5;
RectangleF rectangle = new RectangleF();
rectangle.Width = radius  * 2;
rectangle.Height = radius  * 2;
rectangle.X = Convert.ToSingle(p1.X - radius);
rectangle.Y = Convert.ToSingle(p1.Y - radius);
g.FillEllipse(brush, rectangle);
rectangle.X = Convert.ToSingle(p2.X - radius);
rectangle.Y = Convert.ToSingle(p2.Y - radius);
g.FillEllipse(brush, rectangle);

g.DrawLine(pen, p1, p2);

それらの点の間に線を引くと、ある中心から別の中心に線が引かれます。現時点ではそれと一緒に暮らすことができますが、作成したいのですが、その線は楕円の端から始まるので、それを通過しません。どうすればこれを達成できますか?

4

2 に答える 2

4

見つかった答え:

    public static PointF getPointOnCircle(PointF p1, PointF p2, Int32 radius)
    {
        PointF Pointref = PointF.Subtract(p2, new SizeF(p1));
        double degrees = Math.Atan2(Pointref.Y, Pointref.X);
        double cosx1 = Math.Cos(degrees);
        double siny1 = Math.Sin(degrees);

        double cosx2 = Math.Cos(degrees + Math.PI);
        double siny2 = Math.Sin(degrees + Math.PI);

        return new PointF((int)(cosx1 * (float)(radius) + (float)p1.X), (int)(siny1 * (float)(radius) + (float)p1.Y));
    }
于 2012-05-22T00:19:24.760 に答える
1

2つの選択肢があります。

1)最初に線を引き、それを単純に上書きしますFillEllipse

2)ラインの開始位置と終了位置をシフトします。

ライン位置をシフトするには、次のことを行う必要があります。a
中心間の角度を計算します。 -円の代わりに実際の楕円を使用する場合、これ
はTheta = tan-1(y2-y1 / x2-x1)です。b)その角度の楕円の半径を計算します。 -これはr(Theta)=(x * y)/ Sqrt(x * Cos(Theta)^ 2 + y * sin(Theta)^ 2)c)ラインのオフセットを計算します。 -これはx=rCos(Theta)およびy = rSin(Theta)です。




于 2012-04-30T10:30:11.523 に答える