內心裡的一把火(判斷平面內的點是否在三角形內)
【分析】
給定平面上一點p(x0,y0),判斷該點是否在三角形ABC中,三角形頂點座標分別為A(xa,xb),B(xb,yb),C(xc,yc)。可以使用面積法來判斷,方法如下:其中S(A,B,C)表示三角形ABC的面積。
1、 若abs( S(A,B,C) ) = abs( S(P,B,C) ) + abs( S(A,P,C) ) + abs( S(A,B,P) ) ,則P在三角形ABC的內部或邊上;如果還有abs( S(P,B,C) )、abs( S(A,P,C) ) 和abs( S(A,B,P) )全都大於0,則說明P在三角形ABC的內部,否則P在三角形ABC的邊上,具體為:S(P,B,C)為0,則說明P在BC邊上,S(A,P,C)為0,則說明P在AC邊上,S(A,B,P)為0,則說明P在AB邊上;
2、 若abs( S(A,B,C) ) < abs( S(P,B,C) ) + abs( S(A,P,C) ) + abs( S(A,B,P) ) ,則P在三角形ABC的外部;
3、 對abs( S(A,B,C) ) > abs( S(P,B,C) ) + abs( S(A,P,C) ) + abs( S(A,B,P) ) 情況在理論上是不存在的
#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <queue>
#include <sstream>
#include <stack>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
double x1,y1,x2,y2,x3,y3;//SABC==SABp+SApC+SpBC(AB與AC的向量叉乘相減)
while (~scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3))
{
double x,y;
scanf("%lf%lf",&x,&y);
double abx=x2-x1,aby=y2-y1;
double acx=x3-x1,acy=y3-y1;
double apx=x-x1,apy=y-y1;
double pbx=x2-x,pby=y2-y;
double pcx=x3-x,pcy=y3-y;
if(fabs(abx*apy-aby*apx)/2+fabs(apx*acy-apy*acx)/2+fabs(pbx*pcy-pby*pcx)/2==fabs(acx*aby-abx*acy)/2)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}
就是面積選取哪兩個向量得有規定
float GetTriangleSquar(const point_float pt0, const point_float pt1, const point_float pt2)
{
point_float AB, BC;
AB.x = pt1.x - pt0.x;
AB.y = pt1.y - pt0.y;
BC.x = pt2.x - pt1.x;
BC.y = pt2.y - pt1.y;
return fabs((AB.x * BC.y - AB.y * BC.x)) / 2.0f;
}
相關文章
- 判斷點是否在三角形內斷點
- canvas判斷點是否在路徑內Canvas斷點
- jquery裡判斷陣列內是否包含了指定的值或元素的方法jQuery陣列
- JS 射線法 判斷點是否在多邊形內部JS斷點
- java判斷集合是否包含某個範圍內的值Java
- 寫一個方法判斷陣列內元素是否全部相同陣列
- 判斷點是否在多邊形內的Python實現及小應用(射線法)斷點Python
- 微信小程式內判斷是否關注公眾號(JAVA)微信小程式Java
- day31-33 關於點選事件內的判斷語句事件
- Js之設定日期時間 判斷日期是否在範圍內JS
- java判斷實體內中屬性值內容是否有變更(包含父類屬性值)Java
- 如何判斷一個點在地圖上?如何判斷一個點在多邊形內?地圖
- PbootCMS判斷列表頁有無內容,無內容返回提示各種條件判斷和標籤boot
- (UE4 4.20)UE4 如何判斷一個點是否在導航網格(Navigation)內Navigation
- 如何判斷一個指定的位置點座標(GPS上的經緯度)是否落在一個多邊形區域內?
- 判斷資料庫中表內資料為空的辦法資料庫
- React table 表單裡的內容點選事件React事件
- PbootCMS內容頁判斷列表中的當前文章高亮各種條件判斷和標籤boot
- js判斷dom節點是否存在JS
- 易優CMS每隔N行輸出內容判斷
- 直播平臺軟體開發,判斷當前時間是否在規定時間內
- 行內元素的padding和margin是否有效padding
- 內聯的優缺點
- PHP 使用 version_compare () 函式判斷含符號數值是否在某一區間內PHP函式符號
- Gartner:60%的CIO將在三年內採用區塊鏈區塊鏈
- 如何判斷某經緯度是否在地圖不規則區域內(Objective-C 實現)地圖Object
- 空間或平面判斷兩線段相交(求交點)
- 帝國CMS內容頁模板簡介描述增加判斷功能
- scala_繼承、型別判斷、抽象類、匿名內部類繼承型別抽象
- 做什麼內容才能火
- golang中判斷兩個slice是否相等與判斷值下的 陣列是否相等Golang陣列
- Linux shell命令列檢視判斷檔案是內部內建自帶命令還是外部命令Linux命令列
- Rust進入Linux核心將在三週內發生 - hackadayRustLinux
- Python爬取內涵段子裡的段子Python
- 如何判斷sql中的索引是否生效SQL索引
- 判斷物件是否為空物件的方式物件
- postgresql判斷是否為數字的方法SQL
- 判斷Linux系統是否被黑的方法Linux