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

问题描述 投票:1回答:1

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

enter image description here

对此的其他约束条件包括,如果线A与线B相交并创建一条垂直线,则它会创建沿与线A相同的方向但向后的线C。

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

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

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

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

python matplotlib geometry line point
1个回答
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)

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

现在新射线方程是

R' = I + t * dir'

并继续另一端。
© www.soinside.com 2019 - 2024. All rights reserved.