Как я узнаю, что два вектора близки друг к другу? - PullRequest
6 голосов
/ 27 сентября 2011

У меня возникли проблемы с поиском параллельных векторов из-за точности с плавающей запятой. Как я могу определить, параллельны ли векторы с некоторым допуском?

Мне также нужен чек на ортогональность с допуском.

Ответы [ 3 ]

8 голосов
/ 27 сентября 2011

Для векторов v1 и v2 проверьте, ортогональны ли они по

abs(scalar_product(v1,v2)/(length(v1)*length(v2))) < epsilon

, где epsilon достаточно мало.Аналогично вы можете использовать

scalar_product(v1,v2)/(length(v1)*length(v2)) > 1 - epsilon

для теста на параллельность и

scalar_product(v1,v2)/(length(v1)*length(v2)) < -1 + epsilon

для антипараллельности.

2 голосов
/ 27 сентября 2011

Если у вас есть трехмерные векторы, ответ прост.Вычислите перекрестное произведение, и если оно близко к нулю, ваши векторы почти параллельны: http://mathworld.wolfram.com/ParallelVectors.html

Для 2d векторов вы можете преобразовать их в трехмерные векторы, просто добавив координату с нулем (1; 2) =>(1; 2; 0), (4; 5.6) => (4; 5.6; 0) и т. Д.

Два вектора ортогональны или перпендикулярны, если произведение точек равно нулю: http://mathworld.wolfram.com/CrossProduct.html

-редакт http://mathworld.wolfram.com/Perpendicular.html

1 голос
/ 04 апреля 2019

Если вы работаете с трехмерными векторами, вы можете сделать это кратко, используя пояс для инструментов vg .Это легкий слой поверх numpy, и он поддерживает отдельные значения и сложенные векторы.

import numpy as np
import vg

v1 = np.array([1.0, 2.0, 3.0])
v2 = np.array([-2.0, -4.0, -6.0])

vg.almost_collinear(v1, v2)
# True

Я создал библиотеку при моем последнем запуске, где она была мотивирована такими способами: простыми идеями, которые многословны илинепрозрачный в NumPy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...