1.原理 S=S1+S2+S3 S=三角片面积 Si判断点与三角片其中一条边组成的三角形 2.代码 #include <iostream> #include <cmath> using namespace std; double CrossArea(double x1, double y1, double x2, double y2, double x3, double y3) { double ax=x2-x1,ay=y2-y1,bx=x2-x3,by=y2-y3; return fabs(ax*by-ay*bx)/2; } bool judgePtInTriangle(double x1, double y1, double x2, double y2, double x3, double y3, double ptx, double pty) { double S = CrossArea(x1, y1, x2, y2, x3, y3); double S1 = CrossArea(x2, y2, x3, y3, ptx, pty); double S2 = CrossArea(x1, y1, x3, y3, ptx, pty); double S3 = CrossArea(x1, y1, x2, y2, ptx, pty); return fabs(S-S1-S2-S3)<0.000001; } int main() { //149805.173649 printf("%f/n", CrossArea(392.273392, 66.604418, 1099.486314 ,1.744933, 559.373665 , 474.928843)); cout << "judge" << endl; cout << judgePtInTriangle(392.273392, 66.604418, 1099.486314 ,1.744933, 559.373665 , 474.928843, 733.733258, 185.967057) << endl; cout << judgePtInTriangle(392.273392, 66.604418, 1099.486314 ,1.744933, 559.373665 , 474.928843, 955.076363, 383.956810) << endl; return 0; }