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编写一个简单的俄罗斯方块游戏的教程
Apr 03 Python
好用的Python编辑器WingIDE的使用经验总结
Aug 31 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
pandas系列之DataFrame 行列数据筛选实例
Apr 12 Python
python多进程实现文件下载传输功能
Jul 28 Python
pandas dataframe的合并实现(append, merge, concat)
Jun 24 Python
python sklearn库实现简单逻辑回归的实例代码
Jul 01 Python
pygame实现打字游戏
Feb 19 Python
opencv3/C++实现视频读取、视频写入
Dec 11 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
Python中有几个关键字
Jun 04 Python
详解python 条件语句和while循环的实例代码
Dec 28 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中文本操作的类
2007/03/17 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
PDO::setAttribute讲解
2019/01/29 PHP
PHP+redis实现微博的推模型案例分析
2019/07/10 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
function foo的原型与prototype属性解惑
2010/11/19 Javascript
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
2020/04/20 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
Vue.js第二天学习笔记(vue-router)
2016/12/01 Javascript
完美实现js选项卡切换效果(一)
2017/03/08 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
常见的浏览器存储方式(cookie、localStorage、sessionStorage)
2019/05/07 Javascript
vue实现div单选多选功能
2020/07/16 Javascript
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
详解Python发送邮件实例
2016/01/10 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
Python中GIL的使用详解
2018/10/03 Python
利用python循环创建多个文件的方法
2018/10/25 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
python中pytest收集用例规则与运行指定用例详解
2019/06/27 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
中药专业大学生医药工作求职信
2013/10/25 职场文书
年度献血先进个人事迹材料
2014/02/14 职场文书
大学计划书范文800字
2014/08/14 职场文书
大学生学年个人总结
2015/02/15 职场文书