判斷點是否在三角形內(叉積)

2021-09-26 14:17:24 字數 1128 閱讀 6805

————————————————點是否在三角形內——————————

如果點p在三角形abc內,則三角形的面積可以分成pab、pbc、pac三個小的三角形,如果不在三角形內則無法讓這三個三角形

與大的三角形的面積相同。

1.海**式法

s = sqrt(p*(p-a)(p-b)(p-c))

注:p為三角形abc的周長的1/2,a, b, c, 分別為三角形的三條邊長,s為三角形的面積

兩點之間的距離公式為:|ab| = |=sqrt((x1-x2)(x1-x2)-(y1-y2)(y1-y2)),其中a(x1,y1),b(x2,y2).

2.集合項鍊法求解面積:

向量的集合意義就是得到的平行四邊形的面積,而平行四邊形的一半就是三角形的面積,通過這個原理可以知道求三角形面積的方法

s = (x2-x1)(y3-y2)-(x3-x2)(y2-y1),其中a(x1,y1),b(x2,y2),c(x3,y3).

class point(object):

def __init__(self, x, y):

self.x = x

self.y = y

def cross_product(p1, p2, p3): #求叉積

return (p2.x - p1.x) * (p3.y - p1.y) - (p3.x - p1.x) * (p2.y - p1.y)

def is_in_********(a, b, c, d): #判別是否在三角形內

if cross_product(a, b, d) >= 0 and cross_product(b, c, d) >= 0 and cross_product(a, c, d) >= 0:

return true

else:

return false

if __name__ == '__main__':

a = point(1, 3)

b = point(3, 5)

c = point(4, 5)

print(is_in_********(a, b, c, point(2, 2)))

print(is_in_********(a, b, c, point(3, 4.5)))

判斷點是否在三角形內

概述 給定三角形abc和一點p x,y,z 判斷點p是否在abc內。這是遊戲設計中乙個常見的問題。需要注意的是,這裡假定點和三角形位於同乙個平面內。本文介紹三種不同的方法,由淺入深 一 內角和法 連線點p和三角形的三個頂點得到三條線段pa,pb和pc,求出這三條線段與三角形各邊的夾角,如果所有夾角之...

判斷點是否在三角形內

給定三角形abc和一點p x,y,z 判斷點p是否在abc內。這是遊戲設計中乙個常見的問題。需要注意的是,這裡假定點和三角形位於同乙個平面內。本文介紹三種不同的方法,由淺入深 連線點p和三角形的三個頂點得到三條線段pa,pb和pc,求出這三條線段與三角形各邊的夾角,如果所有夾角之和為180度,那麼點...

判斷點是否在三角形內

問題 在二維座標系中,已知三角形頂點的座標,那麼對於座標系中的任意一點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 ...