2015-04-30 2 views
0

Я сейчас пытаюсь порта следующие Java или Swift код в C# (в библиотеке 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; 
} 

И здесь Свифт код:

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

Но ... Transform метод из TranslateTransform и ScaleTransform классов работают с Point и не с Matrix.

Как применить масштаб и преобразовать преобразование в матрицу в C#?

+0

Возможный дубликат [http://stackoverflow.com/questions/636081/how-to-rotate-scale-and-translate-a-matrix-all-at- один раз в C#] (http://stackoverflow.com/questions/636081/how-to-rotate-scale-and-translate-a-matrix-all-at-once-in-c). –

+0

@JohnOdom: Thx за вашу помощь. Это не дубликат. На самом деле класс 'System.Windows.Media.Matrix' не предоставляет метод« Масштабирование »или« Перевод ». Но «Матрица» из пространства имен XNA, похоже, имеет эти методы. Должен ли я использовать этот класс? Xna устарела, не так ли? – rolandl

ответ

1

Здесь решение:

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 ; 
0

Что @ john-odom пытается сказать, что вам нужно умножить два преобразования вместе, чтобы применить их комбинированный эффект к Точке. Метод Matrix.Multiply поможет вам сделать то, что вам нужно, ссылка на ответ на основе XNA заключалась не в том, чтобы указывать на эти конкретные типы/библиотеки, но заставлять вас осознавать принцип, стоящий за ним.

+0

Thx для вашей помощи. К сожалению, у меня нет доступа ко всем методам, описанным в этой документации: https://msdn.microsoft.com/fr-fr/library/system.windows.media.matrix%28v=vs.110%29.aspx В принципе, после создания матрицы, подобной этой 'var matrix = new Matrix()' автозаполнение не предоставляет метод 'scale' ... – rolandl

+0

Вот что я говорю. Вы не можете использовать 'System.Windows.Media.TranslateTransform' и' System.Windows.Media.ScaleTransform'. Вам нужно использовать 'System.Windows.Media.Matrix' вместе с [Translate] (https://msdn.microsoft.com/en-us/library/system.windows.media.matrix.translate (v = vs. 110) .aspx) и [Масштаб] (https://msdn.microsoft.com/en-us/library/system.windows.media.matrix.scale (v = vs.110) .aspx). – Ani

+0

Но в Windows Phone эти методы не существуют: https://msdn.microsoft.com/en-us/library/windows/apps/system.windows.media.matrix%28v=vs.105%29.aspx В любом случае, Я опубликовал решение. – rolandl