在矩阵上缩放和平移变换
Scale and translate transformations on a matrix
我目前正尝试在 C# 中移植以下 Java 或 Swift 代码(在 Windows Phone 库中):
这里是 Java 代码:
public Matrix zoom(float scaleX, float scaleY, float x, float y)
{
final Matrix save = new Matrix();
save.set(anotherMatrix);
save.postScale(scaleX, scaleY, x, y);
return save;
}
这里是 Swift 代码:
public func zoom(#scaleX: CGFloat, scaleY: CGFloat, x: CGFloat, y: CGFloat) -> CGAffineTransform
{
var matrix = CGAffineTransformTranslate(_touchMatrix, x, y);
matrix = CGAffineTransformScale(matrix, scaleX, scaleY);
matrix = CGAffineTransformTranslate(matrix, -x, -y);
return matrix;
}
基本上,在 C# 中 Windows Phone 我有以下 类 :
System.Windows.Media.Matrix
System.Windows.Media.TranslateTransform
System.Windows.Media.ScaleTransform
但是... TranslateTransform
和 ScaleTransform
类 的 Transform
方法适用于 Point
而不是 Matrix
。
如何在 C# 中对矩阵应用缩放和平移变换?
@john-odom 想说的是,您需要将两个变换相乘才能将它们的组合效果应用到一个点上。 Matrix.Multiply 方法将帮助您完成所需的工作,基于 XNA 的答案的 link 并不是要您指向那些特定的 types/libraries 而是让您了解其背后的原理, 相反。
这里是解决方案:
var tt1 = new TranslateTransform(x,y);
var matrix=_touchMatrix* tt1.Value;
var sc=new ScaleTransform(scaleX, scaleY);
matrix = matrix *sc.Value;
var tt2 = new TranslateTransform(-x,-y);
matrix =matrix*tt2.Value ;
我目前正尝试在 C# 中移植以下 Java 或 Swift 代码(在 Windows Phone 库中):
这里是 Java 代码:
public Matrix zoom(float scaleX, float scaleY, float x, float y)
{
final Matrix save = new Matrix();
save.set(anotherMatrix);
save.postScale(scaleX, scaleY, x, y);
return save;
}
这里是 Swift 代码:
public func zoom(#scaleX: CGFloat, scaleY: CGFloat, x: CGFloat, y: CGFloat) -> CGAffineTransform
{
var matrix = CGAffineTransformTranslate(_touchMatrix, x, y);
matrix = CGAffineTransformScale(matrix, scaleX, scaleY);
matrix = CGAffineTransformTranslate(matrix, -x, -y);
return matrix;
}
基本上,在 C# 中 Windows Phone 我有以下 类 :
System.Windows.Media.Matrix
System.Windows.Media.TranslateTransform
System.Windows.Media.ScaleTransform
但是... TranslateTransform
和 ScaleTransform
类 的 Transform
方法适用于 Point
而不是 Matrix
。
如何在 C# 中对矩阵应用缩放和平移变换?
@john-odom 想说的是,您需要将两个变换相乘才能将它们的组合效果应用到一个点上。 Matrix.Multiply 方法将帮助您完成所需的工作,基于 XNA 的答案的 link 并不是要您指向那些特定的 types/libraries 而是让您了解其背后的原理, 相反。
这里是解决方案:
var tt1 = new TranslateTransform(x,y);
var matrix=_touchMatrix* tt1.Value;
var sc=new ScaleTransform(scaleX, scaleY);
matrix = matrix *sc.Value;
var tt2 = new TranslateTransform(-x,-y);
matrix =matrix*tt2.Value ;