-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Matrix的前乘和后乘不太明白? #79
Comments
就是矩阵的乘法而已。对应左乘和右乘。 |
以translate为例,其他类似,pre是 MT ,post是 TM ,这里的M是源矩阵(对应代码中 mMatrix) ,T是目标矩阵(对应 pre/post translate() 括号中参数对应的矩阵 ),pre操作会受到源矩阵M的影响,post不会受到源矩阵M影响,例如M是一个单位阵先sacle了(0.5,0.5),这时pretranslate(1000,1000)实际效果只有(500,500),而postTranslate(1000,1000)的效果还是(1000,1000)。基于这个理论去理解上面两种方案。 方案二: 所以这里使用 preTranslate(-mBitmap.getWidth()/2,-mBitmap.getHeight()/2)方法 ,这个translate的效果就是 (-mBitmap.getWidth()/2,-mBitmap.getHeight()/2) 与之前矩阵mMatrix共同作用的结果。 |
measure.getPosTan(measure.getLength() * currentValue, pos, tan); // 获取当前位置的坐标以及趋势
mMatrix.reset(); // 重置Matrix
float degrees = (float) (Math.atan2(tan[1], tan[0]) * 180.0 / Math.PI); // 计算图片旋转角度
mMatrix.postRotate(degrees, mBitmap.getWidth() / 2, mBitmap.getHeight() / 2); // 旋转图片
mMatrix.postTranslate(pos[0] - mBitmap.getWidth() / 2, pos[1] - mBitmap.getHeight() / 2); // 将图片绘制中心调整到与当前点重合
这是第一种方案,
// 获取当前位置的坐标以及趋势的矩阵
measure.getMatrix(measure.getLength() * currentValue, mMatrix, PathMeasure.TANGENT_MATRIX_FLAG | PathMeasure.POSITION_MATRIX_FLAG);
mMatrix.preTranslate(-mBitmap.getWidth() / 2, -mBitmap.getHeight() / 2); // <-- 将图片绘制中心调整到与当前点重合(注意:此处是前乘pre)
这是第二种方案,为什么第一种是用的后乘,第二种用的是前乘,具体看了那个matrix的原理还是不太明白?可以具体讲讲吗?
The text was updated successfully, but these errors were encountered: