has*_*s19 5 math android canvas coordinates
我想要做的是,我想开始缩放画布中的特定点,缩放工作正常但我的问题是我不知道如何计算在缩放时移动画布多少,请注意我我没有使用canvas.scale.
我只是在缩放时增加系统中每2个单元之间的距离,它的工作正常.
那么是否有任何方程可以帮助我找出在特定点缩放时偏移画布的数量?
假设我想缩放点(0,4)如何知道在缩放时移动画布有多少?
在这种情况下,方程式不如知道正确的原则有用.答案只有一句话,但我首先要解释这个原则.
当你说"围绕一个点"时,你正在寻找的是暂时将另一个点作为原点.缩放原点是微不足道的; 它只是标量乘法.缩放另一个点是三个操作:
在数学符号中,调用缩放运算符S.调用将指定点指向原点T的转换运算符.将原点带到指定点的运算符是T的倒数,表示为T -1.然后,"在一点上缩放"的操作符是T -1 ST.(从右到左应用运算符.)
运算符T -1 ST被称为S与T的共轭.在线性代数中,它也称为相似变换.如果S和T可以用矩阵表示(在此设置中也是如此),则组合运算符是矩阵的乘积.
所以这里是一句话答案:通过对原点的翻译来共轭你的缩放操作.
我应该补充一点,虽然它不是问题的一部分,但是共轭也是你在一个点上旋转的方式.
假设我们要应用缩放比例,使特定点(x0,y0)保持不变。可以说,我们使用因子s的均匀缩放,然后使用(u,v)进行平移。这意味着我们的全面转型是
(x',y') = s (x,y) + (u,v)
Run Code Online (Sandbox Code Playgroud)
现在(x0,y0)是固定的
(x0,y0) = s * (x0,y0) + (u,v)
Run Code Online (Sandbox Code Playgroud)
稍微重新排列
(u,v) = (1 - s) (x0, y0)
Run Code Online (Sandbox Code Playgroud)
在psudocode中,它可能像
double s= scale_factor;
double x0 = center_point_x;
double y0 = center_point_y;
canvas.scale(s);
double u = (1-s) * x0;
double v = (1-s) * y0;
canvas.translate(u,v);
Run Code Online (Sandbox Code Playgroud)
小智 5
方程为 (old_coordinate_x - focus_point_around_which_scale_is_done_x)*scale_factor + focus_point_around_which_scale_is_done_x = new_cooperative_x
同样计算该点的 y 坐标。