`
ansili
  • 浏览: 54246 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

如何判断一个点在任意四边形肉。

阅读更多

  通过面积法,判断点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;
    }
	
}

 

0
0
分享到:
评论
3 楼 稻-草 2010-02-01  
Polygon.contains 这个方法是完全可移植的,
因为我就是把这个方法考过来,稍微改改,就可用了,但是没看懂。
2 楼 ansili 2010-02-01  
稻-草 写道
用射线发,  JDK中有源码,在Polygon.contains类中,可以判断任意凸多边形

  你是指PC平台的JDK吗?
如果是的话,之前我和你的想法一样,想把PC平台的Polygon移到android中.
那里面关系到很多类,我的技术太烂.粗略做了一下,没成功放弃了.
1 楼 稻-草 2010-01-30  
用射线发,  JDK中有源码,在Polygon.contains类中,可以判断任意凸多边形

相关推荐

Global site tag (gtag.js) - Google Analytics