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 21 Python
零基础写python爬虫之使用Scrapy框架编写爬虫
Nov 07 Python
Python中的字符串类型基本知识学习教程
Feb 04 Python
python3实现全角和半角字符转换的方法示例
Sep 21 Python
Python排序搜索基本算法之插入排序实例分析
Dec 11 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
Oct 09 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
Apr 30 Python
Python中的xlrd模块使用原理解析
May 21 Python
使用K.function()调试keras操作
Jun 17 Python
python 绘制正态曲线的示例
Sep 24 Python
如何基于Python按行合并两个txt
Nov 03 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 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
VFP与其他应用程序的集成
2006/10/09 PHP
模拟xcopy的函数
2006/10/09 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
PHP 超级全局变量相关总结
2020/06/30 PHP
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
javascript 小数取整简单实现方式
2014/05/30 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
2017/06/06 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
vue 使用自定义指令实现表单校验的方法
2018/08/28 Javascript
vue2路由基本用法实例分析
2020/03/06 Javascript
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
[44:09]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第二局
2016/02/25 DOTA
python读取csv文件示例(python操作csv)
2014/03/11 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
用xpath获取指定标签下的所有text的实例
2019/01/02 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
python程序 创建多线程过程详解
2019/09/23 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
Melijoe英国官网:法国儿童时尚网站
2016/11/18 全球购物
英国自行车商店:AW Cycles
2021/02/24 全球购物
中学生操行评语
2014/04/24 职场文书
大四毕业生自荐书
2014/07/05 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
市级三好学生评语
2014/12/29 职场文书
党员评议自我评价
2015/03/03 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL
教你如何让spark sql写mysql的时候支持update操作
2022/02/15 MySQL
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS