已知兩三角形頂點座標 如何計算重疊部分面積?

時間 2021-05-11 18:50:44

1樓:luikore

原理別的回答已經講了。但是不懂原理也沒關係…… 直接用 CGAL intersection 函式計算出多邊形的交集,然後遍歷交集的多邊形(這時只有1個)彙總面積即可。

參考 Intersection Functions

2樓:包清

根據頂點座標寫出兩個三角形6條邊的直線方程並分別計為線段1-6,利用6條線段兩兩相交求出交點並記錄交點屬於那兩條線段,中間的有6個交點的凸多邊形可以分割成由6個頂點組成的互不重疊的4個小三角形,其中每個頂點均使用2次,任意選取有兩個屬於同一條線段的值的交點,再選取另乙個屬於這兩個交點剩下的沒用到兩個線段值的交點,組成三角形,利用s=a*b*sinc/2求出面積,,再次使用面積公式求出面積,,最後剩下的3個沒有使用2次的頂點組成第四個三角形,這四個小三角形的和即為結果

3樓:Fletin

如果只是平面上兩個三角形的話,好像沒那麼複雜

找到所有交叉點,找到被另乙個三角形包含的頂點,圍起來的凸多邊形,就是重疊部分。

交叉點X有4個,E在△ABC裡,A B C D F都不在另乙個三角形內部,E和四個交叉點X組成的凸五邊形就是重疊部分

交叉點X有6個,A B C D E F六點都不在另乙個三角形內部,重疊部分就是六個交叉點組成的六邊形

沒有交叉點,D E F三個點都在另一三角形內部,則重疊部分就是△DEF

所以過程就是

1) 算交點X

2) 看ABC和DEF在不在對方內部,如果在,把它也帶上

王贇 Maigo:乙個線條自交叉的封閉圖形,怎樣判斷乙個點位於圖形內部還是外部?

3) 把這些點合併成乙個點集

4) 算他們形成的凸多邊形的面積

如果給出不規則凸多邊形所有頂點座標,是否能求出其面積?

4樓:懵哥

線段樹+掃瞄線,有長方形的例題,應該可以用在這裡,可能就是有點麻煩。

或者把整個圖形當做乙個大的多邊形,然後用向量叉積計算。

5樓:黃一多

說乙個思路,可以推廣到任意凸多邊形和高維度先準備乙個線性規劃的庫

兩個三角形連立

Ax<=b

Px<=q

就是待求區域D

將六條邊的方向向量按照與x軸正方向夾角排序,記v1到v6,這六個向量為逆時針順序。

分別將v1到6作為目標函式,求最大值,約束是區域D,得到順序排布的該多邊形頂點,進而計算面積

6樓:David KZ

如果我們要進行c++程式設計,首先我描述一下乙個凸多邊形的類如何定義。

乙個凸多邊形應當是乙個環形佇列,依次存放該凸多邊形的頂點座標,也就是自帶方向的,這樣我們就可以根據相鄰兩個頂點座標得到其間的線段方程,同時凸多邊形還應當包括乙個佇列的起始指標。

為了描述演算法方便起見,實際實現中應當是遍歷頂點座標,但這裡偶爾按照邊來描述。

構建函式,給出兩條線段的起止點座標,返回交點座標,若不相交則返回空,這個比較好實現,我就不說了。

構建函式,計算一條邊與乙個多邊形的交點,按照多邊形的遍歷起始點個遍歷順序依次遍歷,給出的交點也是按照順序給出的。

構建函式,判斷某一點在乙個多邊形內還是外,方法是遍歷多邊形的每條邊,看看該點和多邊形的其他任意某點(取乙個點即可)是否在該邊的同側。一旦發現對於某條邊在異側,那麼就返回false,否則預設為true。

然後我們要做的就是選取乙個凸多邊形的佇列開始遍歷。

遍歷前,我們需要給兩個多邊形佇列都定義乙個起始指標(由於是環形佇列,也是終止指標),然後從其中之一開始遍歷。

值得注意的是,我們一開始選擇的遍歷方向是任意的,但是兩個多邊形相交時,兩個多邊形的相交的邊出現順序是一定的,所以之後操作中涉及到同步兩個佇列遍歷方向的問題。

每遍歷一條邊,如果無交點,則遍歷當前佇列下一條邊,此時計算當前頂點是否在另乙個多邊形內,並記錄這個真值,存入乙個當前指標的狀態變數t,代表當前遍歷的這個頂點是否在另乙個多邊形內部,如果是,我們就不需要更換遍歷的佇列。特別的,如果t已經存在了,那就不需要重複計算了,因為沒有出現交點時,t值保持不變。如果t為真,那就把兩條邊間的頂點存入重疊多邊形類a。

如果有1個交點時,首先把交點存入a。

如果是第一次出現交點,把對應的另乙個多邊形佇列中的相交的邊設為起始指標(實際操作中可以把邊之前的點設為起始指標)。這時我們需要判斷當前佇列的下乙個頂點在另乙個多邊形內還是外(利用之前那個函式),如果t已經存在了,那只需要對t取非即可。

如果是第二次出現交點,那麼就把對應的另乙個多邊形的相交的邊設為那個佇列的「當前指標」。

如果是第三次出現交點,那麼除了設定「當前指標」之外,如果上乙個當前指標不在初始指標和現在的「當前指標」之間的話,就把環形佇列的遍歷順序反轉。

根據之前那個狀態變數,如果為真,則說明當前遍歷的這個點在另乙個多邊形內,那麼就繼續遍歷當前佇列,把兩條邊之間的點存入a,否則就更換遍歷的佇列,從另乙個多邊形的「當前指標」開始遍歷,並把當前多邊形的這條邊設為該佇列的「當前指標」。特別的,除了第一次時需要判斷內外的函式給乙個初值,其後每次出現一條邊上只有乙個交點時,直接把狀態值取非即可。

如果有2個交點,就需要分辨交點的順序。首先,如果當前邊剛剛經歷或一次更換佇列,也就是該邊上有已經確定的交點,則新交點順序一定是靠後的,也可以以此確定遍歷順序。如果包括這兩個交點在內當前只有2個交點,那麼順序先隨意確定,為方便起見可以直接確定為交點對應的邊在另乙個多邊形中預設的遍歷順序。

如果交點不少於3個,就可以用上面的方法,利用「初始指標」和兩個交點對應的「當前指標」在另乙個多邊形佇列中的相對位置來確定順序。而一旦交點個數不少於5個,也就是另乙個多邊形佇列的遍歷順序已經確定了,那就可以直接按照遍歷順序來確定兩個交點的順序。然後就把兩個交點依次存入a。

把後乙個交點在另乙個多邊形中的「當前指標」作為繼續遍歷的當前指標,也就是更換遍歷的佇列,在另乙個凸多邊形上繼續遍歷。對於沒有提到的狀態值t,一條邊上有兩個交點,對於凸多邊形而言,只有可能從「外」到「外」,所以是一定要更換佇列的。

這裡注意,由於我們把只有2個交點時的頂點的順序隨意確定,當我們更換遍歷佇列之後,在發現下乙個交點時,如果發現最初的遍歷順序反了,只要在那時把另外乙個佇列(也就是此時的當前佇列)的遍歷順序反轉即可。這是因為只有2個交點時一定是從「外」到「外」,所以當首次出現交點就是兩個交點時,a中尚未存入任何點。

凸多邊形相交時,每條邊上至多2個交點,不過在實際執行時,要考慮某條邊恰好經過某個頂點的情況,這時只要規定一下一條邊只包含一側的頂點即可。

當某個佇列遍歷到某個「初始指標」時,我們的遍歷也就結束了,也就是我們得到的存入a的點會和之前的相同。

以上就是得到重疊多邊形的演算法,我手打的,也沒編譯過,不過思想就是沿著兩個多邊形依次尋找重疊的多邊形的頂點。

凸多邊形的交依舊是凸多邊形,所以之後的問題就是凸多邊形面積計算問題,這個演算法比較好做,只需要按照順序依次遞迴切割三角形即可,一圈圈地切割或者從乙個點出發切割均可。

三角形邊邊角(SSA)證明兩等腰三角形全等?

李宗澤 分情況比較簡單,1 若是兩個腰對應相等,則底腳相等推出頂角相等,變為SAS 2 若一腰一底邊對應相等,不論是頂角還是乙個底腳相等也可以變為SAS 證畢。 題主想法是對的,結論值得商榷,推導過程有錯誤。已知等腰三角形的兩條邊的長度與任意乙個角的角度,可以得出這個三角形三條邊的長度與乙個角的角度...

三角形兩邊之差小於第三邊和三角形兩邊之和大於第三邊只滿足其中乙個條件就是三角形嗎?

wjjhk 三條線段如果滿足任意兩邊之和大於第三邊或者是任意兩邊之差小於第三邊,那麼這三條線段可以圍成乙個三角形 這兩個條件是同乙個意思的 a b c 移項得 a cb 即兩邊之和大於第三邊變成兩邊之差小於第三邊 這個判斷方法實際為任意兩邊之和大於第三邊或者任意兩邊之差小於第三邊,舉例說明 例一.三...

如何渲染兩個半透明的交叉的三角形?

喬貓 可以先渲染三角形A,寫入深度顏色資料 然後關閉深度快取的寫入,渲染三角形B兩遍,第一遍讓源深度比目標深度小的片元通過,片元顏色 源顏色 源alpha 目標顏色 1 源alpha 第二遍第一遍讓源深度比目標深度大的片元通過,片元顏色 源顏色 1 目標alpha 目標顏色 目標alpha 確實是個...