Преобразовать вращение и перевод вопроса

У меня следующая ситуация, я пытаюсь сделать редактор фотографий, и мне нужно делать операции масштабирования, перевода и поворота для изображения с центром вокруг

проблема в том, что если я применяю перевод после 90-градусного перевода влево, это перевод сверху и точка привязки не является центром представления после перевода

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    // ImageView
    v = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 768, 500)];
    [v setBackgroundColor:[UIColor redColor]];

    // ImageView's Image
    UIImage *img = [UIImage imageNamed:@"_my.jpg"];
    [v setImage:img];
    v.contentMode = UIViewContentModeScaleAspectFit;
    v.layer.anchorPoint = CGPointMake(0.5, 0.5);
    [self.view setBackgroundColor:[UIColor clearColor]];

    // UiView containing ImageView
    vc = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 768, 500)];
    [vc addSubview:v];
    [self.view addSubview:vc];
}

- (IBAction)Click:(id)sender {
    // Translate
    if ([sender tag] == 1) {
        CGAffineTransform t0 = v.transform;
        CGAffineTransform t1 = CGAffineTransformTranslate(t0, 10.0, 0.0);
        v.transform = t1;
    }
    // Rotate
    if ([sender tag] == 2) {
        CGAffineTransform t0 = v.transform;
        CGAffineTransform t1 = CGAffineTransformRotate(t0, DEGREES_TO_RADIANS(10));
        v.transform = t1;
    }    
}

Кто-нибудь знает, как я могу держать центр зрения в качестве точки привязки и перевести после поворота для правильной работы?

Техас

1 ответ

Преобразования с Происхождением

Однако, особенно в 2D, вам часто нужно добавлять смещение начала координат в ваше преобразование. Это обычно добавляется к началу, и тоже должно быть отрицано, поэтому:

// Мировая Матрица с Происхождением

-OriginTranslation * Scale * Rotation * PositionTranslation

То же самое можно сделать и с матрицей представления, но вы добавляете ее в конец, и на этот раз вы не отрицаете ее:

// Просмотр матрицы с происхождением

-PositionTranslation * -Rotation * Zoom * OriginTranslation

Преобразования с Избирательным Происхождением

Также есть случаи, когда вы хотите иметь смещение начала координат, но вы хотите, чтобы оно влияло только на ваш масштаб и поворот, но не на ваш перевод. Способ справиться с этим - отменить трансформацию источника до достижения компонента перевода. Например, с матрицей мира:

Я точно не помню, как преобразование применяется для представления, одно из них должно работать.

// Мировая матрица с происхождением для масштаба и вращения

-OriginTranslation * Scale * Rotation * OriginTranslation * PositionTranslation

И матрица вида:

// Просмотр матрицы с происхождением

-PositionTranslation * -OriginTranslation * -Rotation * Zoom * OriginTranslation

Пример трансформации без происхождения, порядок: масштаб * вращение * перевод

Другие вопросы по тегам