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

2021-09-26 06:20:42 字數 834 閱讀 3730

題目:在二維座標系中,所有的值都是double型,那麼乙個三角形可以由三個點來代表,給定三個點代表的三角形,再給定乙個點(x, y),判斷(x, y)是否在三角形中

基本思路:

如果乙個點o在三角形的內部,那麼從三角形的乙個點出發,逆時針走過所有邊的過程中,點o始終在走過邊的左邊。如果點o在外側,則不滿足這一條件。

如果要逆時針走過一遍三角形,那麼三個點的位置是重要的,假設輸入的三個點依次是a,b,c,如果b在邊ac的左邊,按照a -> b -> c的順序遍歷是順時針遍歷,如果b在邊ac的右邊,按照a -> b -> c的順序遍歷就是逆時針遍歷。如果出現前者情況,我們需要先調整一下三個點輸入的順序,接下來的重點就是判斷乙個點是在一條邊的左側還是右側。該問題可以使用幾何上的向量積(叉積)解決。

def crossproduct(x1,y1,x2,y2):

return x1*y2 - x2*y1

def isinside(x1,y1,x2,y2,x3,y3,x,y):

if crossproduct(x1-x2,y1-y2,x1-x3,y1-y3) >= 0:

x2,x3 = x3,x2

y2,y3 = y3,y2

if crossproduct(x2-x1,y2-y1,x-x1,y-y1)<0:

return false

if crossproduct(x3-x2,y3-y2,x-x2,y-y2)<0:

return false

if crossproduct(x1-x3,y1-y3,x-x3,y-y3)<0:

return false

return true

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

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

如何判斷乙個點在三角形內部

如圖,點p在三角形abc內部,可以通過以下三個條件判斷 點p和點c在直線ab同側 點p和點b在直線ac同側 點p和點a在直線bc同側 如果以上三個條件同時滿足,則點p在三角形abc內部。下面將會用到叉乘這個數學工具來確定乙個點在直線的哪一側。叉乘是乙個判斷點在直線哪一側的數學工具。先看一下叉乘的定義...

三角形有向面積 判斷點是否在三角形內部

公式 以三角形兩邊的平行四邊形面積等於兩邊向量叉乘 三角形三個頂點如果順時針那麼面積為負,逆時針為正 判斷點o是否在三角形abc內部當且僅當 sabc soab sobc soac include include include include includeusing namespace std ...