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 相关文章推荐
Django视图之ORM数据库查询操作API的实例
Oct 27 Python
Python程序员面试题 你必须提前准备!(答案及解析)
Jan 23 Python
详解python读取image
Apr 03 Python
Python Threading 线程/互斥锁/死锁/GIL锁
Jul 21 Python
python常用数据重复项处理方法
Nov 22 Python
opencv之为图像添加边界的方法示例
Dec 26 Python
tensorflow如何继续训练之前保存的模型实例
Jan 21 Python
解决pycharm中导入自己写的.py函数出错问题
Feb 12 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
Apr 23 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
Python unittest discover批量执行代码实例
Sep 08 Python
python实现人工蜂群算法
Sep 18 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表单提交问题的解决方法
2011/04/12 PHP
php多次include后导致全局变量global失效的解决方法
2015/02/28 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
javascript的函数
2007/01/31 Javascript
Jquery iframe内部出滚动条
2010/02/11 Javascript
js 上传图片预览问题
2010/12/06 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
Vuex 入门教程
2018/01/10 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
用Python进行一些简单的自然语言处理的教程
2015/03/31 Python
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
解决Linux系统中python matplotlib画图的中文显示问题
2017/06/15 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
2018/09/27 Python
pytorch梯度剪裁方式
2020/02/04 Python
python logging.basicConfig不生效的原因及解决
2020/02/20 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
怎么处理XML的中文问题
2015/03/26 面试题
描述内存分配方式以及它们的区别
2016/10/15 面试题
客服文员岗位职责
2013/11/29 职场文书
汽车广告策划方案
2014/05/31 职场文书
实验室标语
2014/06/21 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
公司离职证明标准样本
2014/10/05 职场文书
2014年职称评定工作总结
2014/11/26 职场文书
六一儿童节开幕词
2015/01/29 职场文书
大学团日活动总结书
2015/05/11 职场文书
初中地理教学反思
2016/02/19 职场文书
吉利入股戴姆勒后smart“长大了”
2022/04/21 数码科技