代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C#
】
判断一个点是否在一个复杂多边形的内部
作者:
涌
/ 发布于
2017/9/11
/
795
判断一点是否在不规则图像的内部算法,如下图是由一个个点组成的不规则图像,判断某一点是否在不规则矩形内部
public class PositionAlgorithmHelper { /// <summary> /// 判断当前位置是否在不规则形状里面 /// </summary> /// <param name="nvert">不规则形状的定点数</param> /// <param name="vertx">当前x坐标</param> /// <param name="verty">当前y坐标</param> /// <param name="testx">不规则形状x坐标集合</param> /// <param name="testy">不规则形状y坐标集合</param> /// <returns></returns> public static bool PositionPnpoly(int nvert, List<double> vertx, List<double> verty, double testx, double testy) { int i, j, c = 0; for (i = 0, j = nvert - 1; i < nvert; j = i++) { if (((verty[i] > testy) != (verty[j] > testy)) && (testx < (vertx[j] - vertx[i]) * (testy - verty[i]) / (verty[j] - verty[i]) + vertx[i])) { c = 1 + c; ; } } if (c % 2 == 0) { return false; } else { return true; } } } 用上图坐标进行测试: class Program { static void Main(string[] args) { test1(); } /// <summary> /// test1 /// </summary> public static void test1() { //不规则图像坐标 List<Position> position = new List<Position>(); position.Add(new Position() { x = 6, y = 0 }); position.Add(new Position() { x = 10, y = 2 }); position.Add(new Position() { x = 16, y = 2 }); position.Add(new Position() { x = 20, y = 6 }); position.Add(new Position() { x = 14, y = 10 }); position.Add(new Position() { x = 16, y = 6 }); position.Add(new Position() { x = 12, y = 6 }); position.Add(new Position() { x = 14, y = 8 }); position.Add(new Position() { x = 10, y = 8 }); position.Add(new Position() { x = 8, y = 6 }); position.Add(new Position() { x = 12, y = 4 }); position.Add(new Position() { x = 6, y = 4 }); position.Add(new Position() { x = 8, y = 2 }); //用户当前位置坐标 List<Position> userPositions = new List<Position>(); userPositions.Add(new Position() { x = 14, y = 4 }); userPositions.Add(new Position() { x = 15, y = 4 }); userPositions.Add(new Position() { x = 10, y = 6 }); userPositions.Add(new Position() { x = 8, y = 5 }); //不规则图像x坐标集合 List<double> xList = position.Select(x => x.x).ToList(); //不规则图像y坐标集合 List<double> yList = position.Select(x => x.y).ToList(); foreach (var userPosition in userPositions) { bool result = PositionAlgorithmHelper.PositionPnpoly(position.Count, xList, yList, userPosition.x, userPosition.y); if (result) { Console.WriteLine(string.Format("{0},{1}【在】坐标内", userPosition.x, userPosition.y)); } else { Console.WriteLine(string.Format("{0},{1}【不在】坐标内", userPosition.x, userPosition.y)); } } } }
试试其它关键字
同语言下
.
C#实现的html内容截取
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
.
实现对图片上传的接收
.
去除字符串中的空格,回车,换行符转变成‘;’在按‘
.
按照回车换行符分割字符串
.
文件MD5码 比较,检测文件是否一样
可能有用的
.
C#实现的html内容截取
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
.
实现对图片上传的接收
.
去除字符串中的空格,回车,换行符转变成‘;’在按‘
.
按照回车换行符分割字符串
.
文件MD5码 比较,检测文件是否一样
涌
贡献的其它代码
(
10
)
.
iptables自动屏蔽访问网站频繁的IP
.
实现数组的反转
.
判断一个点是否在一个复杂多边形的内部
.
杀死某个任务 不在hive shell中执行
.
Java API 读取HDFS目录下的所有文件
.
判断一个字符串中是否包含另一个字符串数组或列表中的
.
获取汉字首字母
.
KeyWordHelper-关键字提取类
.
视频
.
查询所有表的外键约束
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3