<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      在不完全重合的情況下,判斷線經(jīng)過另一線段的方法

      import logging
      
      logging.basicConfig(level=logging.INFO,
                          format='%(asctime)s-%(filename)s[line:%(lineno)d]-%(levelname)s:%(message)s',
                          datefmt='%Y-%m-%d %H:%M:%S')
      import numpy as np
      from shapely.geometry import LineString, Point
      from shapely.ops import substring
      
      
      def pnt2polar(p):
          # 平面點(diǎn)轉(zhuǎn)極坐標(biāo)
          x, y = p
          pi = np.pi
          alpha = np.arctan(abs(y / x)) if x != 0. else 0.
          if x > 0:
              if y > 0:
                  angle = alpha
              elif y == 0:
                  angle = 0
              else:
                  angle = pi * 2 - alpha
          elif x == 0:
              if y > 0:
                  angle = pi / 2
              elif y == 0:
                  angle = 0
              else:
                  angle = 3 * pi / 2
          else:
              if y > 0:
                  angle = pi - alpha
              elif y == 0:
                  angle = pi
              else:
                  angle = pi + alpha
      
          return round(angle, 3)
      
      
      def vline(line):
          # line shapely.geometry.LineString
      
          if line.length < 1e-6:
              res = None  # todo 處理空線的情況
          else:
              x0, y0 = line.coords[0]
              x1, y1 = line.coords[-1]
              vec = [x1-x0, y1-y0]
              res = pnt2polar(vec)
          return res
      
      
      def lineXroad(line=None, road=None, near=30, N=11):
          # 在不完全重合的情況下 判斷一段線是否是另一條線的一部分
          # line / road LineString
          # near 緩沖區(qū)半徑 default 30m
          # N 參考點(diǎn)的數(shù)量
      
          seg_pnts = [substring(road, _, _, normalized=1) for _ in np.linspace(0, 1, N)]  # 取點(diǎn)
      
          seg_line = [_.buffer(near).intersection(road) for _ in seg_pnts]  # 截局部
          seg_line = [_ if _.geom_type=='LineString' else _.geoms[0] for _ in seg_line]  # 截出多線取第一部分
      
          iline = [_.buffer(near).intersection(line) for _ in seg_pnts]  # 截取線路
          iline = [_ if _.geom_type=='LineString' else _.geoms[0] for _ in iline]
      
          rvec = [vline(_) for _ in seg_line]  # road方向 逐段的
          lvec = [vline(_) for _ in iline]  # line方向
          logging.warning(rvec)
          logging.warning(lvec)
      
          flag = [abs(m-n) if n is not None else -1 for m, n in zip(rvec, lvec)]
          res = sum([_ < 0.262 or _ > 6.02 if _ >= 0 else 0 for _ in flag])
          return res > N//2+1
      
      
      if __name__ == "__main__":
      
          line = [(0, 0), (3, 0), (3, 3), (6, 3), (6, 0), (9, 0)]
      
          road1 = [(-1, -0.1), (2, -0.1)]  # True 超過一半重合
          road2 = [(2.95, 0), (2.95, 3)]  # True  完全重合
          road3 = [(6, 3.05), (3, 3.05)]  # False  方向相反
          road4 = [(6, -0.1), (9, -0.1), (15, 0)]  # false  少部分重合
      
          roads = [LineString(_) for _ in [road1, road2, road3, road4]]
          line = LineString(line)
          for road in roads:
              res = lineXroad(line=line, road=road, near=0.3)
              logging.warning(res)

       

      posted @ 2023-08-11 14:23  ddzhen  閱讀(49)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 日本阿v片在线播放免费| 91中文字幕一区二区| 国产成人精品久久性色av| 精品无人码麻豆乱码1区2区| 亚洲无人区码一二三区别| 鞍山市| 九九热视频精品在线播放| 重口SM一区二区三区视频 | 国内精品免费久久久久电影院97 | 黑人强伦姧人妻久久| 91久久性奴调教国产免费| 国产成人a∨激情视频厨房| 韩产日产国产欧产| 国产蜜臀av在线一区在线| 欧美和黑人xxxx猛交视频| 日韩中文字幕av有码| 亚洲国产av剧一区二区三区| 噜噜噜亚洲色成人网站∨| 特级毛片a片久久久久久| 中文字幕在线看视频一区二区三区 | 少妇激情a∨一区二区三区| 九九热精品在线视频观看| 胸大美女又黄的网站| 蜜桃久久精品成人无码av| 日韩深夜福利视频在线观看 | 中文字幕人妻中出制服诱惑 | 亚洲一区二区约美女探花| h无码精品3d动漫在线观看| 99国产精品99久久久久久 | 亚洲香蕉av一区二区蜜桃| 男人狂桶女人高潮嗷嗷| 99精品国产综合久久久久五月天| 国产第一页浮力影院入口| 亚洲大尺度无码专区尤物| 图片| 亚洲av综合色区在线观看| 久久亚洲精品情侣| 成人3D动漫一区二区三区| 亚洲一区二区三区激情在线| 九九re线精品视频在线观看视频| av无码一区二区大桥久未|