點是否在 三角形,凸多邊形, 凹多邊形,四面體內 的判斷


今天下午偶然瞄了一眼編程之美, 看到了一個問題,  4.4 點是否在多邊形內.  為什么關注這個問題呢? 因為在今年給中科院保送研究生機試出題的時候,我也出了一道這樣的題目.

看了編程之美的解答之后, 感覺作者沒有把這個問題講清楚, 所以來寫這樣一個東西.

 

<編程之美>的兩種解答方案都很直觀, 一種是 秦九韶海倫公式來做面積判斷, 一種是 常用的判斷點是否在三角形內.

為什么說 <編程之美> 沒有講清楚問題呢? 因為實質上這兩種方法是統一的.

 

對於三角形的情況, 我們使用有向面積來判斷,假設三角形三個點為(x1,y1),(x2,y2), (x3,y3), 需要判斷的點為(x,y). 根據向量代數的公式, 已知3點坐標, 判斷三角形有向面積為

10{ZLL4]1XD6D}@T@4(O]`O

有向面積的正負與行列式的排列順序有關(交換行列式的任意兩行, 行列式的正負發生變化)

簡單的可以展開為 A0 = (x1y2 – x1y3 – x2y1 + x3y1 + x2y3 - x3y2)/2. 這個判斷式子與 叉乘的判斷的公式是一模一樣的. 可以看出通過有向面積可以統一 <編程之美>中的兩種方法, 面積與叉乘的方法在數學本質上是一致的.

 

在編程之美之后凹多邊形的判斷, 這個是圖形學里面的一個經典問題, 從點(x,y)發出水平的射線, 判斷與凹多邊形的交點個數的奇偶性, 注意處理通過頂點的特殊情況.

 

如何判斷一個點在四面體的內部呢? 使用有向體積的概念. 假設四面體的四個頂點的坐標為 (x1,y1,z1), (x2,y2,z2), (x3,y3,z3), (x4,y4,z4).  需要判斷的點為(x,y,z). 那么原來四面體的有向體積 為

 

%N{O6ZI578HVJEK[7`RTW1G

 

同理剩下的4個有向體積分別為

1W~G_0CG1@PBI5)ZT0OMK5L

X5[WZ3H}CM[A3QU`ELLD5UT

 

判斷准則很簡單, V0與V1V2V3V4都同向的時候, 則點位於四面體內, 否則位於四面體外.  當Vi = 0 的時候, 則此四面體退化了.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM