将元素旋转到一个点

时间:2017-08-18 16:26:09

标签: c# wpf

我无法计算数学,以便以编程方式加载到WPF中的元素。我遇到的问题是,当你加载图像时,它总是以某种方式加载(见图)。当我试图面向点的元素时,由于它们最初加载的方式,它们的角度总是错误的(例如,左边的箭头总是指向错误的方向)。 enter image description here

我可以通过硬编码轻松解决问题,但由于我的要求,这不能做,因为箭头不总是N,E,S,W。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

你可以Math.Atan2(https://msdn.microsoft.com/en-us/library/system.math.atan2(v=vs.110).aspx)来获得一个角度,然后是一个旋转图像的函数(周围有许多浮动) 比如这个https://stackoverflow.com/a/12025915/767333

修改

这应该工作得很好

private Bitmap RotateImage( Bitmap bmp, float angle ) {
     Bitmap rotatedImage = new Bitmap( bmp.Width, bmp.Height );
     using ( Graphics g = Graphics.FromImage( rotatedImage ) ) {
        g.TranslateTransform( bmp.Width / 2, bmp.Height / 2 ); //set the rotation point as the center into the matrix
        g.RotateTransform( angle ); //rotate
        g.TranslateTransform( -bmp.Width / 2, -bmp.Height / 2 ); //restore rotation point into the matrix
        g.DrawImage( bmp, new Point( 0, 0 ) ); //draw the image on the new bitmap
     }

     return rotatedImage;
}
myBmp = RotateImage(myBmp, Math.Atan2(bmpY + myBmp.Height / 2 - middlePointY, bmpX + myBmp.Width / 2 - middlePointX));