1. 程式人生 > 其它 >判斷點集的順序-鞋帶公式

判斷點集的順序-鞋帶公式

技術標籤:幾何

今天在計算頂點法向量的時候法線,不論怎麼計算總有黑色的面存在,後面才發現是與頂點的順序有關,查找了一些資料後發現利用鞋帶公式計算多邊形的面積可以很方便的判斷點集的順序。

具體的鞋帶公式可以檢視維基百科上的介紹:https://en.wikipedia.org/wiki/Shoelace_formula

該公式為

A是多邊形的面數,去掉絕對值,得到A數值大於0,則點集順序為逆時針;反之小於0,點集為順時針。

程式碼:

double getSort()
{
	ptsOriginal->push_back((*ptsOriginal)[0]);
	double area = 0.0;
	for (size_t i=0;i<ptsOriginal->size()-1;i++)
	{
		area +=0.5*((*ptsOriginal)[i].x()*(*ptsOriginal)[i + 1].y() - (*ptsOriginal)[i + 1].x()*(*ptsOriginal)[i].y());

	}
	//cout << "" << area << endl;
	return area;
}