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 29 Python
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
Apr 25 Python
Python3中条件控制、循环与函数的简易教程
Nov 21 Python
python 重定向获取真实url的方法
May 11 Python
Python 判断文件或目录是否存在的实例代码
Jul 19 Python
pygame游戏之旅 添加游戏介绍
Nov 20 Python
利用setuptools打包python程序的方法步骤
Jan 18 Python
PyQt5 如何让界面和逻辑分离的方法
Mar 24 Python
通过实例解析Python文件操作实现步骤
Sep 21 Python
pandas将list数据拆分成行或列的实现
Dec 13 Python
Python 如何实现文件自动去重
Jun 02 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Apr 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
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
鸡肋的PHP单例模式应用详解
2013/06/03 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
2016/06/20 PHP
学习YUI.Ext第五日--做拖放Darg&amp;Drop
2007/03/10 Javascript
重写javascript中window.confirm的行为
2012/10/21 Javascript
Dom 学习总结以及实例的使用介绍
2013/04/24 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
Javascript中获取对象的原型对象的方法小结
2015/02/25 Javascript
js改变embed标签src值的方法
2015/04/10 Javascript
jquery点击展示与隐藏更多内容
2016/12/03 Javascript
解析利用javascript如何判断一个数为素数
2016/12/08 Javascript
js 作用域和变量详解
2017/02/16 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
2019/01/14 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
详解Python爬虫的基本写法
2016/01/08 Python
Python 中的 else详解
2016/04/23 Python
Django基于ORM操作数据库的方法详解
2018/03/27 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
Tretorn美国官网:瑞典外套和鞋类品牌,抵御风雨
2018/07/19 全球购物
匈牙利最大的健身制造商和销售商:inSPORTline
2018/10/30 全球购物
公司活动方案范文
2014/03/06 职场文书
2014年管理工作总结
2014/11/22 职场文书
文明单位申报材料
2014/12/23 职场文书
先进党组织事迹材料
2014/12/26 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
Go语言中break label与goto label的区别
2021/04/28 Golang
JS实现扫雷项目总结
2021/05/19 Javascript