第2个回答 2020-12-07
首先我先说一点,楼主你要的是两个线段的交点,那么首先我们得判断两个线段有没有交点。两个线段有交点的重要条件是每个线段都跨过了另一个线段的所在直线。反之,其中任何一个线段没有跨过另一个线段的所在直线,则两线段不相交。OK,第一步,我们做相交检测。举两个栗子,上图向量b,c(深绿,浅绿)分别为与向量a (蓝色)不相交和相交两种情况。以a的起点开始计算,到向量b的起点终点构成两条向量b1和b2。向量b与向量a不相交,则a与b1的叉乘和a与b2叉乘的结果符号相同。向量c与向量a相交,则a与b1的叉乘和a与b2的叉乘结果符号不同。以上的计算不要忘了需要两个向量正反算一遍写程序最烦什么?—— Corner case, 比如检查除数为0不为0啊之类的。所以我要给出的答案必须是非零向量计算,极力避免除0检测(高中解析几何斜率式深入人心真是坑爹啊!)对于不相交的线段,我们就不再计算了。第二部,相交线段计算交点为了避免代码做各种蛋疼的判断,我们依然坚持使用向量计算,避免各种检测。继续上图:绿色线段的两个点分别投影到蓝色的向量上,则得到两个投影点(x5, y5)和(x6, y6).交点(x, y)距离两点的比例则和d1, d2的比例相同那么交点就可以表示成两个点坐标的线性组合:什么?你说投影不好做?那么请看下面这个方法第三步(拜托,我不是第三,其实算第二部之前应该先算我的),通过向量轻松解投影点顺便计算投影距离给定一个直线外点(x0, y0)和直线上两点(x1, y1), (x2, y2),计算投影点(x, y)先计算目标线向量(蓝色),(x2, y2)减去(x1, y1),再取单位向量得到紫色向量。然后红色向量和紫色向量内积,得到红色向量在紫色向量方向的投影长度,即黄色向量长度。用(x1, y1)加上黄色向量即为投影点。投影距离即为投影点和(x2, y2)的距离。在多数语言的数学库中,有一个特别基本的函数来计算:hypot(x-x2, y-y2)
用户1543358479075981
0粉丝 · 1821赞
搜索
初一数学开窍的诀窍
数学66个秒杀技巧
高中数学186个解题技巧
猿辅导五年级上册数学
坐标中求对称点坐标
火花数学思维