Я пытаюсь просто заставить объекты вращаться вокруг центральной точки, например,
Зеленый и синий объекты представляют объекты, которые должны держать свое расстояниево время поворота к центральной точке на основе угла, который я передаю в метод.
Я попытался создать функцию в target-c, но она не работает без статического числа.Например (вращается вокруг центра, но не от истинной начальной точки или расстояния от объекта.)
-(void) rotateGear: (UIImageView*) view heading:(int)heading
{
// int distanceX = 160 - view.frame.origin.x;
// int distanceY = 240 - view.frame.origin.y;
float x = 160 - view.image.size.width / 2 + (50 * cos(heading * (M_PI / 180)));
float y = 240 - view.image.size.height / 2 + (50 * sin(heading * (M_PI / 180)));
view.frame = CGRectMake(x, y, view.image.size.width, view.image.size.height);
}
Мои магические числа 160, а 240 - центр холстав котором я рисую изображения на.50 - это статическое число (и проблема), которое позволяет функции работать частично корректно - без сохранения начального положения объекта или правильного расстояния.К сожалению, я не знаю, что здесь указывать.
heading
- это параметр, который проходит в градусах от 0 до 359. Он рассчитывается таймером и увеличивается за пределы этого класса.
По сути, я бы хотел, чтобы я мог перетаскивать любое изображение на свой холст, и в зависимости от начальной точки изображения оно вращалось бы вокруг центра моего круга.Это означает, что если бы я уронил изображение в точке (10,10)
, расстояние до центра круга сохранится, используя (10,10)
в качестве начальной точки.Объект будет вращаться на 360 градусов вокруг центра и достигнет своей исходной начальной точки.
Ожидаемый результат - передать, например, (10,10)
в метод, основанный на нулевых градусах, и вернуться обратно,(15,25
) (не реально) при 5 градусах.
Я знаю, что это очень просто (и это описание проблемы полностью излишне), но я собираюсь косоглазие, пытаясь выяснить, где я нахожусьскрывать вещиМне все равно, какие языковые примеры вы используете, если таковые имеются.Я смогу расшифровать ваши значения.
Обновление ошибки
Я получил дальнейшее, но все еще не могу получить правильный расчет.Мой новый код выглядит следующим образом:
heading
установлен на 1 градус.
-(void) rotateGear: (UIImageView*) view heading:(int)heading
{
float y1 = view.frame.origin.y + (view.frame.size.height/2); // 152
float x1 = view.frame.origin.x + (view.frame.size.width/2); // 140.5
float radius = sqrtf(powf(160 - x1 ,2.0f) + powf(240 - y1, 2.0f)); // 90.13
// I know that I need to calculate 90.13 pixels from my center, at 1 degree.
float x = 160 + radius * (cos(heading * (M_PI / 180.0f))); // 250.12
float y = 240 + radius * (sin(heading * (M_PI / 180.0f))); // 241.57
// The numbers are very skewed.
view.frame = CGRectMake(x, y, view.image.size.width, view.image.size.height);
}
Я получаю результаты, которые находятся далеко не там, где должна быть точка.Проблема с назначением х и у.Куда я иду не так?