Угол между двумя непересекающимися линиями - PullRequest
0 голосов
/ 26 сентября 2018

Предположим, есть две линии, l1, l2, и они могут быть пересекающимися или непересекающимися.Есть ли какой-нибудь элегантный способ найти угол между ними?Спасибо

import numpy as np
from shapely import LineString

l1 = [(0,0), (1,1)]
l2 = [(0.5, 1), (0.5, 2)]

ls1 = LineString(l1)
ls2 = LineString(l2)

angle = compute_angle(ls1, ls2)

# This is I want to avoid because I have very big dataset and performance will degrade
def compute_anlge(l1, l2):
   #Extend line1 and line2 in both direction util they intersect

   # Find intersection point

   # Create new lines with the intersection point

   # find angle and return

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Сначала найдите угол для каждого сегмента, переместив его в начало координат:

seg = np.array(l2)
seg = seg[1] - seg[0]

Затем используйте np.angle

 angle_l2 = np.angle(complex(*(seg), deg=True)

Затем вы можете просто вычислить разницумежду углами.

0 голосов
/ 26 сентября 2018

Используя наклоны двух линий, вы можете просто получить арктангенс, чтобы найти их соответствующие углы относительно начала координат.Затем получите положительную разницу двух углов.Все сделано!

import math
from math import pi as PI

l1 = [(0,0), (1,1)]
l2 = [(0.5, 1), (0.5, 2)]
m1 = (l1[1][1]-l1[0][1])/(l1[1][0]-l1[0][0])
m2 = (l2[1][1]-l2[0][1])/(l2[1][0]-l2[0][0])

angle_rad = abs(math.atan(m1) - math.atan(m2))
angle_deg = angle_rad*180/PI

Там есть значения радиан и градус.

...