Мне нужно реализовать немного Ай, который может применить импульс к твердому телу, чтобы поразить цель. Как пушечное ядро, выпущенное из пушки. Я использую Бурундук Динамика для физического движка.
Моя математика ужасна, как и моя физика, но я читал, и с небольшой помощью SO и следующего из этой записи в Википедии , я получил это
float x = target.x = launchPos.x;
float y = target.y = launchPos.y;
float g = 9.8;
float v = 100;
float angle1, angle2;
float tmp = pow(v, 4) - g * (g * pow(x, 2) + 2 * y * pow(v, 2));
if(tmp < 0){
NSLog(@"No Firing Solution");
}else{
angle1 = atan2(pow(v, 2) + sqrt(tmp), g * x);
angle2 = atan2(pow(v, 2) - sqrt(tmp), g * x);
}
// Split the velocities
float vVel = v * sin(angle2);
//NSLog(@"Vertical Velocity: %f", vVel);
float hVel = v / cos(angle2);
//NSLog(@"Horizontal Velocity: %f", hVel);
CGPoint force = cpv(hVel, vVel);
Что должно дать мне угол, из которого я могу рассчитать горизонтальные и вертикальные скорости, необходимые для запуска снаряда.
Однако это не работает, что меня совсем не удивляет по ряду причин. Во-первых, потому что я ужасен в математике и физике, а также потому, что меня смущает пара других вещей.
Этот метод, похоже, не учитывает массу. Должно ли это? Я бы подумал, что это было довольно важно? Но потом я изучал искусство в колледже, так что я могу ошибаться.
У Box2d есть PTM_RATIO, но я не могу найти ничего подобного в бурундуке, так как мои значения соответствуют пространственным координатам в бурундуке?
Я знаю радианы и как они различаются в градусах, и как конвертировать между ними. Но что я должен использовать здесь? я должен преобразовывать angle1 и angle2 в градусы? Даже если я это сделаю, это все равно не сработает.
В целом, многое о физике и бурундуке я не понимаю. Поэтому я здесь и прошу помощи.
Есть ли что-то в бурундуке, что я могу использовать, чтобы выяснить это, или если кто-то должен был выяснить это самостоятельно, я был бы очень признателен за помощь.