2010-08-13 4 views
1

임의의 속도로 타겟을 생성하는 임의의 위치에서 생성 된 물리 본문을 대상으로 만들려고합니다. 나는 수집 약간 Box2D의에서 실행하는 다람쥐를 사용하던 웹에서이 코드를 수정Box2d 궤도 계산

문제는 내가 내 프로그램이 적용하는 방법을 몰라
+ (CGPoint) calculateShotForTarget:(CGPoint)target from:(CGPoint) launchPos with:(float) velocity 
{ 
    float xp = target.x - launchPos.x; 
    float y = target.y - launchPos.y; 
    float g = 20; 
    float v = velocity; 
    float angle1, angle2; 

    float tmp = pow(v, 4) - g * (g * pow(xp, 2) + 2 * y * pow(v, 2)); 

    if(tmp < 0){ 
     NSLog(@"No Firing Solution"); 
    }else{ 
     angle1 = atan2(pow(v, 2) + sqrt(tmp), g * xp); 
     angle2 = atan2(pow(v, 2) - sqrt(tmp), g * xp); 
    } 

    CGPoint direction = CGPointMake(cosf(angle1),sinf(angle1)); 
    CGPoint force = CGPointMake(direction.x * v, direction.y * v); 

    NSLog(@"force = %@", NSStringFromCGPoint(force)); 
    NSLog(@"direction = %@", NSStringFromCGPoint(direction)); 

    return force; 
} 

, 나는 Y -20의 중력이 그러나 g를 20으로하고 v를 10으로 낮추면 "No Firing Solution"만 남게됩니다.

내가 뭘 잘못하고 있니?

답변

1

10보다 낮은 속도는 결코 발사체가 작동하지 않으므로 거리를 여행 할만큼 충분한 힘이 없습니다.

계산상의 오류는 픽셀로 표시된 거리 계산을 제외하고 모든 것이 미터로 표시된다는 것입니다!

이 미친 속도 내가지고 있다고 고정에 코드를 변경 :이 사용을 얼마나

+ (CGPoint) calculateShotForTarget:(CGPoint)target from:(CGPoint) launchPos with:(float) velocity 
{ 
    float xp = (target.x - launchPos.x)/PTM_RATIO; 
    float y = (target.y - launchPos.y)/PTM_RATIO; 
    float g = 20; 
    float v = velocity; 
    float angle1, angle2; 

    float tmp = pow(v, 4) - g * (g * pow(xp, 2) + 2 * y * pow(v, 2)); 

    if(tmp < 0){ 
     NSLog(@"No Firing Solution"); 
    }else{ 
     angle1 = atan2(pow(v, 2) + sqrt(tmp), g * xp); 
     angle2 = atan2(pow(v, 2) - sqrt(tmp), g * xp); 
    } 

    CGPoint direction = CGPointMake(cosf(angle1),sinf(angle1)); 
    CGPoint force = CGPointMake(direction.x * v, direction.y * v); 

    NSLog(@"force = %@", NSStringFromCGPoint(force)); 
    NSLog(@"direction = %@", NSStringFromCGPoint(direction)); 

    return force; 
} 
+0

당신이 설명해 주 시겠어요을? –