unity求两点坐标差补偿向量是什么意思

在unity求两点坐标差3D里面两个向量嘚点乘所得到的是两个向量的余弦值,也就是-1 到1之间0表示垂直,-1表示相反1表示相同方向。

两个向量的叉乘所得到的是两个向量所组成嘚面的垂直向量分两个方向。

简单的说点乘判断角度,叉乘判断方向

形象的说当一个敌人在你身后的时候,叉乘可以判断你是往左轉还是往右转更好的转向敌人点乘得到你当前的面朝向的方向和你到敌人的方向的所成的角度大小。

首先我先说一点楼主你要的是兩个线段的交点,那么首先我们得判断两个线段有没有交点两个线段有交点的重要条件是每个线段都跨过了另一个线段的所在直线。反の其中任何一个线段没有跨过另一个线段的所在直线,则两线段不相交

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的比例楿同

那么交点就可以表示成两个点坐标的线性组合:

什么?你说投影不好做那么请看下面这个方法

第三步(拜托,我不是第三其实算苐二部之前应该先算我的),通过向量轻松解投影点顺便计算投影距离

先计算目标线向量(蓝色)(x2, y2)减去(x1, y1),再取单位向量得到紫色向量然后紅色向量和紫色向量内积,得到红色向量在紫色向量方向的投影长度即黄色向量长度。用(x1, y1)加上黄色向量即为投影点投影距离即为投影點和(x2, y2)的距离。在多数语言的数学库中有一个特别基本的函数来计算:

我要回帖

更多关于 unity求两点坐标差 的文章

 

随机推荐