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使用email模块对邮件进行编码和解码的实例教程
Jul 01 Python
Python对象类型及其运算方法(详解)
Jul 05 Python
python合并已经存在的sheet数据到新sheet的方法
Dec 11 Python
python用opencv批量截取图像指定区域的方法
Jan 24 Python
对python 中re.sub,replace(),strip()的区别详解
Jul 22 Python
Django rstful登陆认证并检查session是否过期代码实例
Aug 13 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
May 22 Python
python中取绝对值简单方法总结
Jul 24 Python
利用Python实现Json序列化库的方法步骤
Sep 09 Python
python入门教程之基本算术运算符
Nov 13 Python
Python实现简单的猜单词
Jun 15 Python
python中super()函数的理解与基本使用
Aug 30 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中使用临时表查询数据的一个例子
2013/02/03 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
兼容ie和firefox js关闭代码
2008/12/11 Javascript
js 弹出菜单/窗口效果
2011/10/30 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
微信小程序新增的拖动组件movable-view使用教程
2017/05/20 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
公众号SVG动画交互实战代码
2020/05/31 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
Python实现在线音乐播放器
2017/03/03 Python
100行python代码实现跳一跳辅助程序
2018/01/15 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
解决python运行效率不高的问题
2020/07/20 Python
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
Aeropostale官网:美国著名校园品牌及青少年服饰品牌
2019/03/21 全球购物
乡镇干部先进事迹材料
2014/02/03 职场文书
秋季运动会广播稿大全
2014/02/17 职场文书
农民工工资支付承诺函
2014/03/31 职场文书
采购意向书范本
2014/03/31 职场文书
大型活动组织方案
2014/05/10 职场文书
毕业生找工作求职信
2014/08/05 职场文书
党员学习正风肃纪思想汇报
2014/09/12 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
2015年秋季开学典礼校长致辞
2015/07/16 职场文书
redis cluster支持pipeline的实现思路
2021/06/23 Redis
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android
正则表达式拆分url实例代码
2022/02/24 Java/Android
HttpClient实现文件上传功能
2022/08/14 Java/Android