C# 如何找到边上的交点

C# 如何找到边上的交点,c#,intersection,C#,Intersection,大家好,我正在写一个分析点数据的小脚本——一切都差不多完成了,但我坚持寻找两条线(边)之间的交点,这些点之间有一个给定的长度。下图更好地说明了问题: 编辑:这是唯一的二维问题&DB和BE之间的距离应该相等假设您希望距离DE为给定的L。你的分数{D}和{E}是 {D} = {B} + x * {a} {E} = {B} + x * {c} 其中,{a}是归一化向量BA,{c}是归一化向量BC。(这些向量必须具有相同的长度,以便两个向量都可以使用相同的因子x。归一化是实现这一点的最简单方法。)

大家好,我正在写一个分析点数据的小脚本——一切都差不多完成了,但我坚持寻找两条线(边)之间的交点,这些点之间有一个给定的长度。下图更好地说明了问题:


编辑:这是唯一的二维问题&DB和BE之间的距离应该相等

假设您希望距离
DE
为给定的
L
。你的分数
{D}
{E}

{D} = {B} + x * {a}
{E} = {B} + x * {c}
其中,
{a}
是归一化向量
BA
{c}
是归一化向量
BC
。(这些向量必须具有相同的长度,以便两个向量都可以使用相同的因子
x
。归一化是实现这一点的最简单方法。)

现在你有了方程式:

L = |{D} - {E}|
  = |x*{a} - x*{c}|
细分为向量组件:

L = sqrt((x*ax - x*cx)² + (x*ay - x*cy)²)
  = x * sqrt((ax - cx)² + (ay - cy)²)
求解
x

x = L / sqrt((ax - cx)² + (ay - cy)²)

并使用上述第一个方程式中找到的
x

满足此条件的点数有限。你必须选择一个点的长度,没有进一步的限制,有很多方法可以通过固定的距离DE得到D和E。你想成为BD=be吗?或者BA/BD=BC/BE?@MOehm它唯一的二维问题&DB和BE之间的距离应该相等。红色和绿色段的长度与
DE
段相同。您能否为
D
E
点的位置定义更好的标准?DB和BE之间的距离应该相等并没有真正意义。@Sinatr你们在开玩笑吧?DB&BE应该相等-只指定了一个B点。。。还有其他点,如A&C。。。ehhh我读了好几遍你的评论,现在我明白了你的观点-也许我的标准不清楚-点D&B之间的距离和点B&E之间的距离应该是相等的,应该有时间来实现这一点-好吧,它是有效的-非常感谢,但D&E点不是在AB BC段上创建的。我是做错了什么,还是可以这样创建?你是说点位于通过A和B的直线上,而不是在线段中?是的,当线段不是很长或者线段之间的角度很锐利时,可能会发生这种情况。当
x>|AB
时,该点位于
AB
之外。