Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 线交点_C#_Wpf_Graphics_Intersection_Shapes - Fatal编程技术网

C# 线交点

C# 线交点,c#,wpf,graphics,intersection,shapes,C#,Wpf,Graphics,Intersection,Shapes,对于WPF和c#中作为形状的两条线、两条路径或两点列表,是否有人知道如何检测交点并将交点绘制成圆形,以使眼睛清楚地看到这两条线没有连接(类似于MS visio)? 我只需要这样做的原则,虽然一些代码将是有用的。谢谢。 AS,从基本上来说,你可以把你的线段看作是点和向量的组合。通过选择一个点作为“原点”,并从另一个点的X和Y减去其X和Y,可以得到两个点,形成“增量”。对其他线段执行相同的操作 现在,如果这两个向量交叉,将有两个标量可以应用,每个向量一个,以产生一个较短的向量,该向量与相应的向量共线

对于WPF和c#中作为形状的两条线、两条路径或两点列表,是否有人知道如何检测交点并将交点绘制成圆形,以使眼睛清楚地看到这两条线没有连接(类似于MS visio)? 我只需要这样做的原则,虽然一些代码将是有用的。谢谢。

AS,从基本上来说,你可以把你的线段看作是点和向量的组合。通过选择一个点作为“原点”,并从另一个点的X和Y减去其X和Y,可以得到两个点,形成“增量”。对其他线段执行相同的操作


现在,如果这两个向量交叉,将有两个标量可以应用,每个向量一个,以产生一个较短的向量,该向量与相应的向量共线,并表示原点和交点之间X和Y的增量。这些标量可以通过两个向量的叉积函数找到;有关确切的数学知识,请参见相关问题。最后,为了使两条线段相交,相交的向量必须在其原始定义的长度内相交;也就是说,表示向量到交点的长度的两个标量必须是
0

有一种方法可以使用齐次坐标轻松获得所需的值。要表示点,请使用
Vector3
,并使
z
坐标等于1

P1 = [x1, y1, 1]
P2 = [x2, y2, 1]
连接两个点的直线是
L12=CROSS(P1,P2)=[a,b,c]
,其中
CROSS
是向量叉积,直线方程是
a*x+b*y+c=0

现在如果你有两行

L12 = [a,b,c]
L34 = [e,f,g]
这两条线的交点是
Q=CROSS(L12,L34)=[qx,qy,qw]
和坐标

x = qx/qw
y = qy/qw
示例:两行,
L12
连接点
(1,1)
(2,8)
,以及
L34
连接点
(4,-2)
(9,3)
。找出两条线的交点

L12 = CROSS( [1,1,1], [2,8,1] ) = [-7, 1, 6]     //eq: -7*x+y+6=0
L34 = CROSS( [4,-2,1], [9,3,1] ) = [-5, 5, 30]   //eq: -5*x+5*y+30=0
Q = CROSS([-7,1,6], [-5,5,30]) = [0, 180, -30]
x = 0/(-30) = 0
y = 180/(-30) = -6
GeoGebra屏幕截图:

您需要数学或WPF方面的帮助吗?您的线是如何表示的?可能重复:@SamIam我的线目前是绑定到PathGeometry的路径,该路径由多个多段线组成。@KeithS它不是重复的。