Страница 1 из 11
Форум » Программирование в Pawno » Стандартные функции » PointAngle [угол поворота]
PointAngle [угол поворота]
Добавлено 12.05.2016 в 00:45 | Сообщение №1
Сообщений: 263 Репутация: 0
Администраторы
Функция позволяет узнать угол поворота от точки до точки.

Код
stock Float:PointAngle(playerid, Float:xa, Float:ya, Float:xb, Float:yb)
{
        new Float:carangle;
        new Float:xc, Float:yc;
        new Float:angle;
        xc = floatabs(floatsub(xa,xb));
        yc = floatabs(floatsub(ya,yb));
        if (yc == 0.0 || xc == 0.0)
        {
                if(yc == 0 && xc > 0) angle = 0.0;
                else if(yc == 0 && xc < 0) angle = 180.0;
                else if(yc > 0 && xc == 0) angle = 90.0;
                else if(yc < 0 && xc == 0) angle = 270.0;
                else if(yc == 0 && xc == 0) angle = 0.0;
        }
        else
        {
                angle = atan(xc/yc);
                if(xb > xa && yb <= ya) angle += 90.0;
                else if(xb <= xa && yb < ya) angle = floatsub(90.0, angle);
                else if(xb < xa && yb >= ya) angle -= 90.0;
                else if(xb >= xa && yb > ya) angle = floatsub(270.0, angle);
        }
        GetVehicleZAngle(GetPlayerVehicleID(playerid), carangle);
        return floatadd(angle, -carangle);
}


Оптимизация:
#define fclamp360(%0) %0 += (%0 >= 360.0) ? -360.0 : ((%0 < 0.0) ? 360.0 : 0.0)

Код
#define fclamp360(%0) %0 += (%0 >= 360.0) ? -360.0 : ((%0 < 0.0) ? 360.0 : 0.0)

stock ReturnZAngleToPoint(playerid, Float:x, Float:y)
{
    new Float:P[4];
    GetPlayerPos(playerid,P[0],P[1],P[2]);
    P[3] = (180.0 - atan2(floatsub(P[0],x),floatsub(P[1],y)));
    fclamp360(P[3]);
    return P[3];
}


Программист любитель :)
Форум » Программирование в Pawno » Стандартные функции » PointAngle [угол поворота]
Страница 1 из 11
Поиск: