首页 > 解决方案 > 创建一个函数,找到两行相距 r 个单位的点

问题描述

我有两条线,每条线由两个点(P1,P2,P3,P4)定义。

我想找到与两条线相距 r 个单位的2 个点(X0, Y0) 。

我找到了一种方法,但我认为解决的时间太长(对我来说太难了),也许还有一个更短的方法(https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line)。

我的方式: 我的解决方案 如果不解决它,就不可能创建函数

我想要解决方案而不是系统。

示例(我想找到知道 r 的黄点):在此处输入图像描述

谢谢。

(对不起我糟糕的英语)

标签: javascriptfunctionmath

解决方案


变体 A:以一般形式
表示您的线条

 a * x + b * y + c = 0
 d * x + e * y + f = 0

具有归一化系数(将方程除以Sqrt(a^2+b^2)

对于这种形式的点位于距离 r 如果

 |a * x + b * y + c| = r
 |d * x + e * y + f| = r

使用所有可能的 +/- 符号组合打开绝对值括号,并获得 4 个可能点的 4 个线性系统


变体 B:

1)找到两条线的单位方向向量dadb

C2)找到两条线的交点

3)计算线之间的角度为

Fi = atan2(da.cross.db, da.dot.db)

4) 求单位平分线向量

b = (da + db).Normalized

5)找到垂直平分线

pb = (-b.y, b.x)

6)获得所需的积分

C + b * r / Sin(Fi/2)
C - b * r / Sin(Fi/2)
C + pb * r / Cos(Fi/2)
C - pb * r / Cos(Fi/2)

推荐阅读