判斷已知點是否在已知三角行的外接圓內

 對於這個問題不難,可以直接找到三角形的外心,求已知點到外心的距離,再與半徑相比即可,但是這麼求的計算量顯得非常的大,尤其在大量用到此判斷的程序中。這個問題是我在實現分治法構造voronoi圖中,merge時需要判斷的一個小問題。我的想法是這樣的:

已知三角形的三點爲a,b,c。已知點爲p。這樣必有a,b,c中的一點與p點位於a,b,c中的其他兩點組成的直線的同側,找出一種即可,不妨設c,p位於直線ab的同側,然後計算角acb,apb。如果角apb等於角acb,則說明p在圓上,因爲相同弧所對的圓周角相等,類似的,如果小於,就說明在圓外,大於就在圓內,這個用初等幾何就能證明正確性。至於計算角度的方法,可以使用餘弦定理,直接計算角度的餘弦值來比較,因爲角度範圍在0-180,此處區間餘弦值是單調減的。這個計算機量相比較裸做就簡化了很多。對於計算角度還可以用向量的夾角來算,計算出向量:ca,cb,pa,pb通過*乘等運算,原理類似,而且計算量也未有降低,這裏就省略不提了

發佈了50 篇原創文章 · 獲贊 1 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章