判断三维空间中的一个点是否在三角形内,边上的一种算法
2014-04-20 18:40
453 查看
网上判断点是否处于三角内内部,边上的方法有很多,但是比较简洁的方法,比如面积法,即判断三角形PAB,PAC,PBC之和与三角形ABC的面积。如果S(PAB+PAC+PBC)=S(ABC),则点位于三角形内部,或边上。但是上述方法由于涉及到平方和开根号,计算量比较大。
最近自己整理了一个计算量稍小的算法。具体如下:
令向量(B-A)=(X1,Y1,Z1);向量(C-A)=(X2,Y2,Z2);向量(P-A)=(X3,Y3,Z3);
假设点P位于三角形ABC所在的平面,则向量(P-A)可以用向量(B-A)和(C-A)表示,即(P-A)=m*(B-A)+n(C-A);只要求出m,n的值即可判断点与三角形的关系。如果没有解,那么p不在三角形所在平面,如果有解,那么: 若: 若: 若:
m>0 m=0; n=0; m>0;
n>0; n>0; m>0; n>0;
m+n<1 m+n<1; m+n<1; m+n=1;
则P在三角形内部。 P在AC边上 P在AB边上 P在BC边上
所以,问题的关键是要计算m,n的值,从而可以得到点和三角形的空间关系。
具体步骤如下:
由(P-A)=m*(B-A)+n(C-A)得到(X3,Y3,Z3)=m*(X1,Y1,Z1)+n*(X2,Y2,Z2),写成矩阵形式,得到:
X1 X2 m X3
Y1 Y2* = Y3
Z1 Z2 n Z3
X1X2 X3
令矩阵K为 Y1Y2 b为 Y3
Z1Z2 Z3
因为ABC为三角形,所以向量(B-A)=(X1,Y1,Z1);向量(C-A)=(X2,Y2,Z2)线性不相关,即矩阵K为列满秩矩阵,所以
m
=K的加号逆*b;
n
其中K的加号逆为
相关文章推荐
- Qt 判断一个点是否落在三角形内(算法)
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 一个运行时间为nlgn的算法,能判断在集合S中是否有两数之和为x
- 判断一个坐标点是否在不规则多边形内部的算法
- 定义一个函数,判断三个整形边长能否构成三角形,如果是三角形,则判断它是否是直角三角形。
- (floyd 1.1)hdu 1217 Arbitrage(使用floyd来求最长路——判断是否存在一种货币,经过一个兑换回路以后>=1单元)
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 判断一个数是否是循环数的算法
- 2.1: 判断一个正整数是否为质数的算法
- 判断一个正整数是否为质数的算法
- Algorithm: 如何判断一个点是否在一个三角形内
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一, 现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
- 算法 Tricks(六)—— 判断一个数是否为完全平方数
- 计算几何工具算法-判断点是否在三角形内
- 如何判断一个点是否在三角形里
- 如何判断一个点是否在一个多边形内部+三角形有向面积公式
- 12、一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。 请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。
- 判断一个数是否为质数/素数——从普通判断算法到高效判断算法思路
- 绘制一个三角形和判断一个点是否在这个三角形中
- 【算法】判断一个数是否含有相同的数字