如何在C#中计算旋转的图像坐标?

问题描述 投票:0回答:1

我正在制作程序,通过使用x y坐标在画框中成像来画一些线。图像将是可调整的,因此可以调整大小或旋转,但我希望绘制的线条沿图像跟随,而不要停留在图片框坐标上。当放大或缩小显示在图像后面的线条时,但旋转时,它们不跟随图像而随机跳跃。

Base Image with 3 Lines绘制了三行的默认程序

Zoomed outZoomed in线条仍在的缩放图像

Rotation error将图像旋转10度。线条跳到随机位置。

我目前正在使用带有2个坐标的坐标系来形成一条线,但它会使坐标随处乱跳,不会随图像一起旋转。这是黑色线条1的代码。

---编辑---

这是顺时针旋转的代码,但是它却以逆时针方向移动。 angle2值仍是未知的,逆时针旋转一个接一个,尝试32是可能的最接近位置。坐标并没有像以前那样随机地跳,现在它与图片一起旋转,但是旋转的位置仍然不正确。将其旋转360度后,坐标位置会从原始位置略微移动。并且每转都会逆时针旋转。

Original before rotating旋转角度为32之前的原稿2

After rotating 360 degrees旋转360度后

float x = (float)bmp.Width / 2;
float y = (float)bmp.Height / 2;
ang = ang + 10;
double ang2 = 32;
double newLine1X1 =  (line1X1 - x) * Math.Cos(ang2 /180) + (line1Y1 - y) * Math.Sin(ang2 /180) + x;
double newLine1Y1 = -(line1X1 - x) * Math.Sin(ang2 /180) + (line1Y1 - y) * Math.Cos(ang2 /180) + y;
double newLine1X2 =  (line1X2 - x) * Math.Cos(ang2 /180) + (line1Y2 - y) * Math.Sin(ang2 /180) + x;
double newLine1Y2 = -(line1X2 - x) * Math.Sin(ang2 /180) + (line1Y2 - y) * Math.Cos(ang2 /180) + y;
line1X1 = (int)newLine1X1;
line1Y1 = (int)newLine1Y1;
line1X2 = (int)newLine1X2;
line1Y2 = (int)newLine1Y2;

顺时针旋转代码

float x = (float)bmp.Width / 2;
float y = (float)bmp.Height / 2;
ang = ang - 10;
double ang2 = -32;
double newLine1X1 = (line1X1 - x) * Math.Cos(ang2 /180) - (line1Y1 - y) * Math.Sin(ang2 /180) + x;
double newLine1Y1 = (line1X1 - x) * Math.Sin(ang2 /180) + (line1Y1 - y) * Math.Cos(ang2 /180) + y;
double newLine1X2 = (line1X2 - x) * Math.Cos(ang2 /180) - (line1Y2 - y) * Math.Sin(ang2 /180) + x;
double newLine1Y2 = (line1X2 - x) * Math.Sin(ang2 /180) + (line1Y2 - y) * Math.Cos(ang2 /180) + y;
line1X1 = (int)newLine1X1;
line1Y1 = (int)newLine1Y1;
line1X2 = (int)newLine1X2;
line1Y2 = (int)newLine1Y2;

逆时针旋转代码

谁能告诉我如何解决此旋转错误?非常感谢你。

我正在制作程序,通过使用x y坐标在画框中成像来画一些线。图像将是可调整的,因此可以调整大小或旋转,但是我希望绘制的线条沿图像沿着...

c# rotation coordinates picturebox
1个回答
1
投票

您要的是变换矩阵和偏移矢量

© www.soinside.com 2019 - 2024. All rights reserved.