返回顶部
首页 > 资讯 > 精选 >C#中怎么判断点的位置
  • 886
分享到

C#中怎么判断点的位置

2023-06-17 23:06:22 886人浏览 薄情痞子
摘要

本篇文章为大家展示了C#中怎么判断点的位置,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C#判断点的位置方法一public int isLeft(Point 

本篇文章为大家展示了C#中怎么判断点的位置,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

C#判断点的位置方法一

public int isLeft(Point P0, Point P1,Point P2)          {              int abc= ((P1.X - P0.X) * (P2.Y - P0.Y) - (P2.X - P0.X) * (P1.Y - P0.Y));              return abc;                                                                    }           private bool PointInFences(Point pnt1, Point[] fencePnts)          {               int wn = 0,j=0; //wn 计数器 j第二个点指针              for (int i = 0; i <  fencePnts.Length; i++)              {//开始循环                       if (i == fencePnts.Length - 1)                           j = 0;//如果 循环到最后一点 第二个指针指向第一点                       else                          j = j + 1; //如果不是 ,则找下一点                    if (fencePnts[i].Y < = pnt1.Y) // 如果多边形的点 小于等于 选定点的 Y 坐标                  {                      if (fencePnts[j].Y > pnt1.Y) // 如果多边形的下一点 大于于 选定点的 Y 坐标                      {                          if (isLeft(fencePnts[i], fencePnts[j], pnt1) > 0)                          {                              wn++;                          }                      }                  }                  else                 {                      if (fencePnts[j].Y < = pnt1.Y)                      {                          if (isLeft(fencePnts[i], fencePnts[j], pnt1) <  0)                          {                              wn--;                          }                      }                  }              }              if (wn == 0)                  return false;              else                 return true;         }

C#判断点的位置方法二——c#内置函数:

GraphicsPath myGraphicsPath = new GraphicsPath();   Region myRegion=new Region();                myGraphicsPath.Reset();  Point inputponint = new Point(inputx, inputy);   myGraphicsPath.AddPolyGon(points);//points);   myRegion.MakeEmpty();   myRegion.UNIOn(myGraphicsPath);     //返回判断点是否在多边形里  bool myPoint= myRegion.IsVisible(inputponint);  this.lblx.Text = myPoint.ToString();

图形算法

1,面积法。就是看所有边和目标点组成的三角形面积和是否等于总的多边形面积,如果相等,则在内部。反之在外部。这种方法计算量较大,用到的主要计算是查乘。

2,夹角和法。参见三楼,判断所有边和目标点的夹角和是否为360度。计算量比上面这种方法稍微小点,用到主要是点乘和求模计算。

3,引射线法。就是从该点出发引一条射线,看这条射线和所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。这是所有方法中计算量最小的方法,在光线追踪算法中有大量的应用。

在C#中的话,有一个Region类,可以直接调用IsVisible判断是否在这个区域内部,我估计内部的实现应该是上面说的第三种方法。主要看你的需求是哪种输入了,如果在C#中,你完全可以用Region类来隐藏内部实现。

C#判断点的位置的另外一种解决方法:

已知点point(x,y)和多边形Polygon(x1,y1;x2,y2;….xn,yn;);

以point为起点,以无穷远为终点作平行于X轴的直线line(x,y; -∞,y);

循环取得(for(i=0;i< n;i++))多边形的每一条边side(xi,yi;xi+1,yi+1),且判断是否平行于X轴,如果平行continue,否则,i++;

 同时判断point(x,y)是否在side上,如果是,则返回1(点在多边形

上),否则继续下面的判断;

判断线side与line是否有交点,如果有则count++,否则,i++。

判断交点的总数,如果为奇数则返回0(点在多边形内),偶数则返回2(点在多边形外)。

代码:

  const double INFINITY = 1e10;   const double ESP = 1e-5;   const int MAX_N = 1000;    struct Point {   double x, y;   };   struct LineSegment {   Point pt1, pt2;   };   typedef vector< Point> Polygon;    // 计算叉乘 |P0P1| × |P0P2|   double Multiply(Point p1, Point p2, Point p0)   {   return ( (p1.x - p0.x) * (p2.y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y) );   }   // 判断线段是否包含点point   bool IsOnline(Point point, LineSegment line)   {   return( ( fabs(Multiply(line.pt1, line.pt2, point)) <  ESP ) &&   ( ( point.x - line.pt1.x ) * ( point.x - line.pt2.x ) < = 0 ) &&   ( ( point.y - line.pt1.y ) * ( point.y - line.pt2.y ) < = 0 ) );   }   // 判断线段相交   bool Intersect(LineSegment L1, LineSegment L2)   {   return( (max(L1.pt1.x, L1.pt2.x) >= min(L2.pt1.x, L2.pt2.x)) &&   (max(L2.pt1.x, L2.pt2.x) >= min(L1.pt1.x, L1.pt2.x)) &&   (max(L1.pt1.y, L1.pt2.y) >= min(L2.pt1.y, L2.pt2.y)) &&   (max(L2.pt1.y, L2.pt2.y) >= min(L1.pt1.y, L1.pt2.y)) &&   (Multiply(L2.pt1, L1.pt2, L1.pt1) * Multiply(L1.pt2, L2.pt2, L1.pt1) >= 0) &&   (Multiply(L1.pt1, L2.pt2, L2.pt1) * Multiply(L2.pt2, L1.pt2, L2.pt1) >= 0)   );   }   // 判断点在多边形内   bool InPolygon(const Polygon& polygon, Point point)   {   int n = polygon.size();   int count = 0;   LineSegment line;   line.pt1 = point;   line.pt2.y = point.y;   line.pt2.x = - INFINITY;    for( int i = 0; i <  n; i++ ) {   // 得到多边形的一条边   LineSegment side;   side.pt1 = polygon[i];   side.pt2 = polygon[(i + 1) % n];    if( IsOnline(point, side) ) {   return1 ;   }    // 如果side平行x轴则不作考虑   if( fabs(side.pt1.y - side.pt2.y) <  ESP ) {   continue;   }    if( IsOnline(side.pt1, line) ) {   if( side.pt1.y > side.pt2.y ) count++;   } else if( IsOnline(side.pt2, line) ) {   if( side.pt2.y > side.pt1.y ) count++;   } else if( Intersect(line, side) ) {   count++;   }   }    if ( count % 2 == 1 ) {return 0;}   else { return 2;}   }   }

上述内容就是C#中怎么判断点的位置,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: C#中怎么判断点的位置

本文链接: https://lsjlt.com/news/294292.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#中怎么判断点的位置
    本篇文章为大家展示了C#中怎么判断点的位置,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C#判断点的位置方法一public int isLeft(Point ...
    99+
    2023-06-17
  • c#怎么设置断点
    在 c# 中设置断点有四种方法:选择要暂停程序的行,使用快捷键(f9、ctrl + f9、shift + f9),通过菜单项,或在“调试”窗口中设置。设置断点后,可以在调试器中运行代码,...
    99+
    2024-05-12
    c#
  • C#中怎么判断字符串
    C#中怎么判断字符串,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C#判断字符串应用之判断空字符串,首先明确””,null和string.Empty的区别:string.E...
    99+
    2023-06-17
  • C#中怎么判断数据类型
    C#中怎么判断数据类型,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。通过这段代码,可以实现C#判断数据类型using System;  usi...
    99+
    2023-06-18
  • c语言中怎么判断闰年
    在C语言中,可以使用以下方法判断闰年:1. 若该年份能被4整除但不能被100整除,则为闰年;2. 若该年份能被400整除,则为闰年;...
    99+
    2023-09-11
    c语言
  • C语言中怎么判断质数
    这篇文章主要介绍了C语言中怎么判断质数的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中怎么判断质数文章都会有所收获,下面我们一起来看看吧。C语言判断质数写判断质数的程序时,需特别注意边界条件:开始边界条件...
    99+
    2023-07-05
  • sql注入点怎么判断
    sql 注入点判断方法:寻找未经验证的输入点(表单字段、查询字符串、cookie)检查输入是否按照预期类型验证输入包含 sql 特征(单引号、双引号、注释符)进行测试查看错误消息中是否有...
    99+
    2024-05-30
  • php怎么判断有几位小数
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php判断一个数有几位小数的方法方法1:借助strrpos()、substr()、strlen()函数<php function getLen($num...
    99+
    2019-01-16
    php 小数
  • C#判断DLL文件是32位还是64位的示例代码怎么写
    C#判断DLL文件是32位还是64位的示例代码怎么写,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。c#判断dll文件是32位还是64位,实例代码如下所示:using ...
    99+
    2023-06-22
  • C#中怎么判断浏览器功能
    今天就跟大家聊聊有关C#中怎么判断浏览器功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C#判断浏览器功能的分析和解决:我们首先用 JavaScript 建立一个Cookie,然后...
    99+
    2023-06-17
  • C#中怎么判断浏览器应用
    这篇文章给大家介绍C#中怎么判断浏览器应用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#判断浏览器是否接受Cookies的方法是什么呢?一种确定浏览器是否接受 Cookie 的方法是先编写一个 Cookie,然后再...
    99+
    2023-06-17
  • php怎么判断字符串是几位
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php怎么判断字符串是几位判断字符串是几位,也就是判断字符串有几个字符,即获取字符串长度。php中提供了两个内置函数来获取字符串长度。strlen() :获取英文字符串...
    99+
    2014-07-25
    php 字符串
  • C++怎么判断四个点是否构成正方形
    这篇文章将为大家详细讲解有关C++怎么判断四个点是否构成正方形,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。判断方法分为两步:判断四条边是否相等;判断是否有一个角为直角;求解两点之前距离的函数:doubl...
    99+
    2023-06-14
  • php怎么判断数组的值是个位数
    PHP怎么判断数组的值是个位数在使用PHP进行数组操作时,经常会遇到需要对数组中的值进行判断的情况。其中,判断数组的值是否是个位数就是一种常见的需求,本文将详细介绍如何使用PHP来实现这一功能。一、什么是个位数?在数学中,个位数指的是由0~...
    99+
    2023-05-19
  • C语言怎么使用位运算符来判断正负数
    这篇文章主要介绍“C语言怎么使用位运算符来判断正负数”,在日常操作中,相信很多人在C语言怎么使用位运算符来判断正负数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么使用位运算符来判断正负数”的疑惑有所...
    99+
    2023-06-17
  • Shell脚本中怎么判断Linux系统是32位还是64位
    Shell脚本中怎么判断Linux系统是32位还是64位,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一行就能搞定,输出32或者64。可以用“getconf W...
    99+
    2023-06-09
  • C#中怎么利用 CheckBox判断是否选中
    C#中怎么利用 CheckBox判断是否选中,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C# CheckBox选中的判断方法实现方法:右击菜单后弹出一窗体,新窗体上有一个Da...
    99+
    2023-06-17
  • 怎么用opencv判断多种颜色小球的形状及位置
    这篇文章主要介绍了怎么用opencv判断多种颜色小球的形状及位置的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用opencv判断多种颜色小球的形状及位置文章都会有所收获,下面我们一起来看看吧。一、openc...
    99+
    2023-07-04
  • C语言怎么判断闰年
    本文小编为大家详细介绍“C语言怎么判断闰年”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言怎么判断闰年”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。直接条件判断闰年:#include <st...
    99+
    2023-06-17
  • C语言怎么判断字母
    本文小编为大家详细介绍“C语言怎么判断字母”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言怎么判断字母”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。用户输入一个字符,判断该字符是否为一个字母。实例#incl...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作