Алгоритм отражения точки через линию

21
задан McGin 22 July 2010 в 08:01
поделиться

3 ответа

Хорошо, я собираюсь дать вам метод поваренной книги, чтобы сделать это. Если вам интересно, как я его вывел, скажите мне, и я объясню.

Даны (x1, y1) и прямая y = mx + c, нам нужна точка (x2, y2), отраженная на прямой.

Задайте d:= (x1 + (y1 - c)*m)/(1 + m^2)

Тогда x2 = 2*d - x1

и y2 = 2*d*m - y1 + 2*c

35
ответ дан 29 November 2019 в 06:38
поделиться

Эта ссылка содержит алгоритм, похожий на то, что вы пытаетесь сделать:

То есть отражение луча от нормали.

alt text

0
ответ дан 29 November 2019 в 06:38
поделиться

Это простое объяснение решения Иль-Бхимы. Хитрость заключается в том, чтобы заметить, что вам нужно спроецировать эту точку перпендикулярно линии, переместить ее на столько, а затем переместить еще раз в том же направлении.

Для этого типа проблем легче работать с несколько более избыточным представлением строки. Вместо y = m x + b представим линию точкой p , которая находится на линии, и вектором d в направлении линии. Назовем эту точку p = (0, b) , вектор d = (1, m) , и ваша входная точка будет p1 . Спроецированная точка на линии будет pl , а ваша точка вывода p2 , тогда, будет p1 + 2 * (pl - p1) = 2 * pl - p1

Нужная вам формула - это проекция вектора v на линию, проходящую через начало координат в направлении d . Он задается как d * / , где - скалярное произведение между двумя векторами.

Чтобы найти pl , мы должны переместить всю задачу так, чтобы прямая проходила через начало координат, вычитая p из p1 , используя приведенную выше формулу , и перемещая его обратно. Тогда pl = p + (d *

/ ) , поэтому pl_x = p_x + (b * p1_x) / (1 + m * m ) , pl_y = p_y + (m * p1_x) / (1 + m * m) , а затем используйте p2 = 2 * pl - p1 , чтобы получить окончательные значения. .

20
ответ дан 29 November 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: