python3射线法判断点是否在多边形内


Posted in Python onJune 28, 2019

本文实例为大家分享了python3射线法判断点是否在多边形内的具体代码,供大家参考,具体内容如下

#!/usr/bin/python3.4
# -*- coding:utf-8 -*-
 
 
def isPointinPolygon(point, rangelist): #[[0,0],[1,1],[0,1],[0,0]] [1,0.8]
  # 判断是否在外包矩形内,如果不在,直接返回false
  lnglist = []
  latlist = []
  for i in range(len(rangelist)-1):
    lnglist.append(rangelist[i][0])
    latlist.append(rangelist[i][1])
  print(lnglist, latlist)
  maxlng = max(lnglist)
  minlng = min(lnglist)
  maxlat = max(latlist)
  minlat = min(latlist)
  print(maxlng, minlng, maxlat, minlat)
  if (point[0] > maxlng or point[0] < minlng or
    point[1] > maxlat or point[1] < minlat):
    return False
  count = 0
  point1 = rangelist[0]
  for i in range(1, len(rangelist)):
    point2 = rangelist[i]
    # 点与多边形顶点重合
    if (point[0] == point1[0] and point[1] == point1[1]) or (point[0] == point2[0] and point[1] == point2[1]):
      print("在顶点上")
      return False
    # 判断线段两端点是否在射线两侧 不在肯定不相交 射线(-∞,lat)(lng,lat)
    if (point1[1] < point[1] and point2[1] >= point[1]) or (point1[1] >= point[1] and point2[1] < point[1]):
      # 求线段与射线交点 再和lat比较
      point12lng = point2[0] - (point2[1] - point[1]) * (point2[0] - point1[0])/(point2[1] - point1[1])
      print(point12lng)
      # 点在多边形边上
      if (point12lng == point[0]):
        print("点在多边形边上")
        return False
      if (point12lng < point[0]):
        count +=1
    point1 = point2
  print(count)
  if count%2 == 0:
    return False
  else:
    return True
 
 
if __name__ == '__main__':
  print(isPointinPolygon([0.8,0.8], [[0,0],[1,1],[0,1],[0,0]]))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 文件操作技巧(File operation) 实例代码分析
Aug 11 Python
Python中的Numeric包和Numarray包使用教程
Apr 13 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
Aug 28 Python
Python Process多进程实现过程
Oct 22 Python
Pytorch 多维数组运算过程的索引处理方式
Dec 27 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
May 03 Python
基于Python脚本实现邮件报警功能
May 20 Python
深入了解NumPy 高级索引
Jul 24 Python
python实现自动清理重复文件
Aug 24 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
Nov 13 Python
python3中编码获取网页的实例方法
Nov 16 Python
python标准库ElementTree处理xml
May 20 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 #Python
python如何实现代码检查
Jun 28 #Python
python射线法判断一个点在图形区域内外
Jun 28 #Python
Python OpenCV之图片缩放的实现(cv2.resize)
Jun 28 #Python
如何使用Python 打印各种三角形
Jun 28 #Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 #Python
python 列表转为字典的两个小方法(小结)
Jun 28 #Python
You might like
实用函数5
2007/11/08 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
php实现图片压缩处理
2020/09/09 PHP
js中onload与onunload的使用示例
2013/08/25 Javascript
jquery分割字符串的方法
2015/06/24 Javascript
javascript实现的简单计时器
2015/07/19 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
本地存储localStorage用法详解
2017/07/31 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
JS实现移动端在线签协议功能
2019/08/22 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
python 不关闭控制台的实现方法
2011/10/23 Python
python发送arp欺骗攻击代码分析
2014/01/16 Python
python re正则表达式模块(Regular Expression)
2014/07/16 Python
21行Python代码实现拼写检查器
2016/01/25 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
深入理解Python中range和xrange的区别
2017/11/26 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
Django框架实现的分页demo示例
2019/05/25 Python
python为QT程序添加图标的方法详解
2020/03/09 Python
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
自我鉴定注意事项
2014/01/19 职场文书
新教师个人工作总结
2015/02/06 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android