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 lambda和Python def区别分析
Nov 30 Python
在Python中使用SimpleParse模块进行解析的教程
Apr 11 Python
Python使用struct处理二进制的实例详解
Sep 11 Python
python3实现SMTP发送邮件详细教程
Jun 19 Python
基于python绘制科赫雪花
Jun 22 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
200行python代码实现2048游戏
Jul 17 Python
TensorFlow2.0矩阵与向量的加减乘实例
Feb 07 Python
Python对称的二叉树多种思路实现方法
Feb 28 Python
Python多线程Threading、子线程与守护线程实例详解
Mar 24 Python
Python3操作YAML文件格式方法解析
Apr 10 Python
python之语音识别speech模块
Sep 09 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
3种平台下安装php4经验点滴
2006/10/09 PHP
php操作JSON格式数据的实现代码
2011/12/24 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
php制作动态随机验证码
2015/02/12 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
javascript动画算法实例分析
2015/07/31 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
关于jquery中动态增加select,事件无效的快速解决方法
2016/08/29 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
layer弹窗插件操作方法详解
2017/05/19 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
使用layui的layer组件做弹出层的例子
2019/09/27 Javascript
详解Python的Django框架中的模版继承
2015/07/16 Python
Python中格式化format()方法详解
2017/04/01 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
python实现大战外星人小游戏实例代码
2019/12/26 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
大学生护理专业自荐信
2013/10/03 职场文书
网吧最新创业计划书范文
2014/03/27 职场文书
大学生作弊检讨书
2014/09/11 职场文书
四查四看整改措施
2014/09/19 职场文书
党的群众路线调研报告
2014/11/03 职场文书
中学生思想品德评语
2014/12/31 职场文书
二年级作文之动物作文
2019/11/13 职场文书
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis