如何解决如何检查点Cx3,y3是否落在由两个点Ax1,y1和Bx2,y2形成的直线之间
我有两个点A(x1,y1)和B(x2,y2),我需要检查点c(x3,y3)是否落在由点A和B形成的直线上。
A ------ C -------------------- B然后是C在A和B之间
A --------------------------- B
C
在第二种情况下,C不在A和B之间。
解决方法
使用复数,我们定义了一个相似性转换,将A映射到0,将B映射到1:
W = (Z - Za) / (Zb - Za)
然后Wc = (Zc - Za) / (Zb - Za)
是一个复数,应具有零个或很小的虚数值,并且实数值应介于0和1之间。
制作两个向量
cax = x1 - x3
cay = y1 - y3
cbx = x2 - x3
cby = y2 - y3
并检查它们之间的夹角是否为Pi
:
计算这些向量的点和叉积
dot = cax * cbx + cay * cby
cross = cax * cby - cay * cbx
如果cross
为零且dot
为负,则点C位于AB段上
dot < 0
abs(cross) < eps
其中eps
是小数值,例如1e-6,以补偿浮点计算错误。
如果确定所有三个点都对齐,则可以使用矢量AC和AB之间的点积,以及矢量BA和BC之间的点积。
提醒:向量AB =(xB-xA,yB-yA) 提醒:dot(AB,AC)= xAB xAC + yAB yAC
如果dot(AB,AC)> 0,则表示C从A向B方向 如果dot(BA,BC)> 0,则表示C从B指向A的方向 如果同时满足以上两个条件,则表示C在A和B之间
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。