判断一个点是否在三角形内

转自:https://www.cnblogs.com/simplekinght/p/9218310.html

面积法:若点P在三角形ABC内,则三角形ABP+三角形ACP+三角形BCP的面积等于三角形ABC

    已知三角形三点坐标ABC,如何求三角形面积呢?

    根据叉乘公式,向量A=(x1,y1) ,向量B=(x2,y2),A x B = x1*y2 - x2*y1

    此时求得的是向量A和向量B的形成的平行四边形的面积,除以2就是三角形的面积了

 1 #include <iostream>
 2 #include <cstring>
 3 #include <queue>
 4 #include <cmath>
 5 #include <cstdio>
 6 #include <algorithm>
 7 using namespace std;
 8 const double eps = 1e-8;
 9 struct point
10 {
11     double x,y;
12 };
13 double solve(point a,point b,point c)
14 {
15     point A;
16     A.x = b.x-a.x;
17     A.y = b.y-a.y;
18     B.x = c.x-a.x;
19     B.y = c.y-a.y;
20     return (A.x*B.y-B.x*A.y)/2.0;
21 }
22 
23 int main()
24 {
25     point A,B,C,P;
26     cin>>A.x>>A.y;
27     cin>>B.x>>B.y;
28     cin>>C.x>>C.y;
29     cin>>P.x>>P.y;
30     double sum = solve(A,B,C);
31     double k=0;
32     k + = solve(A,B,P);
33     k + = solve(B,C,P);
34     k + = solve(A,C,P);
35     if((k-sum)>eps) cout<<"在三角形外"<<endl;
36     else cout<<"在三角形内"<<endl;
37     return 0;
38 }
View Code

 补充一下:

a=(x1,y1)  b=(x2,y2)

点积:a*b==x1*x2+y1*y2==|a|*|b|*cos(向量夹角)

 

叉积:

在三维几何中,向量a和向量b的叉乘结果是一个向量,该向量垂直于a和b向量构成的平面。可以通过右手定则判定其方向

在二维空间中,叉乘还有另外一个几何意义就是:|aXb|等于由向量a和向量b构成的平行四边形的面积。

具体见------>传送门

 

另外还有三种方法见:https://www.cnblogs.com/graphics/archive/2010/08/05/1793393.html#!comments

posted @ 2019-07-19 08:18  kongbursi  阅读(1928)  评论(0编辑  收藏  举报