Я пытаюсь создать физические тела, созданные в случайном положении со случайной скоростью, попавшей в цель. Я подбирала и слегка модифицировала этот код из Интернета, который использовал бурундук для запуска в Box2dBox2d Расчетная траектория
+ (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;
}
Проблема заключается в том, я не знаю, как применить это к моей программе, у меня есть тяжесть -20 для у но положив 20 для g и более низкую скорость, такую как 10 для v, получает меня только «No Firing Solution».
Что я делаю неправильно?
Не могли бы вы объяснить, как вы бы использовать это, пожалуйста? –