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计算程序开始到程序结束的运行时间和程序运行的CPU时间
Nov 28 Python
Python日志模块logging简介
Apr 13 Python
深入讲解Python中面向对象编程的相关知识
May 25 Python
Python排序搜索基本算法之归并排序实例分析
Dec 08 Python
Python中的支持向量机SVM的使用(附实例代码)
Jun 26 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
Jul 22 Python
Python实现自定义读写分离代码实例
Nov 16 Python
Python爬取阿拉丁统计信息过程图解
May 12 Python
python为什么要安装到c盘
Jul 20 Python
Python使用windows设置定时执行脚本
Nov 12 Python
解决pycharm不能自动保存在远程linux中的问题
Feb 06 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应用程序的七个习惯深入分析
2013/06/08 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
js 函数的副作用分析
2011/08/23 Javascript
利用JS来控制键盘的上下左右键(示例代码)
2013/12/14 Javascript
使用JavaScript开发IE浏览器本地插件实例
2015/02/18 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
Canvas 绘制粒子动画背景
2017/02/15 Javascript
Kotlin学习第一步 kotlin语法特性
2017/05/25 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
2018/08/08 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
小程序hover-class点击态效果实现
2019/02/26 Javascript
vue-cli3 引入 font-awesome的操作
2020/08/11 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
Python冲顶大会 快来答题!
2018/01/17 Python
在python里面运用多继承方法详解
2019/07/01 Python
python画图--输出指定像素点的颜色值方法
2019/07/03 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
2018/01/08 HTML / CSS
使用layui实现左侧菜单栏及动态操作tab项的方法
2020/11/10 HTML / CSS
企业项目策划书
2014/01/11 职场文书
祖国在我心中演讲稿500字
2014/05/04 职场文书
十八大宣传标语
2014/10/09 职场文书
红领巾广播站广播稿
2014/10/19 职场文书
个人先进材料范文
2014/12/30 职场文书
五年级上册复习计划
2015/01/19 职场文书
检讨书范文500字
2015/01/28 职场文书
2015年清明节网上祭英烈留言寄语
2015/03/04 职场文书
2016入党积极分子考察评语
2015/12/01 职场文书
如何使用PostgreSQL进行中文全文检索
2021/05/27 PostgreSQL
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL