zoukankan      html  css  js  c++  java
  • C# 点在多边形内

  • //这个算法是参考计算机图形学书上的算法得来的,可以说十分简单高效。   (C++)
  • //calc point in ploygon or not    
  • bool PIP(CPoint p,const CPoint data[],int n){   
  •     bool flag=0;   
  •     for(int i=0;i<n;i++){   
  •         if(p.y<data[i].y&&p.y<data[(i+1)%n].y)   
  •             continue;   
  •         if(data[i].x<=p.x&&data[(i+1)%n].x<=p.x)   
  •             continue;   
  •         int dx=data[(i+1)%n].x-data[i].x;   
  •         int dy=data[(i+1)%n].y-data[i].y;   
  •         float t=float(p.x-data[i].x)/dx;//求得交点的t值   
  •          float y=t*dy+data[i].y;   
  •         if(y<=p.y&&t>=0&&t<=1)   
  •         flag=!flag;   
  •     }   
  •     return flag;   
  • }  
  • ----------------------------------------------------------------

    c# 测试代码

    namespace _062001
    {
        class Program
        {
            static void Main(string[] args)
            {
                Point[] data = new Point[4];
                data[0] = new Point(0, 0);
                data[1] = new Point(0, 5);
                data[2] = new Point(5, 5);
                data[3] = new Point(5, 0);

                Point p = new Point(3, 3);
                if (PIP(p,data,4))
                {
                    Console.WriteLine("在区域内");
                }else{
                    Console.WriteLine("不在区域内");
                }
            }

            static bool PIP(Point p,Point[] data,int n)
            {
                bool flag =false;
                for (int i=0;i<n;i++)
                {
                    if (p.Y <data[i].Y && p.Y<data[(i+1)%n].Y)
                          continue;
                    if (data[i].X <p.X && data[(i+1)%n].X <p.X)
                          continue;
                    float dx = data[(i+1)%n].X - data[i].X;
                    float dy = data[(i+1)%n].Y - data[i].Y;
                    float t= (float)((p.X - data[i].X)/dx);
                    float y = t*dx + data[i].Y;
                    if (y<p.Y && t>=0 && t<=1)
                          flag =!flag;
                }
                return flag;
            }
        }
        class Point
        {
            private float x;

            public float X
            {
                get { return x; }
                set { x = value; }
            }
            private float y;
            public float Y
            {
                get { return y; }
                set { y = value; }
            }

            public Point(float p_x,float p_y)
            {
                x = p_x;
                y = p_y;
            }

        }
       
    }

查看全文
  • 相关阅读:
    Java Output流写入包装问题
    SpringBoot项目单元测试不经过过滤器问题
    SpringSecurity集成启动报 In the composition of all global method configuration, no annotation support was actually activated 异常
    JWT jti和kid属性的说明
    Maven 排除依赖
    第五章 基因概念的发现
    第三章 孟德尔遗传的拓展
    第二章 孟德尔遗传
    第一章 引言
    GWAS全基因组关联分析
  • 原文地址:https://www.cnblogs.com/xianzuoqiaoqi/p/1507424.html
  • Copyright © 2011-2022 走看看