判斷點是否在三角形內。是畫三角形的重要方法,尤其是做遊戲的程式設計師,這種演算法值得收納。
實驗環境:win10
實驗工具:codeblocks
判斷點a是否在三角形bcd內部。只要滿足↑ab×↑ac,↑ac×↑ad和↑ad×↑ab同號即可,相當於沿順時針或者逆時針繞三角形一圈時,點a始終出現在同一側。
點積:↑a·↑b=a1b1+a2b2+a3b3=|↑a|·|↑b|cosx,x為兩向量夾角。
叉積:↑a×↑b=(a2b3-a3b2)↑i+(a3b1-a1b3)↑j+(a1b2-a2b1)↑k=|↑a|·|↑b|sinx↑n,↑n為↑a×↑b方向。
內容取自《acm國際大學生程式設計競賽·知識與入門》p143
幾何向量積法求面積:我們知道向量積的幾何意義就是求得到的平行四邊形的面積,而平行四邊形的一半就是三角形的面積,通過這個原理就知道求三角形面積的方法。
注:在求面積的過程中,要注意精度問題。
以下面積法實驗測試用的第二種算面積的公式
實驗效果圖
實驗**
通過這個我們就知道如何判斷是否同側了。
實驗效果圖
實驗**
注:d*q要注意精度問題。視情況定,如果最大可能情況d*q>int_max,那麼會判錯
#include
#include
using
namespace
std;
bool isintri(int x1,int y1,int x2,int y2,int x3,int y3,int x,int y)
int main()else
printf(" ");
}printf("\n");
}return
0;}
三角形有向面積 判斷點是否在三角形內部
公式 以三角形兩邊的平行四邊形面積等於兩邊向量叉乘 三角形三個頂點如果順時針那麼面積為負,逆時針為正 判斷點o是否在三角形abc內部當且僅當 sabc soab sobc soac include include include include includeusing namespace std ...
判斷點是否在三角形內
概述 給定三角形abc和一點p x,y,z 判斷點p是否在abc內。這是遊戲設計中乙個常見的問題。需要注意的是,這裡假定點和三角形位於同乙個平面內。本文介紹三種不同的方法,由淺入深 一 內角和法 連線點p和三角形的三個頂點得到三條線段pa,pb和pc,求出這三條線段與三角形各邊的夾角,如果所有夾角之...
判斷點是否在三角形內
給定三角形abc和一點p x,y,z 判斷點p是否在abc內。這是遊戲設計中乙個常見的問題。需要注意的是,這裡假定點和三角形位於同乙個平面內。本文介紹三種不同的方法,由淺入深 連線點p和三角形的三個頂點得到三條線段pa,pb和pc,求出這三條線段與三角形各邊的夾角,如果所有夾角之和為180度,那麼點...