Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Cocoa 如何计算两个CG仿射变换比例变换之间的中点?_Cocoa_Math_Uikit_Core Graphics_Appkit - Fatal编程技术网

Cocoa 如何计算两个CG仿射变换比例变换之间的中点?

Cocoa 如何计算两个CG仿射变换比例变换之间的中点?,cocoa,math,uikit,core-graphics,appkit,Cocoa,Math,Uikit,Core Graphics,Appkit,这可能更像是一个数学问题,而不是一个编程问题,但在本例中,它位于CGAffineTransform的上下文中。 如果有两个变换,每个变换表示一个缩放变换,那么如何计算这两个变换之间的中点,从而直观地表示用户的“一半” 例如: CGAffineTransform minimumScale = CGAffineTransformMakeScale(1, 1); CGAffineTransform maximumScale = CGAffineTransformMakeScale(10, 10);

这可能更像是一个数学问题,而不是一个编程问题,但在本例中,它位于
CGAffineTransform的上下文中。

如果有两个变换,每个变换表示一个缩放变换,那么如何计算这两个变换之间的中点,从而直观地表示用户的“一半”

例如:

CGAffineTransform minimumScale = CGAffineTransformMakeScale(1, 1);
CGAffineTransform maximumScale = CGAffineTransformMakeScale(10, 10);
创建比例因子为5的变换不会产生我想要的结果,因为从用户的角度来看,从
1->5
表示“5倍放大”,但从
5->10
仅表示“2倍放大”

在这个简单的例子中,比例因子大约为
3.33
会产生我想要的结果,因为它会像这样变换帧:

W:100 x H:100 -> 333 x 333 // A 3x magnification from the user's perspective
W:333 x H:333 -> 999 x 999 // Also a 3x magnification from the user's perspective

然而,给定任意两个最小和最大标度值(其中最小值可能小于1.0,e.x.:
0.2->3.9
),我无法计算该值。

您可以尝试标度因子的几何平均值(即sqrt(scale1*scale2),因此在您的案例中,sqrt(10))而不是算术平均值。几何平均数的比值是恒定的,即gmean/small=greater/gmean,而不是与算术平均数的差值:amean-small=greater-amean.@dmuir这是一个不错的建议,结果目前还可以接受。非常感谢。