如圖,點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...