Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用旋转和缩放变换翻转视图之间的区别_Objective C_Performance_Transform - Fatal编程技术网

Objective c 使用旋转和缩放变换翻转视图之间的区别

Objective c 使用旋转和缩放变换翻转视图之间的区别,objective-c,performance,transform,Objective C,Performance,Transform,使用旋转和缩放变换翻转/旋转对称图像(如以下示例中所示)是否有任何(性能)差异 view.transform = CGAffineTransformMakeScale(1, -1); view.transform = CGAffineTransformMakeRotation(180 / 180.0 * M_PI); 首先,您提供的两个示例根本不是相同的转换。(正如您在评论中指出的那样;但由于对称性,这对您来说并不重要。) 但两者之间没有区别 CGAffineTransformMakeScal

使用旋转和缩放变换翻转/旋转对称图像(如以下示例中所示)是否有任何(性能)差异

view.transform = CGAffineTransformMakeScale(1, -1);
view.transform = CGAffineTransformMakeRotation(180 / 180.0 * M_PI);

首先,您提供的两个示例根本不是相同的转换。(正如您在评论中指出的那样;但由于对称性,这对您来说并不重要。) 但两者之间没有区别

CGAffineTransformMakeScale(-1, -1);

CGAffineTransform
只是一个有特殊用途的3x3矩阵。您可以在中找到一些示例。创建矩阵时使用哪个函数并不重要


虽然浮点比较可能会把事情弄得一团糟,但您可能可以用检查这一点。

我忘记了这一切归结为一个变换矩阵,但我认为矩阵不会完全相同,因为如果图像不是对称的,视觉变换就会不同。(在这么短的时间内从未见过这么多的编辑:笑:)图像的内容是不相关的。从数学上讲,(-1,-1)的比例等于π弧度的旋转。但是,由于舍入误差,
CGAffineTransformMakeScale(-1,-1)
不等于
CGAffineTransformMakeRotation(M_PI)
。旋转矩阵在
b
c
字段中包含±1.224646799147353e-16,因为
sin(M_PI)
不精确。我想说,是的。在x轴上飞行使从下到上,但左为左,右为右。“从左到右,从下到上旋转制作”。@PeterPaulKiefer,我知道这一点,这就是为什么我在问题中说它是关于对称图像的,视觉变换是相同的。对称图像可以是左半黑,右半红。那就不一样了。好吧,我放弃。但是,如果你拿一个全蓝色的二次图像为例,那么效果会产生相同的图像。但是,性能将不一样。第一行使用常数,第二行使用除法和乘法。即使您将第二行简化为……
cGraffineTransformMakeRotation(M_PI)矩阵必须填充正弦值和余弦值。如果这些值是计算出来的,那么从查找表中获取这些值会花费很多,这很便宜。@PeterPaulKiefer,我现在明白了,你是对的。我应该说是水平对称的图像,对吗?这就是数学家喜欢的但老实说:我认为没有实际的区别。我希望objective-c通过从查找表中获取值来计算cos和sin,否则它们将不得不计算巨大的递归和。但是,如果您只运行一次上面的代码,那么即使这样也没有关系。如果它是在循环中执行的,每秒执行100次,那么我将使用第一行。
CGAffineTransformMakeRotation(M_PI);