`
ansili
  • 浏览: 55138 次
  • 性别: 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类中,可以判断任意凸多边形

相关推荐

    判断点在四边形内,内有main函数,可直接测试

    判断点在四边形内,内有main函数,可直接测试

    判断质点在四边形之内

    在做图像处理的时候,有时候要求判断某兴趣点是不是中某四边形之内,这个小程序提供了一个算法。输入是四边形的四个顶点a[4]和兴趣点fi;如果返回值是true表示fi在a[4],否则不在四边形之内。

    处理点在四边形中的位置

    在计算机图形学中,判断一个点是否位于四边形内部是一项基本任务,有着广泛的应用,例如在游戏开发、图像处理和碰撞检测等领域。本程序旨在解决这个问题,它能处理任意形状的四边形,而不仅仅是规则的矩形或正方形。...

    图像处理:任意四边形转矩形

    在图像处理领域,"任意四边形转矩形"是一个常见的需求,特别是在处理倾斜拍摄的图像时。这种问题经常出现在拍摄海报、视频帧或者文件时,由于非正面拍摄角度导致对象在图像中呈现为非正交的四边形形状。为了解决这个...

    任意四边形上的积分

    每个子域被视为一个有限元,通过在局部空间中使用基函数来变换物理区域,进而简化了积分的计算。这种方法不仅适用于平面问题,也广泛应用于三维结构分析。 #### 方法实施步骤 1. **区域转换**:首先,将任意四边形...

    易语言计算坐标点是否在不规则四边形内

    在本问题中,我们探讨的是如何使用易语言来判断一个坐标点是否位于不规则四边形内。易语言是一种简单易学的中文编程语言,它提供了丰富的数学函数和几何算法支持,使得这样的计算变得可行。 首先,我们需要理解基本...

    vb 用GDI+如何绘制任意四边形图像详细介绍

    要把矩形图像切割成1--2个像素高,宽与矩形图像宽相等的图片,对于每一个图片进行拉伸变形后,绘制到目标的相应位置,全部完成后整个任意四边形图像就绘制出来了,为避免闪烁要在内存中绘制,再把内存中这个图像一次...

    VB判断点在多边形内

    在计算机图形学中,判断一个点是否位于多边形内部是一项常见的任务,尤其在VB(Visual Basic)编程环境中。这个任务通常涉及到二维几何计算和算法的实现。在VB中,我们可以利用数学方法来解决这个问题,这通常是通过...

    判断质点在凸四边形之内

    在计算机图形学、物理模拟和几何计算等领域,判断一个质点是否位于凸四边形内部是一个常见的问题。这里我们将深入探讨这个话题,并提供一种解决方法。 首先,我们要明确质点和四边形的概念。质点通常指的是没有体积...

    android,Canvas制作一个可拖动改变任意形状的四边形,并填充颜

    为了使四边形的形状可变,你可以提供一个接口让用户通过点击特定点来调整顶点位置,或者添加一个编辑模式,允许用户自由拖动顶点。同时,为了改变填充颜色,可以在自定义View中添加一个方法,允许外部设置颜色值,...

    计算坐标点是否在不规则四边形内-易语言

    在计算机图形学中,判断一个坐标点是否位于不规则四边形内部是一个常见的问题,尤其在游戏开发、图像处理和碰撞检测等领域。本教程将详细解释如何使用易语言实现这一功能,主要涉及的知识点包括计算两点间的距离以及...

    任意四边形的中点四边形教学设计.doc

    这篇教学设计聚焦于“任意四边形的中点四边形”的概念,旨在提升学生在数学领域的兴趣、独立思考能力和创新能力。教学过程中,教师将采用自主合作式教学方法,结合电脑和多媒体课件,让学生通过互动探讨和实践活动来...

    平行四边形的效果实现

    "平行四边形的效果实现"是一个常见的需求,特别是在设计创意布局或图形元素时。本篇将详细介绍如何利用ShapeDrawable、shape和canvas在Android中创建平行四边形。 首先,ShapeDrawable是Android SDK提供的一种可...

    在平行四边形中显示JPEG图像

    为了实现这一点,需要定义一个纹理坐标系,并根据平行四边形的顶点坐标来确定每个像素在新的几何形状上的位置。 3. 平行四边形的数学基础 平行四边形是由四个顶点定义的,每个顶点有(x, y)坐标。理解这些顶点如何...

    java 求四边形数据

    四边形是一个有四个边和四个角的平面图形,常见的四边形包括正方形、矩形、平行四边形和菱形等。这个Java课程实验可能是为了帮助学生理解和实现对四边形的各种属性,如面积、周长、对角线长度以及旋转和平移等操作的...

    C#判断地图坐标点是否在多边形内坐标组范围内

    C#判断指定的坐标点(经纬度)是否在指定多边形内坐标组范围内 !地图坐标点判断(经纬度判断)

    2020春八年级数学下册第十八章平行四边形18.1平行四边形18.1.2平行四边形的判定第1课时平行四边形的判定同步课件新版新人

    在初中数学的平行四边形章节中,学生们需要掌握多种判断一个四边形是否为平行四边形的方法。以下是这些知识点的详细说明: 1. **边或角的条件**: - **条件1**: 如果四边形中的两组对边分别平行(例如,AB∥CD且BC...

    基于opencv 的四边形轮廓跟踪

    在计算机视觉领域,OpenCV(开源计算机视觉库)是一个强大的工具,用于处理图像和视频数据。本项目聚焦于“基于OpenCV的四边形轮廓跟踪”,这是一个关键的技术,广泛应用于对象检测、图像分割、视频分析等多种场景。...

Global site tag (gtag.js) - Google Analytics