2009-08-13 7 views
0

Я создаю прыгающий объект, который может отскакивать от 2D прямоугольной комнаты. Я прочитал ответ на другой вопрос об использовании velocityX и velocityY вместо нормального угла направления. Хорошо, это звучит проще, поэтому я реализую следующие математические методы ниже. Однако есть одна разница. Я потребовал, чтобы я ввел угол и какую (горизонтальную/вертикальную) стену ударил объект.Нужна помощь в правильной работе формулы подпрыгивания

+(double) getDirection:(double) x1:(double) y1: (double) x2: (double) y2{ 
    return (atan2(y2-y1,x2-x1) * 180)/3.14; 
} 
+(double) getLengthDir_X:(double) dis: (double) dir{ 
    return (dis*cos(dir)); 
} 
+(double) getLengthDir_Y:(double) dis: (double) dir{ 
    return (dis*sin(dir)); 
} 

+ (float) getBouncedAngle: (float) dir: (int) HVVar{ 

    if (dir < 0)dir+=360; 
    else if (dir >= 360)dir-=360; 

    NSLog(@"in dir %f", dir); 

    float initialVX = [self getLengthDir_X:100 :dir], 
    initialVY = [self getLengthDir_Y:100 :dir]; 

    NSLog(@"x,y %f %f", initialVX, initialVY); 

    if (HVVar == 0){//horizontal wall 
     initialVX = -initialVX; 
    }else if (HVVar == 1){//vertical wall 
     initialVY = -initialVY; 
    } 

    NSLog(@"x,y %f %f", initialVX, initialVY); 

    float newDir = [self getDirection:0 :0 :initialVX :initialVY]; 

    NSLog(@"dir : %f ---> dir : %f", dir, newDir); 

    return newDir; 
} 

Но я получаю очень странные результаты. Иногда я получаю неправильные углы. Я что-то упускаю?

2009-08-13 23:31:19.854 X[2936:20b] in dir -0.049634 
2009-08-13 23:31:19.854 X[2936:20b] x,y 99.876846 -4.961388 
2009-08-13 23:31:19.855 X[2936:20b] x,y -99.876846 -4.961388 
2009-08-13 23:31:19.857 X[2936:20b] dir : -0.049634 ---> dir : -177.246017 
2009-08-13 23:31:21.220 X[2936:20b] in dir -177.246017 
2009-08-13 23:31:21.220 X[2936:20b] x,y 25.124613 -96.792320 
2009-08-13 23:31:21.221 X[2936:20b] x,y -25.124613 -96.792320 
2009-08-13 23:31:21.222 X[2936:20b] dir : -177.246017 ---> dir : -104.604294 
2009-08-13 23:31:21.253 X[2936:20b] in dir -104.604294 
2009-08-13 23:31:21.253 X[2936:20b] x,y -59.644127 80.265671 
2009-08-13 23:31:21.255 X[2936:20b] x,y 59.644127 80.265671 
2009-08-13 23:31:21.256 X[2936:20b] dir : -104.604294 ---> dir : 53.411633 

ответ

2

Ваши функции sin и cos ожидают аргументы в радианах. Вы даете им аргументы в градусах.

+0

Я вижу. Беспечность. Спасибо. – Karl

 Смежные вопросы

  • Нет связанных вопросов^_^