не может стоять в стороне,
Итак, мы имеем линейную систему:
* х + B * у = C 1
* x + B * y = C
давайте делать это с правилом Крамера, поэтому решение может быть найдено в определителей:
х = D х/D
у = D у/D
, где D является основным определителем системы:
Б
Б
и Д х и D у можно найти из матриц,:
С Б
С Б
и
С
С
(уведомление, а С колонку, следовательно, Substitues на коэф. Столбцы х и у)
Так что теперь питон, для ясности для нас, чтобы не натворить давайте отображение между математикой и питоном.Мы будем использовать массив L
для хранения нашего coefs , B, C уравнений линии и intestead красивой x
, y
мы будем иметь [0]
, [1]
, но в любом случае. Таким образом, то, что я написал выше, будет иметь следующий вид дальше в коде:
для D
L1 [0] L1 [1]
L2 [0] L2 [1]
для D х
L1 [2] L1 [1]
L2 [2] L2 [1]
для Д у
L1 [0] L1 [2]
L2 [ 0] L2 [2]
Сейчас идут для кодирования:
- производит coefs A, B, C уравнения линию по двум точкам при условии,
intersection
- находит точку пересечения (если таковые имеются) из двух линий обеспечивается coefs.
from __future__ import division
def line(p1, p2):
A = (p1[1] - p2[1])
B = (p2[0] - p1[0])
C = (p1[0]*p2[1] - p2[0]*p1[1])
return A, B, -C
def intersection(L1, L2):
D = L1[0] * L2[1] - L1[1] * L2[0]
Dx = L1[2] * L2[1] - L1[1] * L2[2]
Dy = L1[0] * L2[2] - L1[2] * L2[0]
if D != 0:
x = Dx/D
y = Dy/D
return x,y
else:
return False
Пример использования:
L1 = line([0,1], [2,3])
L2 = line([2,3], [0,4])
R = intersection(L1, L2)
if R:
print "Intersection detected:", R
else:
print "No single intersection point detected"
Являются ли эти отрезки или линии? – user2357112
Эта проблема в основном сводится к «выполнению математики». Вы можете использовать алгебраическую манипуляцию, чтобы найти выражение для координат пересечения, а затем вставить это выражение в свою программу. Однако не забудьте проверить параллельные линии. – user2357112
Поиск stackoverflow перед тем, как задать вопрос: [ответ] [1] [1]: http://stackoverflow.com/questions/3252194/numpy-andlineline-intersections –