Python: как последовательно отразить множество n-мерных точек в двух n-мерных линиях

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 и могу использовать любой пакет, хотя популярные предпочтительнее, хотя эффективность важнее всего.

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


person pereowosso    schedule 16.10.2019    source источник


Ответы (1)


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

введите здесь описание изображения

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

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-мерном случае.

person MBo    schedule 17.10.2019