仿射变换---位移+缩放比例+旋转

对于仿射变换的理解,以本人现阶段水平还谈不上是深入了解,我喜欢把它想象成一种简单的动画效果,下面介绍几种简单的变化:位置移动,按一定比例缩放,顺时针、逆时针旋转

#import "ViewController.h"

@interface
ViewController ()

@property (nonatomic,weak)
UIView * rectView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super
viewDidLoad];

//"点我"
控制按钮

UIButton * button=[UIButton
buttonWithType:UIButtonTypeCustom];

[button setTitle:@"点我"
forState:UIControlStateNormal];

button.frame=CGRectMake(self.view.frame.size.width-110,
20, 100,
44);

button.backgroundColor=[UIColor
redColor];

//添加点击事件

[button addTarget:self
action:@selector(clickMeAction)
forControlEvents:UIControlEventTouchUpInside];

[self.view
addSubview:button];

UIView * rectView = [[UIView
alloc]initWithFrame:CGRectMake(0,
0, 150,
150)];

rectView.center=self.view.center;

rectView.backgroundColor=[UIColor
greenColor];

self.rectView=rectView;

[self.view
addSubview:rectView];

}

#pragma mark - clickAction

- (void) clickMeAction

{

//仿射变换移动

//1.从当前位置,向右移动50,向下移动100   (直接变换)

/*

self.rectView.transform=CGAffineTransformMakeTranslation(50, 100);

*/

//2.(方法一)从当前位置,向右移动50,向下移动100 
(0.5秒钟时延)

/*

[UIView animateWithDuration:0.5 animations:^{

self.rectView.transform=CGAffineTransformMakeTranslation(50, 100);

}];

*/

//3.(方法二)从当前位置,向右移动50,向下移动100 
(0.5秒钟时延)

/*

[UIView animateWithDuration:0.5 animations:^{

//self.rectView.transform=CGAffineTransformMakeTranslation(50, 100);

self.rectView.transform=CGAffineTransformTranslate(self.rectView.transform, 100, 100);

}];

*/

//仿射变换比例

//1.中心点不变,宽度缩小为原来的0.1倍,高度缩短为原来的0.5倍

/*

[UIView animateWithDuration:0.5 animations:^{

self.rectView.transform=CGAffineTransformMakeScale(0.1, 0.5);

}];

*/

//2.中心点不变,扩大为原来的5倍

/*

[UIView animateWithDuration:0.5 animations:^{

self.rectView.transform=CGAffineTransformMakeScale(5, 5);

}];

*/

//3.(方法一)向右向下各移动100

/*

[UIView animateWithDuration:0.5 animations:^{

self.rectView.transform=CGAffineTransformMakeTranslation(100, 100);

}];

*/

//4.(方法二)向右向下各移动100

/*

[UIView animateWithDuration:0.5 animations:^{

self.rectView.transform=CGAffineTransformMakeTranslation(100, 100);

}];

*/

//5.在前一个位置的基础之上,向右向下分别移动1个距离

/*

[UIView animateWithDuration:0.5 animations:^{

self.rectView.transform=CGAffineTransformTranslate(self.rectView.transform,1,1);

}];

*/

//6.在前一个位置的基础之上,向右向下分别移动100个距离

/*

[UIView animateWithDuration:0.5 animations:^{

CGAffineTransform form=self.rectView.transform;

self.rectView.transform=CGAffineTransformTranslate(form,100,100);

}];

*/

//7.来回弹跳切换着向右下角移动10个单位

/*

[UIView animateWithDuration:0.5 animations:^{

CGAffineTransform form=self.rectView.transform;

self.rectView.transform=CGAffineTransformMakeScale(2, 2);

self.rectView.transform=CGAffineTransformTranslate(form,10,10);

}];

*/

//仿射变换---旋转

//1.顺时针旋转90度

/*

[UIView animateWithDuration:0.5 animations:^{

self.rectView.transform=CGAffineTransformMakeRotation(M_PI_2);

}];

*/

//2.在前一个位置的基础之上,顺时针旋转45度

/*

[UIView animateWithDuration:0.5 animations:^{

CGAffineTransform form=self.rectView.transform;

self.rectView.transform=CGAffineTransformRotate(form,M_PI_4);

}];

*/

//3.在前一个位置的基础之上,逆时针旋转45度

/*

[UIView animateWithDuration:0.5 animations:^{

CGAffineTransform form=self.rectView.transform;

self.rectView.transform=CGAffineTransformRotate(form,-M_PI_4);

}];

*/

//4.在前一个位置的基础之上,顺时针旋转确定的度数

[UIView
animateWithDuration:0.5
animations:^{

CGAffineTransform form=self.rectView.transform;

self.rectView.transform=CGAffineTransformRotate(form,9/100.0*M_PI);

}];

}

@end

时间: 2024-10-12 16:11:12

仿射变换---位移+缩放比例+旋转的相关文章

【Android动画】之Tween动画 (渐变、缩放、位移、旋转)

Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似. 下面就讲一下Tweene Animations. 主要类: Animation  动画 AlphaAnimation 渐变透明度 RotateAnimation 画面旋转 ScaleAnimation 渐变尺寸缩放 TranslateAnimation 位置移动 Animatio

【转】android动画之Tween动画 (渐变、缩放、位移、旋转)

原文:http://blog.csdn.net/feng88724/article/details/6318430 Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似. 下面就讲一下Tweene Animations. 主要类: Animation   动画 AlphaAnimation 渐变透明度 RotateAnimation

C#程序员整理的Unity 3D笔记(十):Unity3D的位移、旋转的3D数学模型

遇到一个想做的功能,但是实现不了,核心原因是因为对U3D的3D数学概念没有灵活吃透.故再次系统学习之—第三次学习3D数学. 本次,希望实现的功能很简单: 如在小地图中,希望可以动态画出Player当前的位置.z的朝向:用3条线.z轴正向.30°旋转.-30°旋转. 问题是:0点可以获得,P1点? P2点是未知的. 我尝试了2个小时,结果不竟如人意,少于沮丧. 不得不,再次花点时间系统的学习3D数学: 1 位移–向量和点: 点: 点和向量在数学上是一致的,实际生活中点的概念比较好理解,坐标点来定位

OpenSCAD对象的位移、旋转、拉伸、镜像与颜色设置

Transformation affect the child nodes and as the name implies transforms them in various ways such as moving/rotating or scaling the child. Cascading transformations are used to apply a variety of transforms to a final child. Cascading is achieved by

图像仿射变换/旋转

import cv2import numpy as npimg = cv2.imread('../img/zidan.jpg',1)imgInfo = img.shapeheight = imgInfo[0]width = imgInfo[1]matSrc = np.float32([[0,0],[0,height-1],[width-1,0]])#输入图像对应的三角形的顶点坐标matDst = np.float32([[50,50],[100,height-50],[width-200,100

iOS下的2D仿射变换机制(CGAffineTransform相关)

仿射变换简介 仿射变换源于CoreGraphics框架,主要作用是绘制2D级别的图层,几乎所有iOS设备屏幕上的界面元素都是由CoreGraphics来负责绘制.而我们要了解的2D仿射变换是其下负责二维坐标到二维坐标的线性变换工作,它保持了二维图形的“平直性”(即:直线经过变换之后依然是直线,圆弧经过变换之后依然是圆弧)和“平行性”(即:二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变),只有依照向量产生的二维线条间的夹角会可能发生变化.仿射变换包括:平移(Tra

仿射变换与透视变换

仿射变换保证物体形状的"平直性"和"平行性".透视变换不能保证物体形状的"平行性".仿射变换是透视变换的特殊形式. 将透视变换写成3*3矩阵形式,即为M; 以下面这张图为例,实现仿射变换,包括旋转,平移,缩放,剪切,以图像中心为变换中心: 仿射变换 旋转(逆时针旋转30度) Mat M=Mat::eye(3,3, CV_32FC1); float alpha=PI/6; float tx=0; float ty=0; float scale=1;

OpenCV实现仿射变换

什么是仿射变换? ? 一个随意的仿射变换都能表示为 乘以一个矩阵 (线性变换) 接着再 加上一个向量 (平移). 综上所述, 我们可以用仿射变换来表示: 旋转 (线性变换) 平移 (向量加) 缩放操作 (线性变换) 你如今能够知道, 其实, 仿射变换代表的是两幅图之间的 关系 . #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <ios

四元数指数映射旋转参数化的实际应用(Practical Parameterization of Rotations Using the Exponential Map)

欢迎加入Bullet物理讨论QQ群:533030320 ,群内由计算机图形学.流体模拟动力学学术群中坐镇的大神管理组成. 四元数指数映射旋转参数化的实际应用 (Practical Parameterization of Rotations Using the Exponential Map) 哪吒三太子 2016/3/26 于上海卢湾 下面为本文使用术语表,表中所有词条大多直接采用英文术语,请各位读者自行伸缩去取,笔者在此不做所谓"直译". - DOF(degree-of-freedo