給定三角形abc和一點p(x,y,z),判斷點p是否在abc內。這是遊戲設計中乙個常見的問題。需要注意的是,這裡假定點和三角形位於同乙個平面內。
本文介紹三種不同的方法,由淺入深
連線點p和三角形的三個頂點得到三條線段pa,pb和pc,求出這三條線段與三角形各邊的夾角,如果所有夾角之和為180度,那麼點p在三角形內,否則不在,此法直觀,但效率低下。
上面這個方法簡單易懂,速度也快,下面這個方法速度更快,只是稍微多了一點數學而已
三角形的三個點在同乙個平面上,如果選中其中乙個點,其他兩個點不過是相對該點的位移而已,比如選擇點a作為起點,那麼點b相當於在ab方向移動一段距離得到,而點c相當於在ac方向移動一段距離得到。
把向量ap用向量ab和向量ac表示為ap=vab+uac。
如果係數u或v為負值,那麼相當於朝相反的方向移動,即ba或ca方向。那麼如果想讓p位於三角形abc內部,u和v必須滿足什麼條件呢?有如下三個條件
u >= 0
v >= 0
幾個邊界情況,當u = 0且v = 0時,就是點a,當u = 0,v = 1時,就是點b,而當u = 1, v = 0時,就是點c。
設ap=[xp,yp] ab=[x1,y1] ac = [x2, y2]
則有關於u,v的二元一次方程組:
xp = u x1 + v x2
yp = u y1 + v y2
易解得u= (xpy2-x2yp)/(x1y2-x2y1) v=(x1yp-xpy1)/(x1y2-x2y1)
完整介紹和相應的**請參見原文。
如下圖所示,分別為點在三角形內和三角形外的情形:
當點在三角形內時,其與三角形三個頂點的連線線(圖中的虛線)將分別與頂點的對邊線段有且僅有乙個交點,而在三角形外的點則沒有這條性質!
相應的**請大家自己寫吧....
判斷點是否在三角形內
概述 給定三角形abc和一點p x,y,z 判斷點p是否在abc內。這是遊戲設計中乙個常見的問題。需要注意的是,這裡假定點和三角形位於同乙個平面內。本文介紹三種不同的方法,由淺入深 一 內角和法 連線點p和三角形的三個頂點得到三條線段pa,pb和pc,求出這三條線段與三角形各邊的夾角,如果所有夾角之...
判斷點是否在三角形內
問題 在二維座標系中,已知三角形頂點的座標,那麼對於座標系中的任意一點p,判斷是否在三角形內?double area point a,point b,point c bool is point a,point b,point c,point d 設s area abc s1 area abd s2 ...
判斷點是否在三角形內
1.面積法 如果三角形pab pac和pbc的面積之和與三角形abc的面積相等,則可判定點p在三角形abc內 包括在三條邊上 已知三角形頂點a b c 的座標分別為 ax,ay bx,by cx,cy 即可計算其面積 s ax by bx cy cx zy ay bx by cx cy ax 2 2...