![]() |
|
![]() ![]() ![]() |
|
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 1 Всего: 52 |
Есть два вектора, выходящие из одной точки. Надо повернуть один вектор относительно другого на опредлённый угол. Как?
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
AlexST |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 30.4.2006 Где: Москва Репутация: нет Всего: 3 |
Можно так:
Есть вектора A(x1,y1,x2,y2) и B(x1,y1,x3,y3). Углом вектора А будем считать угол между прямой на которой он лежит и осью абсцисс. tg(А) этого угла = (y2-y1)/(x2-x1). tg(В) вектора В будет = ( tg(A)+tg(с) )/( 1-tg(A)*tg(с) ), где с - угол поворота. Ответ: Тогда координаты вектора В длиной L будут равны: x3=x2+√( L^2 / (1+tg(B)^2) ) y3=y2+√( L^2 / (1+tg(B)^-2) ) Чёт громоздко получилось. Может можно проще... Это сообщение отредактировал(а) AlexST - 15.1.2007, 18:41 |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
насколько я понял, речь идёт о 3-мерном пространстве...
можно сделать так (осью будет называть вектор, относительно которого идёт поворот): 1. представляем разбиваемый вектор в виде суммы двух: коллинеарного оси и перпендикулярного, про коллинеарную составляющую можно забыть, поворачивать надо только перпендикулярную 2. рассмотрим плоскость, перпендикулярную оси: перпендикулярную составляющую нужно поворачивать именно в ней 3. выбираем базис для этой плоскости первым вектором можно взять сам поворачиваемый (его перп. составляющую) вторым - векторное произведение его на ось при этом нужно нормировать ось, чтобы размеры получились одинаковые 4. дальше просто записываем формулу поворота p'=p*cos phi + n*sin phi p - перпендикулярная составляющая исходного вектора p' - повёрнутого вектора n - второй базисный вектор (векторное произведение) -------------------- qqq |
|||
|
||||
AlexST |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 30.4.2006 Где: Москва Репутация: нет Всего: 3 |
||||
|
||||
Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 1 Всего: 37 |
Вот функция , возвращающая поворотную матрицу, относительно любого вектора на угол alph
Если чего - пиши, я библиотеку полностью пришлю. Просто здесь вроде понятно, как надо CVector и CMatrix определять |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 1 Всего: 52 |
БЕЗ матриц.
Пространство ествественно трёхмерное. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 1 Всего: 37 |
А почему без матриц? Везде сначала оператор поворота получают, а затем просто умножают на него вектор... Можно D3DX подключить, там все есть
|
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 1 Всего: 52 |
Вот как я реализовал поворот:
Добавлено @ 08:46 Но где-то закралась ошибка ибо, когда я указываю v2 = (0.0; 1.0; 0.0), а v1 = (1.0; 1.0; 0.0), то он мне выдаёт вектор = (1.0; 1.0; -1.0). ![]() Добавлено @ 08:49 Может нормализации где не хватает? -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 1 Всего: 52 |
Нашёл ошибку - это формула вращения вокруг вектора, а не относительного него.
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
||||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 1 Всего: 52 |
Elfet, вопрос давно решён
![]() -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |