Успях да накарам физиката на 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.
Какво греша тук?
(x, y)
е вектор в декартови координати, а величината + ъгъл описват вектор в полярни координати. Преобразуването е описано в тази статия в Уикипедия или във всяка книга/статия за тригонометрия. - person Martin R   schedule 09.01.2013