Python:从单独的线中的点绘制一条垂直线

时间:2019-10-12 06:32:07

标签: python matplotlib geometry line point

A点在任意位置。如果将一条线(A线)从点A绘制到另一条线(B线)上的任意位置,我该如何创建一个函数来创建一条与原始线垂直的新线(并且与B线相交)?我在操纵两个点之间的特定点时遇到了麻烦(基本上我找不到相交的确切位置,而这个位置是我的项目的关键。)

enter image description here

对此的其他限制条件包括:如果线A与线B相交并创建一条垂直线,那么它将创建沿线A的相同方向但向后的线C。

重要说明:由于一条垂直的新线相对于线A可以向左或向右90度,因此,如果长度为X的线在另一侧与另一条线(线C)交叉而不是线否则,将仅在非C线相交路径中生成第三条生成的线。

最后,这种功能需要递归。有没有人有任何想法可以帮助我朝正确的方向发展?

顺便说一句,我正在使用Python,并试图找出一种利用matplotlib的解决方案(除此以外,还可以使用其他软件包)。

非常感谢您在此频道上提供的所有帮助和支持!如果对我来说做一些示范性的图纸有帮助,请告诉我!

1 个答案:

答案 0 :(得分:0)

以参数形式表示初始射线

R = A + t * dir

A是起点的情况下,t是参数(此处的值> = 0),而dir是单位方向矢量(其分量是方向角的余弦和正弦)

也可以以参数形式表示多边形或折线

Side[i] = P[i] + u * (P[i-1] - P[i])

其中P[i]是第i个顶点,u的值位于0..1范围内

现在可以使用任何方法(例如,查看Garrett Rees的答案here)找到射线与另一侧的交点。如果u参数在0..1范围内,则交点位于侧面。

找到交点I时,更改射线方向:

(dir'.x, dir'y) = (-dir.y, dir.x) 

它对应于向量在逆时针方向上旋转Pi / 2。如果您需要其他方向,请更改标志。也许您想改变方向以使新向量成为“内部”-在这种情况下,请检查旧dir与侧面方向向量的标量积的符号。

现在新的射线方程是

R' = I + t * dir'

并继续另一侧。