PDA

Просмотр полной версии : [Вопрос] Cинусы, косинусы



Item
21.04.2016, 22:13
Доброго, при создание системы подносов с едой столкнулся с небольшой трудностью.А именно: определение координат (X, Y, Z)и угла поворота(Angle) самого подноса.Необходимо определить точные координаты.

(Опирался на эту тему: http://pro-pawn.ru/showthread.php?3732-%D0%A3%D0%B3%D0%BB%D1%8B-%D0%B8-%D0%BE%D1%81%D0%B8)


new
Float: player_pos_x,
Float: player_pos_y,
Float: player_pos_z,
Float: angle;

GetPlayerPos(playerid, player_pos_x, player_pos_y, player_pos_z);
GetPlayerFacingAngle(playerid, angle);


CreateDynamicObject(2355, player_pos_x + 0.8 * - floatsin(angle, degrees), player_pos_y + 0.8 * floatcos(angle, degrees), player_pos_z - 0.9, -25.400, 23.300, angle + 75.00 /** floatcos(angle, degrees)*/, 0, 0, -1, 30.00, 30.00);

При использование этих вычислений, получается заметная погрешность.Поднос не ложится ровно-напротив игрока а ложится со смещением в сторону
Прошу обратить внимание именно на ноги
http://cs630920.vk.me/v630920613/24cfc/yuK-R_8a9F0.jpg
http://cs630920.vk.me/v630920613/24d03/km6R1t0pCm8.jpghttp://cs630920.vk.me/v630920613/24d0a/QkeT4H2Nsmg.jpg

Подозреваю, что тут дело именно в этом параметре - "angle + 75.00 /** floatcos(angle, degrees)*/", но к сожалению, моих знаний в математике не достаточно для решения данной проблемы.
Подскажите пожалуйста, по какой формуле можно произвести точные расчеты.

L0ndl3m
21.04.2016, 23:04
player_pos_x += 0.5 * floatsin(-angle, degrees);
player_pos_y += 0.5 * floatcos(-angle, degrees);


Не успел полностью ответить, завтра полностью отвечу (если вместо меня никто не ответит).

ziggi
22.04.2016, 00:26
stock GetCoordsBefore(Float:x, Float:y, Float:a, Float:distance, &Float:res_x, &Float:res_y)
{
res_x = x + (distance * floatsin(-a, degrees));
res_y = y + (distance * floatcos(-a, degrees));
}


new
Float:player_pos_x,
Float:player_pos_y,
Float:player_pos_z,
Float:angle,
Float:object_pos_x,
Float:object_pos_y;

GetPlayerPos(playerid, player_pos_x, player_pos_y, player_pos_z);
GetPlayerFacingAngle(playerid, angle);

GetCoordsBefore(player_pos_x, player_pos_y, angle, 0.8, object_pos_x, object_pos_y);

CreateDynamicObject(2355, object_pos_x, object_pos_y, player_pos_z - 0.9, -25.400, 23.300, angle + 75.00, 0, 0, -1, 30.00, 30.00);

Item
22.04.2016, 17:42
stock GetCoordsBefore(Float:x, Float:y, Float:a, Float:distance, &Float:res_x, &Float:res_y)
{
res_x = x + (distance * floatsin(-a, degrees));
res_y = y + (distance * floatcos(-a, degrees));
}


new
Float:player_pos_x,
Float:player_pos_y,
Float:player_pos_z,
Float:angle,
Float:object_pos_x,
Float:object_pos_y;

GetPlayerPos(playerid, player_pos_x, player_pos_y, player_pos_z);
GetPlayerFacingAngle(playerid, angle);

GetCoordsBefore(player_pos_x, player_pos_y, angle, 0.8, object_pos_x, object_pos_y);

CreateDynamicObject(2355, object_pos_x, object_pos_y, player_pos_z - 0.9, -25.400, 23.300, angle + 75.00, 0, 0, -1, 30.00, 30.00);


Все-таки смещение присутствует.И дело, как я понимаю, в параметре "angle + 75.00".
Получается еще для него надо выводить какую-то отдельную формулу

ziggi
22.04.2016, 18:29
Все-таки смещение присутствует.И дело, как я понимаю, в параметре "angle + 75.00".
Получается еще для него надо выводить какую-то отдельную формулу

Я на скриншотах не вижу никакого смещения, попробуй другие скины. А параметр angle + 75.00 отвечает угол наклона объекта по оси Z.