3

これが可能かどうかはわかりませんが、基本的には、画像の幅/サイズと傾きを変更する 2 つの度があります。変換行列 ( <Matrix3DProjection/>) では、次のように機能します。

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

したがって、 と がある場合X = 30°Y=40°私の行列は次のとおりです。

M11: 0.866     M12: 0.321            M11:0
M21:0 M22: 0.766            M23:0
M31:0 M32:0 M33:1

そう正常なる30x40

代わりに使用したいのは a<TransformGroup/>ですが、その部分がよくわかりません<SkewTransform AngleY="???"/>。上記のM11M22の値を使用することで、十分に簡単に<ScaleTransform/>思えます。ScaleXScaleY<ScaleTransform ScaleX=".866" ScaleY=".766"/>

しかし、 0.321の値からのAngleY部分を把握できません。これを手動で行うと、 の値が非常に正確に見えることがわかります。しかし、この背後にある数学を理解することはできません。<SkewTransform/>M12AngleY="20.3"

誰か知っていますか?

4

2 に答える 2

3

SkewTransform クラスで Reflector を使用して、数学を調べることができます。行列を使用する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ます。

于 2010-07-12T12:37:50.050 に答える
0

Projectionプロパティの使用を避け、RenderTransform代わりに使用したい行間を少し読み込もうとしていますか?

ScaleTransformもしそうなら、使い方を考えようとするのではなく、 で を使用するSkewTransformだけMatrixTransformですRenderTransform

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

また

 <MatrixTransform M11="0.866" M12="0.321", M22="0.766" />
于 2010-07-12T12:07:04.243 に答える