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使用PyGame播放Midi和Mp3文件的方法
Apr 24 Python
在Django中同时使用多个配置文件的方法
Jul 22 Python
简单掌握Python中glob模块查找文件路径的用法
Jul 05 Python
Python日志模块logging基本用法分析
Aug 23 Python
浅谈python3.6的tkinter运行问题
Feb 22 Python
在Python中表示一个对象的方法
Jun 25 Python
python向图片里添加文字
Nov 26 Python
python3用urllib抓取贴吧邮箱和QQ实例
Mar 10 Python
python小程序基于Jupyter实现天气查询的方法
Mar 27 Python
python简单的三元一次方程求解实例
Apr 02 Python
Python中flatten( ),matrix.A用法说明
Jul 05 Python
Python下使用Trackbar实现绘图板
Oct 27 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
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
JQuery实现的在新窗口打开链接的方法小结
2010/04/22 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
js类式继承的具体实现方法
2013/12/31 Javascript
JS来动态的修改url实现对url的增删查改
2014/09/05 Javascript
js中使用使用原型(prototype)定义方法的好处详解
2016/07/04 Javascript
Bootstrap中表单控件状态(验证状态)
2016/08/04 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
vue的事件绑定与方法详解
2017/08/16 Javascript
vue脚手架中配置Sass的方法
2018/01/04 Javascript
vue中改变选中当前项的显示隐藏或者状态的实现方法
2018/02/08 Javascript
layui select获取自定义属性方法
2018/08/15 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
[01:04:05]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python之用户输入的实例
2018/06/22 Python
python字符串格式化方式解析
2019/10/19 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
HTML5 canvas基本绘图之图形组合
2016/06/27 HTML / CSS
德国运动鞋网上商店:Afew Store
2018/01/05 全球购物
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
中专自我鉴定范文
2013/10/16 职场文书
医科大学生毕业的自我评价分享
2013/11/12 职场文书
电子商务个人自荐信
2013/12/12 职场文书
毕业证丢失证明
2014/01/15 职场文书
环保倡议书范文
2014/05/12 职场文书
初中学习计划书范文
2014/09/15 职场文书
募捐感谢信
2015/01/22 职场文书
幼师辞职信范文
2015/02/27 职场文书
校车司机安全责任书
2015/05/11 职场文书
活着观后感
2015/06/03 职场文书
《藏戏》教学反思
2016/02/23 职场文书
React Native项目框架搭建的一些心得体会
2021/05/28 Javascript
MySQL中连接查询和子查询的问题
2021/09/04 MySQL
利用Python实现模拟登录知乎
2022/05/25 Python
MySQL数据管理操作示例讲解
2022/12/24 MySQL