我有一个圆圈,想要从中心(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;
我需要添加什么来“拉伸”我的线到圆圈的边缘?
答案 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成为我圈子的中心