Создание угла перекоса из коэффициента перекоса для ромбоида в XAML - PullRequest
3 голосов
/ 12 июля 2010

Я не уверен, возможно ли это, но в основном у меня есть два градуса, которые изменят ширину / размер и перекос изображения.В матрице преобразования (<Matrix3DProjection/>) это работает так:

M11:<b>cos(x)</b>   M12:<b>sin(y)*sin(x)</b>   M11:0
M21:0        M22:<b>cos(y)</b>          M23:0
M31:0        M32:0               M33:1 

Так что, если у меня есть X = 30° и Y=40°, моя матрица:

M11:<b>0.866</b>    M12:<b>0.321</b>           M11:0
M21:0        M22:<b>0.766</b>           M23:0
M31:0        M32:0               M33:1 

Такnormal становится 30x40

Вместо этого я хотел бы использовать <TransformGroup/>, но не могу понять часть <SkewTransform AngleY="???"/>.<ScaleTransform/> кажется достаточно простым, используя значения M11 и M22 , указанные выше в ScaleX и ScaleY, например <ScaleTransform ScaleX=".866" ScaleY=".766"/>.

Но я не могувычислите AngleY часть <SkewTransform/> из значения M12 0.321 .Я знаю, что при ручном изучении этого значения значение AngleY="20.3" кажется очень точным.Но я не могу понять математику за этим.

Кто-нибудь знает?

Ответы [ 2 ]

3 голосов
/ 12 июля 2010

Вы можете использовать Reflector в классе SkewTransform, чтобы узнать математику.Он вызывает Matrix.Skew , который использует матрицу:

1.0           tan(skewY)    0.0
tax(skewX)    1.0           0.0

Поскольку вы хотите tan(skewY) * 0.766 = 0.321, вы получите skewY = atan(0.321 / 0.766) = 22.7366108 degrees.Или, возвращаясь к исходным номерам, skewY = atan(sin(y) * sin(x) / cos(y)) = atan(tan(y) * sin(x)), что дает atan(tan(40 degrees) * sin(30 degrees)) = 22.7604763 degrees.

0 голосов
/ 12 июля 2010

Пытаясь немного прочитать между строк, вы хотите избежать использования свойства Projection и использовать вместо него RenderTransform?

Если это так, а не пытаться понять, как использовать ScaleTransform и SkewTransform, просто используйте MatrixTransform в RenderTransform.

 <MatrixTransform Matrix=".866, .321, 0, .766, 0, 0" />

OR

 <MatrixTransform M11="0.866" M12="0.321", M22="0.766" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...