Итак, я использовал демонстрацию Planet.c, чтобы настроить функцию скорости для моей 2D игры для iPhone, которая находится в работах, связанных с вращением планет. Однако следующий код устанавливает хорошие орбиты, но делает это только вокруг источника экрана, то есть в нижнем левом углу экрана:
// Point mass position
cpVect p = body->p;
cpFloat sqdist = cpvlengthsq(p);
cpVect g = cpvmult(p, -gravityStrength / (sqdist * cpfsqrt(sqdist)));
cpBodyUpdateVelocity(body, g, damping, dt);
Я попытался просто добавить вектор смещения положения центральной звезды (в данном случае центр экрана cpv (160, 240)), но это просто отсылает его по странной орбите. Я всегда пробовал различные попытки получить вектор положения моего тела и радиальный вектор относительно центра в отличие от начала координат, но я не могу заставить его работать совершенно правильно. Я думаю о чем-то вроде:
// Sun position
cpVect disp = cpv(160, 240);
// Point mass position
cpVect p = body->p;
// Point mass relative to Sun
p = cpvsub(disp, p);
cpFloat sqdist = cpvlengthsq(p);
cpVect g = cpvmult(p, -gravityStrength / (sqdist * cpfsqrt(sqdist)));
cpBodyUpdateVelocity(body, g, damping, dt);
Есть идеи? Спасибо!