C#从圆边到圆边绘制线

时间:2012-04-30 10:08:09

标签: c# graphics

假设我有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);

如果我在这些点之间画线,我会从一个中心到另一个中心。 目前我可以忍受这一点,但我想说,那条线从Ellipse的边缘开始,所以它不会经历它。我怎么能做到这一点?

2 个答案:

答案 0 :(得分: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));
    }

答案 1 :(得分:1)

你有两个选择,

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)