Случайно движение с помощта на физика, CGPoint, вектори, малко объркано от страна на физиката/математиката на нещата

Успях да накарам физиката на Chipmunk и някои други неща да поставят топка на моя екран и мога да повлияя на гравитацията с някои бутони / акселерометър. Ура!

След това бих искал да изключа гравитацията и да симулирам изглед отгоре надолу, където тази топка се движи около екрана по собствено желание. Мога да прилагам сили към топката, използвайки 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/algebra/vector-calculator.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