//返回两点之间欧氏距离public double distance(PointF p1, PointF p2)
{
return Math.Sqrt( (p1.X - p2.X) * (p1.X - p2.X) + (p1.Y - p2.Y) * (p1.Y - p2.Y));
}
/******************************************************************************
r=multiplY(sp,ep,op),得到(sp-op)*(ep-op)的叉积r>0:ep在矢量opsp的逆时针方向;r=0:opspep三点共线;r<0:ep在矢量opsp的顺时针方向*******************************************************************************/
//叉积就是2向量形成的平行四边形的面积public double multiplY(PointF sp,PointF ep,PointF op)
{
return((sp.X-op.X)*(ep.Y-op.Y)-(ep.X-op.X)*(sp.Y-op.Y));
}
bool cmp(PointF[] points, PointF a, PointF b)
{
//如果三点在同一直线上,那么按相对于points[0]由近到远排序if (multiplY(points[0], a, b) == 0) return distance(points[0], a) < distance(points[0], b);
//如果三点不在同一直线上,那么a在b->points[0]的左侧,也就是从下向上,