三维数学
基础知识
如何判断一个点在三角形(矩形、扇形)内
重心法
面积法
- 如图:S▲ABP + S▲APC + S▲BPC = S▲ABC
- 利用叉乘求出各三角形面积即可(叉积的绝对值就是A和B为两边所形成的平行四边形的面积)
叉乘法
- 首先看一下这个问题,如何判断某两个点在某条直线的同一侧
- 根据向量的叉乘以及右手螺旋定则,AB
x
AM 的方向为向外指出屏幕,ABx
AN 也是向外指出屏幕,但 ABx
AO 的方向是向内指向屏幕,因此 M、N 在直线 AB 的同侧,M、O在直线AB的另一侧。 - 实际计算时,只需要考虑叉积的数值正负。假设以上各点坐标为A(0,0), B(4,0), M(1,2), N(3,4), O(3,-4), 则:
- AB
x
AM = (4, 0)x
(1, 2) = 4 · 2 - 0 · 1 = 8 - AB
x
AN = (4, 0)x
(3, 4) = 4 · 4 – 0 · 3 = 16 - AB
x
AO = (4, 0)x
(3, -4) = 4 · -4 – 0 · 3 = –16
- AB
- 由上面的数值可知,可以根据数值的正负判断叉乘后向量的方向。
- 回到原来的问题上。
- 沿逆时针方向,三角形两两顶点构成三个向量,比如AB,BC,CA,分别用这三个向量与起点和P的交点构成的向量求叉乘,如ABxAP, BCxBP, CAxCP
- 由右手定则,如果三个结果都是正的,说明这个点都在向量的
左边
,可以推导得出这个点在三角形内。否则只要有一个是负数,就说明在右边
,在三角形外了。
如何判断一条射线是否与一个三角形相交
- 传统方法:
- 首先判断射线是否与三角形所在的平面相交,如果相交求出交点,进而判断交点是否在三角形内;
- 如果不相交或者交点不在三角形之内,则射线一定不与三角形相交。
平面方程
点法式
- 已知平面上某个点坐标(维数 ≥ 3)及该平面的法向量,则该平面方程为:
- A(x - x0) + B(y - y0) + C(z - z0) = 0
- 例如:某平面有一点为 u(1, 1, 2),及该平面的法向量 n = (-1, -2, 1)
- 设:x0 = 1,y0 = 1,z0 = 2
- 则有:-1(x - 1) + -2(y - 1) + 1(z - 2) = 0
- 化简后:-x - 2y + z + 1 = 0,即为平面方程
一般式
已知平面两点
- 求该平面的方程,平面方程为:
- Ax + By + Cz + D = 0
- 例如:某平面有两点分别为 u(1, 1, 2), v(-1, -2, -3),求该平面的方程
- 将两点视作两个向量, 两个向量做叉乘,求得垂直于两个向量所在平面的法向量
- 第一步:u
x
v,求法向量 - 第二步:将法向量代入A,B,C
已知平面三点
- 求该平面的方程,平面方程为:
- Ax + By + Cz + D = 0
- A = (y2 - y1) · (z3 - z1) - (z2 - z1) · (y3 - y1)
- B = (x3 - x1) · (z2 - z1) - (x2 - x1) · (z3 - z1)
- C = (x2 - x1) · (y3 - y1) - (x3 - x1) · (y2 - y1)
- D = -(A · x1 + B · y1 + C · z1)
- 例:某平面有三点分别为 u(1, 1, 2), v(-1, -2, -3), w(0, 1, -1),求该平面的方程
- 求解后得:A = 9, B = -1, C = -3, D = -2
- 平面方程为:9x - y - 3z - 2 = 0
- Moller-Trumbore 算法:
如何判断两个三角形是否相交
- 如果两个三角形相交,必定至少其中一个三角形的一条边穿过了另一个三角形的内部;
- 把边当作光线去跟另一个三角形求交。如果三条边只要有一条边跟三角形有交点,即可判断两三角形相交,当然关键是要判断计算出来的 t 是否合理,是否位于边长范围之内。
如何判断点是否在扇形里
如何判断一条射线是否与一个圆相交
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SleepyLoser's Blog!
评论