Delphi 简单直线图像旋转问题

Delphi 简单直线图像旋转问题,delphi,image,math,Delphi,Image,Math,需要说明的是,要将一条直线旋转一定角度,需要将其端点坐标乘以矩阵({Cos(a),Sin(a)}{-Sin(a)Cos(a)}),其中a是旋转角度。矩阵中产生的两个数字将是旋转线端点的x和y坐标。围绕直线的起点旋转。 简化它,新的坐标将是x的{x*Cos(a)-y*Sin(a)},y的{x*Sin(a)+y*Cos(a)} 任务是使用此方法旋转三角形。但是下面使用这种方法的代码给出了一些垃圾,而不是旋转的图像(原始三角形的扭曲形式,按“随机”角度旋转): 嗯,我没有主意了。我做错了什么 感谢您的

需要说明的是,要将一条直线旋转一定角度,需要将其端点坐标乘以矩阵({Cos(a),Sin(a)}{-Sin(a)Cos(a)}),其中a是旋转角度。矩阵中产生的两个数字将是旋转线端点的xy坐标。围绕直线的起点旋转。 简化它,新的坐标将是x的{x*Cos(a)-y*Sin(a)},y的{x*Sin(a)+y*Cos(a)}

任务是使用此方法旋转三角形。但是下面使用这种方法的代码给出了一些垃圾,而不是旋转的图像(原始三角形的扭曲形式,按“随机”角度旋转):

嗯,我没有主意了。我做错了什么


感谢您的时间。

您似乎正在围绕其初始起点坐标旋转每条线。因此,线1将围绕其起点(x0,y0)旋转;然后第2行将围绕bx旋转,通过;然后第3行将绕cx旋转。这将导致一个扭曲的三角形。相反,您需要围绕第一条直线的起点旋转所有三条直线。

您似乎正在围绕其初始起点坐标旋转每条直线。因此,线1将围绕其起点(x0,y0)旋转;然后第2行将围绕bx旋转,通过;然后第3行将绕cx旋转。这将导致一个扭曲的三角形。相反,您需要围绕第一条直线的起点旋转所有三条直线。

您使用的公式将围绕(0,0)旋转一个点。要获得所需结果,请将计算更改为:

b1x:=x0 + Round((bx-x0)*cos(a*pi/180)-(by-y0)*sin(a*pi/180));   
b1y:=y0 + Round((bx-x0)*sin(a*pi/180)+(by-y0)*cos(a*pi/180));
c1x:=x0 + Round((cx-x0)*cos(a*pi/180)-(cy-y0)*sin(a*pi/180)); 
c1y:=y0 + Round((cx-x0)*sin(a*pi/180)+(cy-y0)*cos(a*pi/180));

正在使用的公式将围绕(0,0)旋转一个点。要获得所需结果,请将计算更改为:

b1x:=x0 + Round((bx-x0)*cos(a*pi/180)-(by-y0)*sin(a*pi/180));   
b1y:=y0 + Round((bx-x0)*sin(a*pi/180)+(by-y0)*cos(a*pi/180));
c1x:=x0 + Round((cx-x0)*cos(a*pi/180)-(cy-y0)*sin(a*pi/180)); 
c1y:=y0 + Round((cx-x0)*sin(a*pi/180)+(cy-y0)*cos(a*pi/180));

谢谢问题真的是关于x和y的相对性=)谢谢。问题其实是关于x和y的相对性()