Бурундук 2D Настройка функции орбитальной скорости

Поэтому я использовал демо-версию 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);

Любые идеи? Спасибо!


person Primus202    schedule 03.06.2011    source источник


Ответы (1)


Понятно! Как я и подозревал, это просто вопрос правильного вычитания вектора, а именно центра минус вектор положения. Отличная работа!

person Primus202    schedule 04.06.2011