このプロセスを使用して、wpfのコーナーとして4つの境界線の長方形を回転します。
'find the center
Dim center As New Point(((topRight.Margin.Left - topLeft.Margin.Left) / 2) + topLeft.Margin.Left,
((topLeft.Margin.Top - bottomLeft.Margin.Top) / 2) + bottomLeft.Margin.Top)
'shift the points to center and calculate the rotation
Dim tl As Point = getRotatedPoint(New Point(topLeft.Margin.Left - center.X,
topLeft.Margin.Top - center.Y), 1)
Dim tr As Point = getRotatedPoint(New Point(topRight.Margin.Left - center.X,
topRight.Margin.Top - center.Y), 1)
Dim bl As Point = getRotatedPoint(New Point(bottomLeft.Margin.Left - center.X,
bottomLeft.Margin.Top - center.Y), 1)
Dim br As Point = getRotatedPoint(New Point(bottomRight.Margin.Left - center.X,
bottomRight.Margin.Top - center.Y), 1)
'shift the points back from center and move
topLeft.Margin = New Thickness(tl.X + center.X, tl.Y + center.Y, 0, 0)
topRight.Margin = New Thickness(tr.X + center.X, tr.Y + center.Y, 0, 0)
bottomLeft.Margin = New Thickness(bl.X + center.X, bl.Y + center.Y, 0, 0)
bottomRight.Margin = New Thickness(br.X + center.X, +br.Y + center.Y, 0, 0)
getRotatedPoint関数は次のとおりです。
'rotating the borders
Private Function getRotatedPoint(ByVal pnt As Point, ByVal degrees As Double)
Dim rAngle As Double = degrees * (Math.PI / 180)
Dim x As Double = pnt.X * Math.Cos(rAngle) - pnt.Y * Math.Sin(rAngle)
Dim y As Double = pnt.X * Math.Sin(rAngle) + pnt.Y * Math.Cos(rAngle)
Return New Point(x, y)
End Function
しかし、私は非常に厄介な結果を得ます、私は知りません、どんな考えも歓迎されます:)
edit1:getRotatedPoint関数をdoubleに変更し、ラジアンから度への変換を追加しました。
edit2:ラジアン変換関数を修正しました。
edit3:中心座標を修正しましたが、それでもオフセットが発生します。
edit4:テスター向けのサンプルプロジェクトは次のとおりです: http ://dl.dropbox.com/u/33417300/testapp.zip