Прошу помочь вот с такой задачей. Вот я набросал набросок.
Объект А крутится по кругу, вокруг точки В. Надо вращать объект А так чтобы точка Б всегда смотрела в сторону точки В (что показано линией). Точка Б это условность, на самом деле это вверх объекта А
И пожалуйста, не надо предлагать что-нибудь с матрицами, векторами, нормализацией и остальными вещами 3D :) Игра - 2D
Все что у меня есть для изменения - двухмерные координаты (x,y) центра объекта А. координаты Б, а также функция вращения объекта А на определенный угол (не радиан а от 0 до 360 градусов)
И да - я плохо знаю математику:)
Угол поворота А должен быть равен угловому положению относительно В
kipar
> Угол поворота А должен быть равен угловому положению относительно В
kipar
а формулой можно? А то мозг загружен, ничерта не понимает
war_zes
> а формулой можно? А то мозг загружен, ничерта не понимает
Если мы поворачиваем А вокруг В на X градусов, то надо повернуть его еще и на X градусов вокруг своей оси.
Для формулы напиши какие исходные данные есть.
Выучи уже арктангенс, а то жованный стыд.
ой, в жизни надо столько выучить/изучить (английский, несколько новых языков программирования, рисование) что на линейную алгебру просто нет времени:)
Позже отпишусь что получилось, прямо сейчас я делаю другое, а это больше финтифлюшка
war_zes
Выучи же наконец тригонометрию и векторную алгебру и перестань создавать одинаковые темы!
нет, ничего не получается:(
war_zes, пора бы уже прокачаться хотя бы до школьного курса математики. Это ж вообще безобразие (((
RX=TX-MY.x;
RY=TY-MY.y;
MY.rotation=atan2(RY,RX);
war_zes
Божич мой...
Ватсон, это же элементарно.
На каждом очередном шаге ровно настолько градусов насколько ты повернул объекта А вокруг точки В ровно на столько же градусов поворачиваешь объект А вокруг своей оси но только в противоположную сторону.
ИПавлов
Зря ты ему атан советуешь, потому что он же опять от этого атана возьмёт синус и косинус. А сразу взять l:=sqr(dx)+sqr(dy); inv_l := 1/sqrt(l); my_cos := dx*inv_l; my_sin := dy*inv_l; он догадаться не может, потому что тригонометрию не осилил.
перевод из радиан в углы Угол = Радианы*180/Math.PI;
MY.rotation=atan2(RY,RX)*180/Math.PI;
Нормальный (знающий т.е.) человек, наверное, не стал бы париться ни с арктангенсом, ни с син/кос... Это ж тупо матрица, причём, уже готовая к применению фактически )))
если поворачивать надо мгновенно то:
D3DXVECTOR2 A(x1, y1), B(x2, y2), D = ObjectA.Direct; D3DXVECTOR2 C = B - A; float W = D3DXVec2CCW(A, B), An = AngleDС; //забыл как угол вычислять if(W < 0) ObjectA.Rotate(An); else ObjectA.Rotate(-An); //или наоборот
если надо поворачивать с определённой скоростью:
D3DXVECTOR2 A(x1, y1), B(x2, y2); D3DXVECTOR2 C = B - A; float W = D3DXVec2CCW(A, B), Speed = 1.0f; if(W < 0) ObjectA.Rotate(Speed); else ObjectA.Rotate(-Speed); //или наоборот
P.S. писал в браузере поэтому могут быть ошибки в коде.
Тема в архиве.