通过面积法,判断点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;
}
}
分享到:
相关推荐
判断点在四边形内,内有main函数,可直接测试
在做图像处理的时候,有时候要求判断某兴趣点是不是中某四边形之内,这个小程序提供了一个算法。输入是四边形的四个顶点a[4]和兴趣点fi;如果返回值是true表示fi在a[4],否则不在四边形之内。
该程序是简单的实现了判断某一个点在四边形中的位置,这个四边形可以是任意的四边形
常会遇到判断一个质点是不是在四边形之内的问题。这是一个小方法,供参考。
有时候图像中拍的海报,视频,文件等因为拍摄角度问题,结果在图像中显示为任意四边形。该程序提供了一种将这个任意四边形转换为矩形的方法
要把矩形图像切割成1--2个像素高,宽与矩形图像宽相等的图片,对于每一个图片进行拉伸变形后,绘制到目标的相应位置,全部完成后整个任意四边形图像就绘制出来了,为避免闪烁要在内存中绘制,再把内存中这个图像一次...
自定义view,使用Canvas制作一个可拖动改变任意形状的四边形,并填充颜色。。
判断点和多边形的位置,判断点和多边形的位置,判断点和多边形的位置
范例使用SuperMap iClient 6R for JavaScript开发模式,演示了利用SuperMap.Geometry.Polygon的intersects方法判断点是否在面内。
任意四边形的中点四边形教学设计.doc
判断点在多边形内 VB 计算机图形学作业 CG
利用高斯数值积分对任意四面性表面作积分得到积分值
C#判断指定的坐标点(经纬度)是否在指定多边形内坐标组范围内 !地图坐标点判断(经纬度判断)
思路是,计算坐标点到四条边的对角的角度,然后4个角度大于等于360度就是在矩形内。用到的知识点:计算两个坐标点之间的距离和计算三角形的对角角度。@屎加。
质点在四边形内的位置很难用立即值表达,于是产生了比例坐标的算法。横轴和竖轴都是0-1的实数。质点在四边形内用它就可以精确表示坐标。
判断点是否在多边形内 #include #include #include #define max(a,b) ((a>b)?a:b) #define min(a,b) ((a)?a:b) using namespace std; const double INFINITY = 1e10; const double ESP = 1e-5; const int MAX_N ...
思路是,计算坐标点到四条边的对角的角度,然后4个角度大于等于360度就是在矩形内。 用到的知识点:计算两个坐标点之间的距离和计算三角形的对角角度 虽然数学差,但这并不阻碍我百度到对应的公式。。。
在平行四边形中显示JPEG图像 在平行四边形中显示JPEG图像 在平行四边形中显示JPEG图像 在平行四边形中显示JPEG图像
LabVIEW视觉已知四边形4条边线坐标计算其中点坐标,根据四条边线上的8个点求对角线中点,labview2013(装了VDM)及以上版本可以打开。