zoukankan      html  css  js  c++  java
  • 点在多边形内的算法

    算法:过点向左作射线,射线与多边形相交的点的个数为奇数,则点在多边形内,否则点不在多边形内。(如下图)

    代码:

       public static boolean pointInPoly(Point p,Point[] pointArr){  //判断点是否在多边形内
    	double py=p.getY();
    	double px=p.getX();                                  //Point是自定义的class
    	int numOfCross=0;
    	for(int i=0;i<pointArr.length;i++)
    	{
    		System.out.println("new"+i+":"+pointArr[i].getX()+" "+pointArr[i].getY());
    	}
    	for(int i=0;i<pointArr.length;i++){
    		double p1y=pointArr[i].getY();
    		double p2y=pointArr[(i+1)%pointArr.length].getY();
    		double p1x=pointArr[i].getX();
    		double p2x=pointArr[(i+1)%pointArr.length].getX();
    		if(p1y==p2y) continue;
    		if(py<Math.min(p1y,p2y)) continue;
    		if(py>Math.max(p1y,p2y)) continue;
    		double x = (double)(py - p1y) * (double)(p2x - p1x) / (double)(p2y - p1y) + p1x;
    		if(x==px) return true;
    		if(x>px) numOfCross++;
    	}
    	if(numOfCross%2==1) return true;
    	else return false;
       }
    
       //点类
       public class Point {
    private double x;
    private double y;
    
    public Point() {
        }
        public Point(double x, double y) {
        this.x = x;
        this.y = y;
        }
        public double getX() {
    	return x;
    }
    public void setX(double x) {
    	this.x = x;
    }
    public double getY() {
    	return y;
    }
    public void setY(double y) {
    	this.y = y;
    }
    
    
     }
  • 相关阅读:
    基于selenium的web自动化框架
    spring boot整合Mybatis
    Spring boot进阶-配置Controller、interceptor...
    spring boot 第一个Demo
    Spring事务管理
    mybatis、Spring整合(eclipse)以及事务管理
    highcharts 根据表格转化为不同的图表
    highChartTable 切换
    highcharts 切换
    九度 1533 最长上升子序列
  • 原文地址:https://www.cnblogs.com/Smile-BCZ/p/6423573.html
Copyright © 2011-2022 走看看