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代码(逐级优化)
May 25 Python
python sort、sorted高级排序技巧
Nov 21 Python
Python利用Beautiful Soup模块创建对象详解
Mar 27 Python
python 如何快速找出两个电子表中数据的差异
May 26 Python
pycharm运行和调试不显示结果的解决方法
Nov 30 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
May 13 Python
python函数参数(必须参数、可变参数、关键字参数)
Aug 16 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
python实现logistic分类算法代码
Feb 28 Python
sklearn的predict_proba使用说明
Jun 28 Python
Opencv 图片的OCR识别的实战示例
Mar 02 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 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/04/10 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
php中异常处理方法小结
2015/01/09 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
php查找字符串中第一个非0的位置截取
2017/02/27 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
js活用事件触发对象动作
2008/08/10 Javascript
js+xml生成级联下拉框代码
2012/07/24 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
js跑步算法的实现代码
2013/12/04 Javascript
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
windows 下安装nodejs 环境变量设置
2017/02/02 NodeJs
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
javascript trie前缀树的示例
2018/01/29 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
vue实现计算器功能
2020/02/22 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
[01:06:54]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第一场 1月24日
2021/03/11 DOTA
Python数据操作方法封装类实例
2017/06/23 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
详解python中的数据类型和控制流
2019/08/08 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
将自己的数据集制作成TFRecord格式教程
2020/02/17 Python
Django自带的用户验证系统实现
2020/12/18 Python
Strawberrynet草莓网新加坡站:护肤、彩妆、香水及美发产品
2018/08/31 全球购物
营业经理岗位职责
2013/11/10 职场文书
淘宝客服自我总结鉴定
2014/01/25 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
高一语文教学反思
2016/02/16 职场文书
Java实现给Word文件添加文字水印
2022/02/15 Java/Android
什么是clearfix (一文搞清楚css清除浮动clearfix)
2023/05/21 HTML / CSS