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 FTP操作类代码分享
May 13 Python
python的dataframe和matrix的互换方法
Apr 11 Python
Python中list查询及所需时间计算操作示例
Jun 21 Python
pandas将numpy数组写入到csv的实例
Jul 04 Python
详解Python连接MySQL数据库的多种方式
Apr 16 Python
python利用Opencv实现人脸识别功能
Apr 25 Python
python SQLAlchemy 中的Engine详解
Jul 04 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
Oct 17 Python
Python简易计算器制作方法代码详解
Oct 31 Python
python抓取多种类型的页面方法实例
Nov 20 Python
django有哪些好处和优点
Sep 01 Python
Python 实现一个简单的web服务器
Jan 03 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中ADODB类详解
2008/03/25 PHP
PHP提示Notice: Undefined variable的解决办法
2012/11/24 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
如何让CI框架支持service层
2014/10/29 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
JS三级可折叠菜单实现方法
2016/02/29 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
javascript实现倒计时提示框
2021/03/02 Javascript
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
python实现归并排序算法
2018/11/22 Python
打包python 加icon 去掉cmd黑窗口方法
2019/06/24 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
Python 项目转化为so文件实例
2019/12/23 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
Python学习之路安装pycharm的教程详解
2020/06/17 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
2020/08/19 Python
python实现经典排序算法的示例代码
2021/02/07 Python
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
中海讯通笔试题
2015/09/15 面试题
C# Debug和Testing相关面试题
2015/10/25 面试题
专科毕业生求职简历的自我评价
2013/10/12 职场文书
行政人事专员岗位职责
2014/03/05 职场文书
大学学风建设方案
2014/05/04 职场文书
2014年人事科工作总结
2014/11/19 职场文书
2015年税务稽查工作总结
2015/05/26 职场文书
红十字会救护培训简讯
2015/07/20 职场文书