![c77a3250090635fa5e42bd437ac50bfe.png](https://i-blog.csdnimg.cn/blog_migrate/f3ef665be74ee5e053515a994123c638.jpeg)
第一步,问题实例化 设三角形三个空间坐标点 A, B,C 。任意点p。判断点p是否在三角形ABC的面上。
方法一面积法:
需要数学基础,三角形两条向量计算三角形面积。 个向量a和b的叉积(向量积)可以被定义为:
![926eb4dff11dea88ef0ef9e4e25e43bd.png](https://i-blog.csdnimg.cn/blog_migrate/789dc03f2361adcbd5e8cf2dd46e0e79.png)
求三角形ABC的面积,根据向量积的意义,得到:
![5524e651ec8e2511cc5ca722814bd5bc.png](https://i-blog.csdnimg.cn/blog_migrate/cd31389ea748ae3e497ff5358f4905d0.png)
如果点p在三角形内,则原始的ABC三角形内分为,ABP,ACP,BCP,三个三角形。三个三角形面积相加等于ABC三角形的面积。
![9d0aadba65f94db383ad49db3f49737b.png](https://i-blog.csdnimg.cn/blog_migrate/aede043fd1b4fdc8759d34751b422919.jpeg)
bool
优点:简单,省去判断p点是否在ABC平面的判断。
先判断P点是否在三角形内
这个问题可以转化为四点是否共面问题。没有记错的话这是一道ACM原题.
数学基础:行列式计算。
思路:由四个点创建三个向量,构成一个行列式,若行列式值为0,共面。
3阶行列式的计算方法:
代码:
bool
确定p点在ABC的平面内后,判断在同一平面内,p点是否在三角形ABC内。
1.同向法:
数学基础:向量的叉积。
![4ec240fdb63070b5c647392f5a75c4ce.png](https://i-blog.csdnimg.cn/blog_migrate/606526a4429f626db50030c92508d6bb.jpeg)
如上图,AB向量和AQ向量叉积,AB向量和AP向量叉积。得到的两个向量共线且方向相反。Q点就是三角形外侧,p点就是三角形内侧。依次判断三角形的三条边。
bool
测试用例:
int