Python: как последовательно отразить множество точек n в двух линиях n - PullRequest
0 голосов
/ 16 октября 2019

Python: Как отразить несколько (если не много) n размерных точек в две строки, одну за другой, каждая из которых определяется двумя n размерными координатами.

Для нескольких n размерных точек

eg P1 = (4, 3, 2, 5, 7) P2 = (7, 3, 2, 2, 3),

и две n размерных точки для каждой из двух линий отражений,

eg L1P1 = (5, 6, 4, 3, 2) L1P2 = (7, 6, 9, 8, 1) L2P1 = (1, 3, 4, 9, 2) L2P2 = (5, 4, 3, 7, 6),

отражают точки, которые не определяют линии, в данном случае P1 и P2, в первой строкеа затем второе и возвращает координаты каждой дважды отраженной точки.

Я довольно новичок в этом виде математики, и не могу заставить работать что-то, что достигает этого. Я начал пытаться добиться n-мерного вращения, учитывая угол поворота для каждой оси, но быстро понял, что это слишком сложно для объема моего проекта. Я переключился на попытку поиска отражений, перебирая каждую точку и находя ее пересечение с линией отражения, чтобы я мог продлить воображаемую линию между пересечением и данной точкой через другую сторону линии, чтобы создать новую отраженную точку,Я предположил, что это не самый эффективный способ решения проблемы, и не мог найти много онлайн о нахождении координат пересечения, а не расстояния, вот почему я спрашиваю это - посмотреть, может ли кто-нибудь помочь предоставитьрешение «все в одном».

Я использую Python 3.7 и могу использовать любой пакет, хотя популярные предпочтительнее - эффективность, тем не менее, важна.

Любые советы приветствуются, спасибо!

1 Ответ

0 голосов
/ 17 октября 2019

Нам нужно вычислить точку S, имеющую точку P и линию AB

enter image description here

Сначала определить векторы

AP = P - A
AB = B - A

N - проекция P на линию AB, мы вычисляем ее, используя скалярное произведение векторов:

AN = AB * Dot(AP, AB) / Dot(AB, AB)

Разница

PN = AB * Dot(AP, AB) / Dot(AB, AB) - AP

Симметричная (отраженная) точка

S = P + 2 * PN  = 
    P + 2 * AB * Dot(AP, AB) / Dot(AB, AB) - 2 * AP

Пример в 2D, но этот подход работает и в n-мерном случае.

...