计算平移后的旋转中心

发布于 2024-08-18 09:47:02 字数 294 浏览 3 评论 0原文

我需要能够围绕给定点旋转图像,以便图像的任何部分出现在容器的中心都是旋转中心。

为了计算中心点,我目前只是取应用于图像的平移的倒数:

Rotate.CenterX = Translate.X * -1;
Rotate.CenterY = Translate.Y * -1;

但是,我使用的当前计算还不够,因为如果图像之后被平移,则它不起作用强>正在旋转。

我确信这是一个相当简单的三角函数,我只是想不出它是什么!

干杯

I need to be able to rotate an image around a given point so that what ever part of the image appears in the center of my container is the center of rotation.

To calculate the center points, I am currently just taking the inverse of the translation applied to the image:

Rotate.CenterX = Translate.X * -1;
Rotate.CenterY = Translate.Y * -1;

However, the current calculation i'm using is not sufficient as it does not work if the image has been translated after being rotated.

I'm sure it's a reasonably straight forward trig function, I just can't think what it is!

Cheers

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

七月上 2024-08-25 09:47:02

如果您正在使用 GDI+,请使用以下命令:

double ImWidth = (double)Im.Width;
double ImHeight = (double)Im.Height;
double XTrans = -(ImWidth * X);
double YTrans = -(ImHeight * Y);

g.TranslateTransform((float)XTrans, (float)YTrans);    
g.TranslateTransform((float)(ImWidth / 2.0 - XTrans), (float)(ImHeight / 2.0 - YTrans));
g.RotateTransform((float)Angle);
g.TranslateTransform(-((float)(ImWidth / 2.0 - XTrans)), -((float)(ImHeight / 2.0 - YTrans)));

如果您正在使用 WPF 图形对象,请使用以下变换组:

TransformGroup TC = new TransformGroup();
RotateTransform RT = new RotateTransform(Angle);
RT.CenterX = Im.Width / 2.0;
RT.CenterY = Im.Height / 2.0;
TranslateTransform TT = new TranslateTransform(-X * Im.PixelWidth, -Y * Im.PixelHeight);
TC.Children.Add(TT);
TC.Children.Add(RT);

X & Y 是要平移图像的百分比值(如果图像为 1000 像素且 X 为 0.1,则图像将平移 100 像素)。这就是我需要该功能工作的方式,但您可以轻松更改它。

If you are working with GDI+ then use the following:

double ImWidth = (double)Im.Width;
double ImHeight = (double)Im.Height;
double XTrans = -(ImWidth * X);
double YTrans = -(ImHeight * Y);

g.TranslateTransform((float)XTrans, (float)YTrans);    
g.TranslateTransform((float)(ImWidth / 2.0 - XTrans), (float)(ImHeight / 2.0 - YTrans));
g.RotateTransform((float)Angle);
g.TranslateTransform(-((float)(ImWidth / 2.0 - XTrans)), -((float)(ImHeight / 2.0 - YTrans)));

If you are working with WPF graphic objects, use the following transform group:

TransformGroup TC = new TransformGroup();
RotateTransform RT = new RotateTransform(Angle);
RT.CenterX = Im.Width / 2.0;
RT.CenterY = Im.Height / 2.0;
TranslateTransform TT = new TranslateTransform(-X * Im.PixelWidth, -Y * Im.PixelHeight);
TC.Children.Add(TT);
TC.Children.Add(RT);

X & Y are the percent values you want to translate the image in (if the image is 1000 pixels and X is 0.1 then the image will be translated 100 pixels). This is how I needed the function to work but you can easily change it otherwise.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文