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 相关文章推荐
pyqt4教程之messagebox使用示例分享
Mar 07 Python
python实现根据用户输入从电影网站获取影片信息的方法
Apr 07 Python
python实现任意位置文件分割的实例
Dec 14 Python
Python matplotlib学习笔记之坐标轴范围
Jun 28 Python
Python使用tkinter模块实现推箱子游戏
Oct 08 Python
Python代码生成视频的缩略图的实例讲解
Dec 22 Python
如何基于python实现脚本加密
Dec 28 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
Jan 09 Python
python 中的命名空间,你真的了解吗?
Aug 19 Python
Python 操作SQLite数据库的示例
Oct 16 Python
python自动化之如何利用allure生成测试报告
May 02 Python
Python基础之函数嵌套知识总结
May 23 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
php中explode与split的区别介绍
2012/10/03 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
yii2实现 &quot;上一篇,下一篇&quot; 功能的代码实例
2017/02/04 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
javascript编程起步(第五课)
2007/01/10 Javascript
javascript将数组插入到另一个数组中的代码
2013/01/10 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
JavaScript中具名函数的多种调用方式总结
2014/11/08 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
VUE中使用MUI方法
2019/02/12 Javascript
vue抽出组件并传值实例
2020/07/31 Javascript
[06:14]《辉夜杯》外卡赛附加赛 4支战队巡礼
2015/10/23 DOTA
Python简单实现TCP包发送十六进制数据的方法
2016/04/16 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
python设置环境变量的原因和方法
2019/06/24 Python
python celery分布式任务队列的使用详解
2019/07/08 Python
python读取指定字节长度的文本方法
2019/08/27 Python
使用python创建Excel工作簿及工作表过程图解
2020/05/27 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
机械制造专业个人的自我评价
2013/12/28 职场文书
探亲假请假条
2014/04/11 职场文书
三问三解心得体会
2014/09/05 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
MySQL学习必备条件查询数据
2022/03/25 MySQL