2010-07-12 1 views
3

이것이 가능한지 확실하지 않지만 기본적으로 이미지의 너비/크기와 비뚤어 짐을 변경하는 두도가 있습니다. 어트 변환 매트릭스 (<Matrix3DProjection/>), 그것은 다음과 같이 작동XAML의 Rhomboid에 대한 왜곡 요인으로부터 경사 각도 만들기

 
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 

그래서 normal 내가 '무엇 30x40

된다 대신에 <TransformGroup/>을 사용하고 싶지만 <SkewTransform AngleY="???"/> 부분을 알아낼 수는 없습니다. <ScaleTransform/>ScaleX에서 위 <ScaleTransform ScaleX=".866" ScaleY=".766"/> 같은 ScaleYM11M22 값을 사용하여 충분히 쉽게 보인다.

하지만 0.321M12 값으로부터 <SkewTransform/>AngleY 부 알아낼 수 없다. 나는 이것으로 수동으로 주위에 doinking에서 AngleY="20.3"의 가치가 매우 정확하게 보인다는 것을 압니다. 그러나 나는 이것의 뒤에 수학을 이해할 수 없다.

아는 사람 있습니까?

답변

3

당신은 수학을 알 수 있습니다 SkewTransform 클래스에 반사판을 사용할 수 있습니다. 당신이 tan(skewY) * 0.766 = 0.321을 원하기 때문에

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

, 당신은 skewY = atan(0.321/0.766) = 22.7366108 degrees을 얻을 : 그것은 행렬을 사용하는, Matrix.Skew를 호출합니다. 또는 원래 번호 인 skewY = atan(sin(y) * sin(x)/cos(y)) = atan(tan(y) * sin(x))으로 돌아 가면 atan(tan(40 degrees) * sin(30 degrees)) = 22.7604763 degrees이됩니다.

+0

오, 나는이 점에 대해 많은 기대를 걸었다. 불행하게도 AngleY가 'M12 = 0.321'과 동일한 전단을 표시하는 데 22.76의 값이 적용되지 않습니다. 나는 다른 계산에서도 시도해 보았고 그것들에 대해서도 작동하지 않는다. 내 사각형의 너비/높이와 같은 다른 것과 관련이있을 수 있습니까? –

+0

@Otaku : 아, 저는 Skew 다음에 Scale을하고 있었지만, Scale과 Skew를하고있었습니다. 그건 내 수식에서 X와 Y를 뒤집어서 'atan (30 °) sin (40 °) = 20.3605749도'로 만든다. – Quartermeister

+0

훌륭하게, 그게 다야! 고맙습니다! –

0

줄 사이를 약간 읽으 려한다면 Projection 속성을 사용하지 말고 RenderTransform에 대신 사용 하시겠습니까?

그렇다면보다는 ScaleTransform를 사용하고 SkewTransform 그냥 RenderTransformMatrixTransform를 사용하는 방법을 해결하려고 노력.

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

또는

<MatrixTransform M11="0.866" M12="0.321", M22="0.766" />