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
我明白了。疏忽。謝謝。 – Karl 2009-08-14 01:43:55