多边形点集排序--针对凸多边形,按逆时针方向进行排序[转]

本文介绍了如何使用C#实现凸多边形点集的逆时针排序算法,通过计算重心和利用向量叉积判断点的位置关系,实现冒泡排序,以确保点集形成确定的逆时针多边形。
摘要由CSDN通过智能技术生成

多边形点集排序--针对凸多边形,按逆时针方向进行排序[转]

 

http://www.cnblogs.com/loveclumsybaby/p/3420795.html

原文是C++下的,原文地址:http://www.cnblogs.com/dwdxdy/p/3230156.html

稍微的改了为C#的,呵呵

主要方法:

1 public static void ClockwiseSortPoints(List<Point3D> vPoints)

2 {

3 //计算重心

4 Point3D center = new Point3D();

5 double X = 0, Y = 0;

6 for (int i = 0; i < vPoints.Count; i++) {

7 X += vPoints[i].X;

8 Y += vPoints[i].Y;

9 }

10 center.X = (int)X / vPoints.Count;

11 center.Y = (int)Y / vPoints.Count;

12

13 //冒泡排序

14 for (int i = 0; i < vPoints.Count - 1; i++) {

15 for (int j = 0; j < vPoints.Count - i - 1; j++) {

16 if (PointCmp(vPoints[j], vPoints[j + 1], center)) {

17 Point3D tmp = vPoints[j];

18 vPoints[j] = vPoints[j + 1];

19 vPoints[j + 1] = tmp;

20 }

21 }

22 }

23 }

辅助方法:

1 //若点a大于点b,即点a在点b顺时针方向,返回true,否则返回false

2 static bool PointCmp(Point3D a, Point3D b, Point3D center)

3 {

4 if (a.X >= 0 && b.X < 0

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值