如何判断一个点在任意四边形肉。
? 通过面积法,判断点P是否在四边形(A,B,C,D)内。
?? 如果在四边形内则,? 四边形的面积=面积(P,A,B)+面积(P,B,C)+面积(P,C,D)+面积(P,D,A)
?? 反之不在四边形内。
?????????????????????
public class Quadrangle {/** * 点是否在四边形内 * @param a * @param b * @param c * @param d * @param p * @return */public static boolean pInQuadrangle(Point a, Point b, Point c,Point d,Point p){Log.d("Walk Game","Quadrangle:"+ "new Point("+a.x+","+a.y+"),"+ "new Point("+b.x+","+b.y+"),"+ "new Point("+c.x+","+c.y+"),"+ "new Point("+d.x+","+d.y+"),"+ "new Point("+p.x+","+p.y+"),"); double dTriangle = triangleArea(a,b,p)+triangleArea(b,c,p)+triangleArea(c,d,p)+triangleArea(d,a,p);double dQuadrangle = triangleArea(a,b,c)+triangleArea(c,d,a);return dTriangle==dQuadrangle;}public static boolean pInQuadrangle(float[] px,float[] py,float x,float y){Point a = new Point((int)px[0],(int)py[0]); Point b = new Point((int)px[1],(int)py[1]); Point c = new Point((int)px[2],(int)py[2]); Point d = new Point((int)px[3],(int)py[3]); Point p = new Point((int)x,(int)y); Log.d("Walk Game","Quadrangle:"+ "new Point("+a.x+","+a.y+"),"+ "new Point("+b.x+","+b.y+"),"+ "new Point("+c.x+","+c.y+"),"+ "new Point("+d.x+","+d.y+"),"+ "new Point("+p.x+","+p.y+"),"); double dTriangle = triangleArea(a,b,p)+triangleArea(b,c,p)+triangleArea(c,d,p)+triangleArea(d,a,p);double dQuadrangle = triangleArea(a,b,c)+triangleArea(c,d,a);return dTriangle==dQuadrangle;}// 返回三个点组成三角形的面积private static double triangleArea(Point a, Point b, Point c) { double result = Math.abs((a.x * b.y + b.x * c.y + c.x * a.y - b.x * a.y - c.x * b.y - a.x * c.y) / 2.0D); return result; }}
?
1 楼 稻-草 2010-01-30 用射线发, JDK中有源码,在Polygon.contains类中,可以判断任意凸多边形 2 楼 ansili 2010-02-01 稻-草 写道用射线发, JDK中有源码,在Polygon.contains类中,可以判断任意凸多边形你是指PC平台的JDK吗?
如果是的话,之前我和你的想法一样,想把PC平台的Polygon移到android中.
那里面关系到很多类,我的技术太烂.粗略做了一下,没成功放弃了. 3 楼 稻-草 2010-02-01 Polygon.contains 这个方法是完全可移植的,
因为我就是把这个方法考过来,稍微改改,就可用了,但是没看懂。