在圆圈内画一条线

时间:2017-05-22 08:19:34

标签: c# wpf math

我有一个圆圈,想要从中心(50 | 50)到圆圈边缘通过点击的点在该圆圈内画一条线。

为了测试一下,我已将此添加到我的Circle.MouseDown事件中,该事件从中心到我点击的点绘制线条:

var PosX2 = e.GetPosition(MyCircle).X;
var PosY2 = e.GetPosition(MyCircle).Y;

CircleLine.X1 = 50;
CircleLine.Y1 = 50;
CircleLine.X2 = PosX2;
CircleLine.Y2 = PosY2;

我需要添加什么来“拉伸”我的线到圆圈的边缘?

2 个答案:

答案 0 :(得分:2)

将其视为延长矢量的问题。

假设您获得了一个中心为(a,b)且半径为r的圆,并且该点(c,d)位于该中心以外的点的圆圈中。

然后,(a,b)(c,d)的向量为(c-a, d-b)。它的长度是

L = sqrt((c-a)^2 + (d-b)^2)

但是,向量r/L * (c-a,d-b)的长度为r,并指向与(a,b)(c,d)的光线相同的方向。只需按中心转换此向量,您就可以在圆圈上获得所需的点:

(a + r/L * (c-a), b + r/L * (d-b))

只需将中心与上述点连接即可。

答案 1 :(得分:1)

约翰斯评论给了我正确答案,谢谢!

我只想发布解决方案:

double X1 = 75;
double Y1 = 75;
double X2 = e.GetPosition(CircleButtonCanvas).X;
double Y2 = e.GetPosition(CircleButtonCanvas).Y;
double startPoint = 17;
double endPoint = 48;

double xDiff = X2 - X1;
double yDiff = Y2 - Y1;
double Angle = Math.Atan2(yDiff, xDiff) * (180 / Math.PI);
CircleLine.X1 = 75 + (endPoint* Math.Cos(Angle * (Math.PI / 180)));
CircleLine.X2 = 75 + (startPoint * Math.Cos(Angle* (Math.PI / 180)));
CircleLine.Y1 = 75 + (endPoint * Math.Sin(Angle* (Math.PI / 180)));
CircleLine.Y2 = 75 + (startPoint * Math.Sin(Angle* (Math.PI / 180)));

以75 | 75成为我圈子的中心