Гость Опубликовано 16 декабря, 2016 Поделиться Опубликовано 16 декабря, 2016 (изменено) Привет всем. Делаю мини-карту по средствам D3D в CE. Нужно сделать авто-корректировку положения меток, при изменении угла поворота моего автомобиля. Нужна формула вычисления текущего положения Х,Y оппонента относительно моего автомобиля, с учетом угла поворота. Пробовал использовать следующий способ Х1,Y1 - координаты моего автомобиля Х2,Y2 - координаты автомобиля оппонента Cos и Sin = значения угла поворота моего автомобиля от -1 до 1 Х = Х1 - Х2 (100 - 50 = 50) Y = Y1 - Y2 (20 - 15 = 5) X метки = Cos*X Y метки = Sin*Y При таком способе, при вращении на одном месте моего автомобиля, прямоугольник движется не по кругу но по элипсу (по овалу). - Возьмём стоящий на месте автомобиль с таким углом поворота, при котором Cos = 1 Sin = 0 X = *1*50 = 50 Y = 0*5 = 0 -А теперь повернем его на 180 градусов Cos = -1 Sin = 0 X = -1*50 = -50 Y = 0*5 = 0 Вроде бы всё хорошо, при развороте на 180 метка удалилась в противоположную сторону на такое же расстояние от центра (на 50) -Но если повернуть автомобиль на 90 градусов Cos = 0 Sin = 1 X = 0*50 = 0 Y = 1*5 = 5 Получаем движение по элипсу. Кто знает правильную формулу расчёта? Изменено 16 декабря, 2016 пользователем AntonVit Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 16 декабря, 2016 Поделиться Опубликовано 16 декабря, 2016 Разобрался. Тестирую. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 20 декабря, 2016 Поделиться Опубликовано 20 декабря, 2016 (изменено) Расчёт координат после изменения угла поворота объекта x=x*cos-y*sin y=x*sin+y*cosa Скрытый текст fld dword ptr [esi+1b0] fsub dword ptr [OPON_1_D3D_X] fstp dword ptr [OPONS_1_SAVER_SLOT_X] fld dword ptr [esi+1b8] fsub dword ptr [OPON_1_D3D_Y] fstp dword ptr [OPONS_1_SAVER_SLOT_Y] fld dword ptr [OPONS_1_SAVER_SLOT_X] fmul dword ptr [MyCar_Cosinus_Memory] fstp dword ptr [OPONS_SAVER_SLOT_Sometime_1] fld dword ptr [OPONS_1_SAVER_SLOT_Y] fmul dword ptr [MyCar_Sinus_Memory] fstp dword ptr [OPONS_SAVER_SLOT_Sometime_2] fld dword ptr [OPONS_1_SAVER_SLOT_X] fmul dword ptr [MyCar_Sinus_Memory] fstp dword ptr [OPONS_SAVER_SLOT_Sometime_3] fld dword ptr [OPONS_1_SAVER_SLOT_Y] fmul dword ptr [MyCar_Cosinus_Memory] fstp dword ptr [OPONS_SAVER_SLOT_Sometime_4] fld dword ptr [OPONS_SAVER_SLOT_Sometime_1] fsub dword ptr [OPONS_SAVER_SLOT_Sometime_2] fstp dword ptr [OPONS_1_SAVER_SLOT_X] fld dword ptr [OPONS_SAVER_SLOT_Sometime_3] fadd dword ptr [OPONS_SAVER_SLOT_Sometime_4] fstp dword ptr [OPONS_1_SAVER_SLOT_Y] Расчёт длины отрезка между двумя точками √(x2−x1)2+(y2−y1)2 (где √ - квадратный корень, а ")2" - возведение в квадрат) "Брекакалар" Скрытый текст Скрытый текст Изменено 20 декабря, 2016 пользователем AntonVit Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения