2009-08-13 3 views
0

Ich erstelle ein springendes Objekt, das in einem rechteckigen 2D-Raum springen kann. Ich habe die Antwort der anderen Frage über die Verwendung von velocityX und velocityY anstelle des normalen Richtungswinkels gelesen. OK, das hört sich einfacher an, deshalb implementiere ich die folgenden mathematischen Methoden. Es gibt jedoch einen Unterschied. Ich verlangte, dass ich einen Winkel eingab und an welcher (horizontalen/vertikalen) Wand das Objekt getroffen wurde.Brauchen Sie Hilfe, damit die Bouncing-Formel richtig funktioniert

+(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; 
} 

Aber ich bekomme sehr seltsame Ergebnisse. Ich bekomme manchmal falsche Blickwinkel. Fehle ich etwas?

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 

Antwort

2

Ihre sin und cos Funktionen erwarten Argumente im Bogenmaß. Sie geben ihnen Argumente in Grad.

+0

Ich sehe. Nachlässigkeit. Vielen Dank. – Karl