可以通过线段的跨立实验[1]判断两条线段是否相交,但是想要进一步求它们的交点还是比较麻烦。[2]给出的方法更加简单,其原理来自求三维空间两条线段的交点[3]。为了更好的理解,本文将详细介绍二维空间两条线段的交点求解过程。
给定两条线段\(\overline{P_1 P_2}\)和\(\overline{P_3 P_4}\),端点表示为\(P_1(x_1,y_1)\)、\(P_2(x_2,y_2)\)、\(P_3(x_3,y_3)\)和\(P_4(x_4,y_4)\),两条线段对应的向量表示为\(\overrightarrow{P_1 P_2}\)和\(\overrightarrow{P_3 P_4}\)。假设两条线段的交点为\(P_0(x_0,y_0)\),且\(t=\frac{|\overline{P_1 P_0}|}{|\overline{P_1 P_2}|}\) 、\(s=\frac{|\overline{P_3 P_0}|}{|\overline{P_3 P_4}|}\),那么 \(P_0\) 可以表示为:
(资料图)
\(t\)和\(s\)在等于\(0\)或\(1\)时表示两条线段相交在端点,如果为其他值,表示两条线段不相交。将点坐标代入公式得:
\[\begin{cases}x_1 + t * (x_2 - x_1) = x_3 + s * (x_4 - x_3) \\y_1 + t * (y_2 - y_1) = y_3 + s * (y_4 - y_3)\end{cases}\]利用公式消元法求得\(t\)和\(s\):
\[t = \frac{ (x_3 - x_1)(y_4 - y_3) - (y_3 - y_1)(x_4 - x_3) }{ (x_2 - x_1)(y_4 - y_3) - (y_2 - y_1)(x_4 - x_3) } \\ s = \frac{ (x_3 - x_1)(y_2 - y_1) - (y_3 - y_1)(x_2 - x_1) }{ (x_2 - x_1)(y_4 - y_3) - (y_2 - y_1)(x_4 - x_3)} \]\(t\)和\(s\)方程的分子和分母都是向量的叉乘:
\[t = \frac{ \overrightarrow{P_3 P_1} * \overrightarrow{P_4 P_3} } { \overrightarrow{P_2 P_1} * \overrightarrow{P_4 P_3} } \\ s = \frac{ \overrightarrow{P_3 P_1} * \overrightarrow{P_2 P_1} }{ \overrightarrow{P_2 P_1} * \overrightarrow{P_4 P_3} } \]如果\(\overrightarrow{P_2 P_1} * \overrightarrow{P_4 P_3} = 0\),表示两条线段平行,如果端点在另一条线段上,则该端点为交点,否则不是。如果\(t\)和\(s\)有一个没有落在区间\([0,1]\)内,则两条线段不相交。那么交点\(P_0\)的坐标为:
\[\begin{cases}x_0 = x_1 + t*(x_2 - x_1) \\y_0 = y_1 + t*(y_2 - y_1)\end{cases}\]或
\[\begin{cases}x_0 = x_3 + s*(x_4 - x_3) \\y_0 = y_3 + s*(y_4 - y_3)\end{cases}\]至此,整个求解过程介绍完成,再去看[2]的代码就非常容易理解了。
How to check if two given line segments intersect?
Find the Intersection Point of Two Line Segments
Intersections of Lines In Three-Space - Jon Garvin
标签:
上一篇 : 环球观天下!华南城(01668.HK):6月19日南向资金减持60.2万股
下一篇 : 最后一页
3月16日,盛和资源(600392)副总经理毛韶春、黄厚兵,财务总监夏兰田,董秘郭晓雷,通过上交所集中竞价交...
2022年3月15日,这是继1983年以来的第40个国际消费者权益日。中消协组织围绕共促消费公平消费维权年主题...
首批金控牌照的归属出炉,两家公司拿到许可证。3月17日,央行发布公告称,已批准中国中信金融控股有限公...
时隔半月之久,西宁市城北区逐步推动复工复产,往日的生机活力被渐渐寻回,牛肉面红油飘香、包子铺炊烟...
音乐是我生活的一部分,是我的梦想,也是我的事业。英国音乐人亚当(Adam)告诉记者,在中国的十几年里,...
Copyright © 2015-2022 南极舞蹈网版权所有 备案号:粤ICP备2022077823号-13 联系邮箱: 317 493 128@qq.com