題目描述:
給定乙個按順序連線的多邊形的頂點,判斷該多邊形是否為凸多邊形。(凸多邊形的定義)
注:頂點個數至少為 3 個且不超過 10,000。
座標範圍為 -10,000 到 10,000。
你可以假定給定的點形成的多邊形均為簡單多邊形(簡單多邊形的定義)。換句話說,保證每個頂點處恰好是兩條邊的匯合點,並且這些邊 互不相交 。
示例 1:
[[0,0],[0,1],[1,1],[1,0]]
輸出: true
示例 2:
[[0,0],[0,10],[10,10],[10,0],[5,5]]
輸出: false
方法1:
主要思路:
(1)使用相鄰兩邊組成的向量的叉積判斷,若給出的多邊形是凸多邊形,則沿著乙個方向進行叉積的計算時,各對相鄰邊的叉積的正負號應該是一致的,若是不一致,則不是凸多邊形;
class
solution
; pair<
int,
int> cur=;if
(pre.first*cur.second-pre.second*cur.first>0)
int index=1;
//判斷隨後的各對相鄰邊的叉積的正負性
while
(index
;int tmp=pre.first*cur.second-pre.second*cur.first;if(
(tmp>
0&&is_negative)
||(tmp<0&&
!is_negative)
)++index;
}//跳出迴圈,說明都一致,返回true
return
true;}
};
劃分凸多邊形
時間限制 800ms 記憶體限制 65535k 提交次數 0 通過次數 0 題型 程式設計題 語言 g gcc vc 問題描述 乙個正凸n邊形,可以用n 3條互不相交的對角線將正n邊形分成n 2個三角形。現在要求讀入n邊形的n n 20 輸出不同劃分方法的總數 要求解的是劃分方法數,而不需要輸出各種...
驗證多邊形是否為凸多邊形
驗證多邊形是否為凸多邊形 2108 shape of hdu include define debug 0 int crossmulti int x0,int y0,int x1,int y1,int x2,int y2 int main int n,i int f x,f y 第1個點 int s...
凸多邊形的劃分
給定乙個具有 n 個頂點的凸多邊形,將頂點從 1 至 n 標號,每個頂點的權值都是乙個正整數。將這個凸多邊形劃分成 n 2 個互不相交的三角形,對於每個三角形,其三個頂點的權值相乘都可得到乙個權值乘積,試求所有三角形的頂點權值乘積之和至少為多少。輸入格式 第一行包含整數 n,表示頂點數量。第二行包含...