Нахождение вектора противоположного другому? - PullRequest
3 голосов
/ 25 июля 2010

Мне нужно знать, как найти вектор, противоположный другому, но второй вектор не обязательно такой же величины, как первый, но направление противоположное.Пример:

Я сделал небольшую диаграмму :) alt text http://img688.imageshack.us/img688/5394/prettydiagram.png

В основном, если у меня есть координаты A (-150,150), и я хочу, чтобы B был противоположным и имел величинутолько 2, я хотел бы получить B (-200, -150).То, что я делаю, - это создание приложения, которое может рисовать кубические фигуры Безье, и я заметил, что со многими из них существуют маркеры Безье, и изменение одного маркера также приводит к перемещению другого.Как это можно сделать?

Спасибо

Ответы [ 2 ]

4 голосов
/ 25 июля 2010

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

Матрица вращательного преобразования выглядиткак это:

альтернативный текст http://www.equationsheet.com/latexrender/pictures/46befe367f1c80ac00351de7785fd439.gif

Примените преобразование следующим образом:

альтернативный текст http://www.equationsheet.com/latexrender/pictures/78c27d415d755a0be04e4747da351a09.gif

Заправленный вектор теперь является единицейвектор, указывающий в нужном вам направлении.Вы можете масштабировать его на любую величину.

В вашем особом случае угол составляет 180 градусов.Вы знаете, что косинус 180 равен -1, а синус равен нулю, поэтому матрица проста:

альтернативный текст http://www.equationsheet.com/latexrender/pictures/3c16fd7210502fe391688e89f9b23589.gif

Это ясно как день: все, что вам нужносделать это поменять знаки двух компонент вектора компонента, и у вас есть свой ответ.

3 голосов
/ 25 июля 2010

Это действительно просто.

B = -1/2 * A или B.x = -1/2 * A.x, B.y = -1/2 * A.y, B.z = -1/2 * A.z. Это говорит о векторах, кстати. Вы хотели бы сдвинуть результат. Формула очень проста. Чего мне не хватает?

EDIT

Вашему приложению известно местоположение красной точки (давайте сократим его как вектор R). Ваше приложение также знает вектор А. Нужно найти вектор B, который находится на той же линии, что и AR, на другой стороне от R, как A, и такой, как A, вдвое дальше, чем B. Ну, в этом случае:

  • Временно рассчитать вектор V = (A - R)
  • Сейчас (это просто :)): B = R - 0.5 * V.

Это так просто, я обещаю. Заглавные буквы обозначают векторы, которые обычно представляют собой 2 или 3 кортежа действительных чисел (в зависимости от того, работаете ли вы в 2D или 3D).

В этом нет ничего особенного. Есть вопросы?

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