给定三角形ABC和一点P(x,y,z),判断点P是否在ABC内,给出思路并手写代码
#include<iostream> #include<math.h> using namespace std; struct point//三角形点的坐标 { float x; float y; float z; }; float sum(point A,point B,point C ) {//计算面积 float AB = sqrt(pow(A.x - B.x, 2) + pow(A.y - B.y, 2) + pow(A.z - B.z, 2));//计算三角形三边长 float AC = sqrt(pow(A.x - C.x, 2) + pow(A.y - C.y, 2) + pow(A.z - C.z, 2)); float BC = sqrt(pow(B.x - C.x, 2) + pow(B.y - C.y, 2) + pow(B.z - C.z, 2)); float p = (AB + AC + BC) / 2;//海伦公式 float S = sqrt(p * (p - AB) * (p - AC) * (p - BC));//面积 return S; } int main() { float x,y,z; while(1){//测试 cin >> x >> y >> z; point P = {x,y,z}; point A = { 0, 0, 0 }, B = { 0, 6, 0 },C = { 7, 0, 0 };//设置一个简单的z值都为0的三角形,方便验证 if ((sum(P, A, B) + sum(P, A, C) + sum(P, B, C)-sum(A, B, C))<0.001) cout << "P在三角形ABC之内\n"; else cout << "P不在三角形ABC之内\n"; } }面积法,假设都是三维坐标。因为类型转换会有误差,所以只要面积之差小于某一个小值(比如0.001)即可认为相等.