驗證點是否在三角形內

2021-07-04 03:03:21 字數 946 閱讀 3828

1,原理:三角形有三個點p1,p2,p3。當p1,p2連成直線後,如果測試點和p3在直線的一側。這為true。用排列組合同時滿足p1,p2;p2,p3;p1,p2三條直線同側則必定在三角形內。事例**如下:

// test project main.go

package main

import (

"fmt"

)//座標

type victor struct

func main()

p2 := &victor

p3 := &victor

p := &victor

//is********判斷是否是三角形

if !is********(p1, p2, p3)

//判斷點是否在三角形的三條邊同側

if issamedirec(p1, p2, p3, p) && issamedirec(p1, p3, p2, p) && issamedirec(p3, p2, p1, p) else

}//判斷是否是三角形

//p1,p2,p3分別為三個頂點座標

func is********(p1 *victor, p2 *victor, p3 *victor) bool

//是否三點y座標相同

if p1.y == p2.y && p1.y == p3.y

return true

}//求第三點與另外兩點的夾角

//p1,p2 為三角形的兩頂點

//p為測試點

func issamedirec(p1 *victor, p2 *victor, p3 *victor, p *victor) bool else

} else else

if tag

} else

} return false

}}

求解點是否在三角形內

思路 三角形內任意一點與三角形三個頂點連線可構成最多三個三角形且和為總面積,因此若點在三角形內則符合要求,在求解的時候可以利用向量叉乘後的模的一半求解 class dot def init self,x,y self.x float x self.y float y def solve dot is...

判斷點是否在三角形內

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

判斷點是否在三角形內

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