У меня нет box2d для экспериментов, но я предполагаю, что он работает как надо.
Вы не можете игнорировать массу объекта; чем больше масса, тем меньше влияние силы.
Ваш расчет X и Y кажется правильным (хотя и слишком сложным). Вы можете изменить движение с помощью импульса , приложенного к центру масс ::
b2Vec2 impulse = b2Vec2(X,Y) * ballBody->GetMass() ;
ballBody->ApplyLinearImpulse(impulse, ballBody->GetLocalCenter());
Если вы действительно хотите использовать силу, а не импульс, есть ряд решений. Обычно вы можете сначала выбрать величину силы, а затем рассчитать направление или наоборот. Я могу дать вам уравнения (и, возможно, код), но это не будет иметь никакого смысла без понимания основ физики.
EDIT:
Хорошо, уравнение одномерного движения
x = x 0 + V 0 t + при 2 / 2, поэтому WLOG принимает x = 1 в направлении целевую точку, и решить за время (время, когда х шарика будет равна х целевой точки). Затем поместите это время в уравнение для y и решите для y , и все готово.