思路:
三角形內任意一點與三角形三個頂點連線可構成最多三個三角形且和為總面積,因此若點在三角形內則符合要求,在求解的時候可以利用向量叉乘後的模的一半求解;
class dot:
def __init__(self,x,y):
self.x=float(x)
self.y=float(y)
def solve_dot_is_in_********(dot_q,********):
if dot_q is none or ******** is none or len(********)<3 :
return
p1=********[0]
x1=p1.x
y1=p1.y
p2=********[1]
x2=p2.x
y2=p2.y
p3=********[2]
x3=p3.x
y3=p3.y
x=dot_q.x
y=dot_q.y
s0=0.5*abs((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1)) # 使用向量積求解三角形面積
s1=0.5*abs((x1-x)*(y2-y)-(y1-y)*(x2-x))
s2=0.5*abs((x1-x)*(y3-y)-(y1-y)*(x3-x))
s3=0.5*abs((x2-x)*(y3-y)-(y2-y)*(x3-x))
sum=s1+s2+s3
print('sum=',sum)
print('s0=',s0)
if sum<=s0:
print('在三角形內')
else:
print('不再三角形內')
#測試if __name__ == "__main__":
p0=dot(1,2)
p1=dot(0,0)
p2=dot(2,2)
p3=dot(4,0)
******** = [p1,p2,p3]
solve_dot_is_in_********(p0,********)
驗證點是否在三角形內
1,原理 三角形有三個點p1,p2,p3。當p1,p2連成直線後,如果測試點和p3在直線的一側。這為true。用排列組合同時滿足p1,p2 p2,p3 p1,p2三條直線同側則必定在三角形內。事例 如下 test project main.go package main import fmt 座標 ...
判斷點是否在三角形內
概述 給定三角形abc和一點p x,y,z 判斷點p是否在abc內。這是遊戲設計中乙個常見的問題。需要注意的是,這裡假定點和三角形位於同乙個平面內。本文介紹三種不同的方法,由淺入深 一 內角和法 連線點p和三角形的三個頂點得到三條線段pa,pb和pc,求出這三條線段與三角形各邊的夾角,如果所有夾角之...
判斷點是否在三角形內
給定三角形abc和一點p x,y,z 判斷點p是否在abc內。這是遊戲設計中乙個常見的問題。需要注意的是,這裡假定點和三角形位於同乙個平面內。本文介紹三種不同的方法,由淺入深 連線點p和三角形的三個頂點得到三條線段pa,pb和pc,求出這三條線段與三角形各邊的夾角,如果所有夾角之和為180度,那麼點...