Ejemplo n.º 1
0
bool smaller_angle(const point<2>& first_point, const point<2>& p1, const point<2>& p2) 
{
	if (collinear(first_point, p1, p2))
		return (first_point.square_distance(p1) > first_point.square_distance(p2));

	return (!ccw(first_point, p1, p2));
}
Ejemplo n.º 2
0
void polygon::remove_points_with_same_angle(const point<2>& first_point) {
	// asumes points are in leftlower order.
	int oldn = _n;	// num of points before deletion
	int hole = 1;	// index marked for potential deletion
	for (int i = 2; i < oldn; i++) { 
		if ( collinear(first_point, vec_points[hole], vec_points[i]) ) {
			// leave the farthest point
			if (first_point.square_distance(vec_points[hole]) < first_point.square_distance(vec_points[i]))
				vec_points[hole] = vec_points[i];
			_n--;
		} else {
			hole++;
			if (hole != i)
				vec_points[hole] = vec_points[i];
		}
	}
}
Ejemplo n.º 3
0
	bool operator()(const point<2>& p1, const point<2>& p2) {
		if (collinear(_reference, p1, p2))
			return (_reference.square_distance(p1) > _reference.square_distance(p2));

		return (ccw(_reference, p1, p2));
	}