图形、游戏高手请进,输入N个点的坐标,由程序判断该N个点是否能构成一个凸多边形 输入N个点的坐标,由程序判断该N个点是否能构成一个凸多边形请高手说出算法,贴出代码也可以。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我的新算法:1:给所有点按X线轴排序: N1(x1,y1),N2(x2,y2),N3(x3,y3),... x1<x2<x3... 2:建立上部集合top,下部集合buttom 遍历所有点: if Ni.y 比top中的元素都高,加入top; 判断top中后3点的夹角是不是向下(<180度),是继续,否则返回false if Ni.y 比top中的元素都低,加入buttom; 判断top中后3点的夹角是不是向上(<180度),是继续,否则返回false3:剩下的点形成新集合right: 按y轴排序,依次判断夹角,都小于180度,则返回true,否则false 我用的是叉积,每相邻两条边做叉积,全部同号就为凸,但有时会判断错误// 向量ab,向量ac 叉积ab×acprivate int getDirection(Point2D a, Point2D b, Point2D c) { double x1 = b.getX() - a.getX(); double y1 = b.getY() - a.getY(); double x2 = c.getX() - a.getX(); double y2 = c.getY() - a.getY(); double v = x1*y2 - x2*y1; if(v > 0) return 1; // ab在ac顺时针方向 else if(v < 0) return -1; // ab在ac逆时针方向 else return 0; // 共线} 打包好的Jar文件双击为什么不会运行 使用过google calendar api的进来看下 输入1个日期 求该日期与输入年的1月1日之间的天数差 java 学习Java后可以向哪方面发展? 菜鸟也来找jive(2.6.4)学习,100求源代码,收到即结分 如何删除java plus-in 数据库插入问题,高手指教? 关于System.out.println 再问JTextPane有如下JTextArea有的类似的方法么? 大哥在帮帮忙吧!!! 一个字符串如:000♀11dsaf1♀2sdd22♀333♀444,有办法返回指定第二个♀的下标位置indexof好象没有方法? 多线程求助
1:给所有点按X线轴排序:
N1(x1,y1),N2(x2,y2),N3(x3,y3),...
x1<x2<x3...
2:建立上部集合top,下部集合buttom
遍历所有点:
if Ni.y 比top中的元素都高,加入top; 判断top中后3点的夹角是不是向下(<180度),是继续,否则返回false
if Ni.y 比top中的元素都低,加入buttom; 判断top中后3点的夹角是不是向上(<180度),是继续,否则返回false
3:剩下的点形成新集合right:
按y轴排序,依次判断夹角,都小于180度,则返回true,否则false
private int getDirection(Point2D a, Point2D b, Point2D c) {
double x1 = b.getX() - a.getX();
double y1 = b.getY() - a.getY();
double x2 = c.getX() - a.getX();
double y2 = c.getY() - a.getY();
double v = x1*y2 - x2*y1;
if(v > 0)
return 1; // ab在ac顺时针方向
else if(v < 0)
return -1; // ab在ac逆时针方向
else
return 0; // 共线
}