判斷乙個點相對於三角形的位置(借助向量)

2021-10-07 22:45:43 字數 1157 閱讀 1529

如圖,點p在三角形abc內部,可以通過以下三個條件判斷:

點p和點c在直線ab同側

點p和點b在直線ac同側

點p和點a在直線bc同側

如果以上三個條件同時滿足,則點p在三角形abc內部。

下面將會用到叉乘這個數學工具來確定乙個點在直線的哪一側。

三角形的三個頂點是轉著來的,算一次就行了。比如,在上圖中,點c在直線ab左側,點b在直線ca的左側,點a在直接bc的左側。所以,第一步是先計算三角形的方向:

float signoftrig =

(b.x - a.x)

*(c.y - a.y)

-(b.y - a.y)

*(c.x - a.x)

;

注意這樣一下子寫出來不太容易看明白,但是如果看成向量ab和向量ac叉乘之後的z座標就好懂的多了。

再分別計算p在ab、ca、bc的哪一側:

float signofab =

(b.x - a.x)

*(p.y - a.y)

-(b.y - a.y)

*(p.x - a.x)

;float signofca =

(a.x - c.x)

*(p.y - c.y)

-(a.y - c.y)

*(p.x - c.x)

;float signofbc =

(c.x - b.x)

*(p.y - c.y)

-(c.y - b.y)

*(p.x - c.x)

;

最後判斷它們是否在同一側:

boolean d1 =

(signofab * signoftrig >0)

; boolean d2 =

(signofca * signoftrig >0)

; boolean d3 =

(signofbc * signoftrig >0)

;println

(d1 && d1 && d3)

;

判斷乙個點是否在三角形內部

題目 在二維座標系中,所有的值都是double型,那麼乙個三角形可以由三個點來代表,給定三個點代表的三角形,再給定乙個點 x,y 判斷 x,y 是否在三角形中 基本思路 如果乙個點o在三角形的內部,那麼從三角形的乙個點出發,逆時針走過所有邊的過程中,點o始終在走過邊的左邊。如果點o在外側,則不滿足這...

判斷乙個點是否在三角形內部

判斷乙個點是否在三角形內部 在二維座標系中,所有的值都是double型別,那麼乙個三角形可以由3個點來代表,給定3個點代表的三角形,再給定乙個點 x,y 判斷 x,y 是否在三角形中 輸入描述 輸入有四行,每行兩個浮點數。前三行的6個數分別代表三角形的三個頂點的座標 最後兩個數分別表示 x,y 輸出...

三角形的判斷

作 者 a07 完成日期 2014年 10 月 11日 版 本 號 v1.0 問題描述 輸入三角形的邊長,判斷三角形的性質。輸入描述 三個實數,代表邊長 程式輸出 三角形的形狀 double a,b,c 定義a,b,c,變數 console.title 判斷三角形形狀 console.writeli...