判斷一個點是否在三角形內


轉自: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM