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 文件管理实例详解
Nov 10 Python
Python爬虫的两套解析方法和四种爬虫实现过程
Jul 20 Python
python3 flask实现文件上传功能
Mar 20 Python
Python使用logging模块实现打印log到指定文件的方法
Sep 05 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
Sep 13 Python
Python创建字典的八种方式
Feb 27 Python
python使用pymongo操作mongo的完整步骤
Apr 13 Python
在Tensorflow中查看权重的实现
Jan 24 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
Mar 30 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
Jun 15 Python
Python 多进程、多线程效率对比
Nov 19 Python
Python中的datetime包与time包包和模块详情
Feb 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文件上传(实例)
2013/10/27 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
thinkphp5修改view到根目录实例方法
2019/07/02 PHP
JavaScript入门学习书籍推荐
2008/06/12 Javascript
IE 条件注释详解总结(附实例代码)
2009/08/29 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
jQuery实现可关闭固定于底(顶)部的工具条菜单效果
2015/11/06 Javascript
原生JavaScript实现异步多文件上传
2015/12/02 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
2016/07/04 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
Nodejs之TCP服务端与客户端聊天程序详解
2017/07/07 NodeJs
JS库之Highlight.js的用法详解
2017/09/13 Javascript
自己动手封装一个React Native多级联动
2018/09/19 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
[46:57]EG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
python配置grpc环境
2019/01/01 Python
python内存动态分配过程详解
2019/07/15 Python
Python正则表达式学习小例子
2020/03/03 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
五年级学生评语大全
2014/12/26 职场文书
公司行政主管岗位职责
2015/04/09 职场文书
送达通知书
2015/04/25 职场文书
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python