Случайное движение с использованием физики, CGPoint, векторов, немного запутался в физико-математической стороне вещей

Мне удалось получить физику бурундука и некоторые другие вещи, чтобы положить мяч на мой экран, и я могу влиять на гравитацию с помощью некоторых кнопок / акселерометра. Ура мне!

Затем я хотел бы отключить гравитацию и смоделировать вид сверху вниз, где этот мяч перемещается по экрану по собственной воле. Я могу прикладывать силы к мячу, используя body -> f = cpv(dx, dy), но я не очень хорошо разбираюсь в физике и математике, поэтому я пытаюсь понять, как два значения, которые я передаю, вызывают движение.

Я понимаю, что положительные значения будут перемещать его вправо или вниз, а отрицательные значения будут перемещать его влево или вверх, но это все, что я понимаю на данный момент.

Если бы я хотел, скажем, выбрать случайный азимут по компасу (0–359 градусов) и переместить его по этому азимуту, как бы такое значение преобразовалось в вектор?

Я создал этот метод, но он не работает должным образом, и я не уверен, что делаю неправильно:

- (CGPoint) getVectorFromAngle: (float) angle AndMagnitude: (float) magnitude
{
    float x = magnitude * cos(angle);
    float y = magnitude * sin(angle);
    CGPoint point = CGPointMake(x, y);
    NSLog(@"Made a CGPoint of X: %f and Y: %f.", point.x, point.y);
    return point;
}

Если я передам ему угол 45 и величину 10, он создаст X как 5,253220 и 8,509035. Однако калькулятор, найденный здесь, показывает, что он должен создавать X и Y как 7,0711.

Что у меня здесь не так?


person Luke    schedule 09.01.2013    source источник
comment
Возможно, это поможет: преобразование между полярными и декартовыми координатами.   -  person Martin R    schedule 09.01.2013
comment
mathsisfun.com/алгебра/вектор-калькулятор.html Преобразователь здесь работает и делает именно то, что мне нужно, но не объясняет, как он это делает! Любые идеи?   -  person Luke    schedule 09.01.2013
comment
Ну, это базовая тригонометрия. (x, y) — это вектор в декартовых координатах, а величина + угол описывают вектор в полярных координатах. Преобразование описано в этой статье Википедии или любой книге/статье по тригонометрии.   -  person Martin R    schedule 09.01.2013


Ответы (2)


sin и cos берут углы в радианах, умножьте ваши углы на π/180.

person Nathan Day    schedule 09.01.2013
comment
Да, я только что написал это сам :D - person Fogmeister; 09.01.2013

Также полезно отметить, что Chipmunk уже содержит функции, которые делают именно то, что вам нужно.

cpvmult(cpvforangle(radians), magnitude)
person slembcke    schedule 10.01.2013