Я пытаюсь просто заставить объекты вращаться вокруг центральной точки, например
Зеленые и синие объекты представляют собой объекты, которые должны сохранять расстояние до центральной точки при вращении на основе угла, который я передаю в метод.
Я попытался создать функцию в 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);
}
Я получаю результаты, которые далеко не там, где должна быть точка. Проблема заключается в присвоении x и y. Где я ошибаюсь?
bounds
вашего представления так, чтобы (0,0) находилось в центре вращения:view.bounds = CGRectMake(-width/2, -height/2, width, height)
- person bshirley   schedule 12.07.2011