3D数学基础[二]三维向量和三维坐标系

三维向量

三维向量P(x,y,z)可以看成是点从原点到点p的一个向量,即向量P(x,y,z) = p(x,y,z)-o(0,0,0)。可以延伸到从点a到点b的向量ab表示为 b(x2,y2,z2) - a(x1,y1,z1) =
(x2- x1,y2- y1,z2- z1)
向量A减去向量B的计算公式是A(a,b,c) - B(x, y, z) = C(a - x, b - y, c - z)
向量A加上向量B的计算公式是A(a,b,c) + B(x, y, z) = C(a + x, b + y, c + z)
三维向量B(x, y, z)的长度 = math.sqrt(x ^ 2 + y ^ 2 + z ^ 2 )

点积
设向量A(a,b,c) 向量 B(x, y, z)
A 和 B的点积是 ax + by + cz 和二维向量一样 三维向量的点积结果是一个标量
其他的地方也和二维向量一样
符合交换律
a * b = |a| * |b| * cosθ θ 是a向量与b向量起点相连的夹角,其中|a|表示a的长度
意义 :|b| * cosθ 可以表示b投影到a向量的长度(不理解可以想象一下 直角三角形斜边与直角边a的关系,设他们的夹角为γ 斜边*cosγ则表示为直角边a了)
因为 |a| 和|b|都是大于0的,所以结果的正负值取决于 cosθ
所以 点乘结果小于0 参与点乘的两个向量的起点相连的夹角是钝角
大于0 则是锐角
等于0 则是直角

根据点乘的巧妙转换 如果a和b都是单位向量,则a和b的点乘的值等于a和b起点相连的夹角的余弦值

叉乘

向量的叉乘结果是一个新向量
设向量a和b和叉乘结果向量c ,a与b的起点相连,夹角为θ
aXb=c
性质:
c⊥a,c⊥b,即结果向量垂直于叉乘向量组成的平面
结果向量的模长:
|c| = |aXb|=|a||b|sinθ
向量的变换法则:
aXb=-bXa

两个向量叉乘的结果的模等于这两个向量和两个向量的平移向量围成的平行四边形的面积
|aXb|=|a||b|sinθ中|b|sinθ等于平行四边形的高,平行四边形的面积的底乘以高

三维向量的结果叉乘用行列式的形式表示是
在这里插入图片描述

在三维世界里面 两个向量叉乘结果向量的方向取决于这个三维世界处于左手坐标系还是右手坐标系,
都是四指并拢,从第一个叉乘向量a开始转动到第二个叉乘向量b,大拇指朝向是结果向量的方向
区别在于左手坐标系下使用的是左手,右手坐标系下使用的是右手

这个原理一个比较经典的应用就是判断一个物体在另一个物体的哪个方向范围
在这里插入图片描述
B物体的前方向量b,从B到A之间的连线方向ab,
现在是不知道ab向量与b向量的关系
在右手坐标系下
如果bXab的结果向量是屏幕朝外的
则可以推断出A点在B的左前方,
如果结果向量是屏幕朝内的
则可以推断出A点在B的右前方
左手坐标系下的结果则相反。

三维坐标系

三维坐标系分为左手和右手

左手坐标系
左手坐标系

在这里插入图片描述
右手坐标系

左右手坐标系的区别是z轴方向的区别,可以将右手坐标系的x轴和y轴正方向调节到和左手坐标系的x轴和y轴正方向一致,发现左手坐标系z轴的方向和右手坐标系的相反。
OpenGL是右手坐标系 DX是左手坐标系 在shader里面遇到问题时 需要想到坐标系的原始结构。

发布了84 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43149049/article/details/103151578