示例#1
0
//! Individua gli eventuali angoli presenti nella curva da calcolare
void detectCorners(const std::vector<T3DPointD> &inputPoints,
				   int minSampleNum, int minDist, int maxDist, double maxAngle,
					 std::vector<int> &cornerIndexes)
{
	gMinSampleNum = minSampleNum;
	gMinDist = minDist;
	gMaxDist = maxDist;
	gSquaredMinDist = minDist * minDist;
	gSquaredMaxDist = maxDist * maxDist;
	gMaxAngle = maxAngle;

	interpolate(inputPoints);
	if ((int)gPoints.size() > 2 * gMaxDist) {
		findCornerCandidates();
		findCorners((int)sqrt((float)gSquaredMaxDist) + 10, cornerIndexes);
	}
	gPoints.clear();

	// check for no index equal to an adjacent
	std::vector<int>::iterator it1, it2;
	it1 = it2 = cornerIndexes.begin();
	++it2;

	while (it2 != cornerIndexes.end()) {
		if (*it1 == *it2) {
			it2 = cornerIndexes.erase(it2);
		} else {
			++it1;
			++it2;
		}
	}
}