据说,要将一条线旋转一定角度,你可以将它的终点坐标乘以矩阵({Cos(a),Sin(a)} {-Sin(a)Cos(a)}),其中 a 是旋转角度 . 矩阵中得到的两个数字将是 x 和 y 坐标的旋转线's end point. Rotation goes around line' s起点 . 对其进行简化,对于x,新坐标将是{x * Cos(a) - y * Sin(a)},对于y,新坐标将是{x * Sin(a)y * Cos(a)} .
任务是使用此方法旋转三角形 . 但是下面使用这种方法的代码是给出一些废话而不是旋转的图像(原始三角形的扭曲形式,以“随机”角度旋转):
x0:=200;
y0:=200;
bx:=StrToInt(Edit1.Text);
by:=StrToInt(Edit2.Text);
cx:=StrToInt(Edit4.Text);
cy:=StrToInt(Edit5.Text);
a:=StrToInt(Edit3.Text);
//Original triangle
Form1.Canvas.Pen.Color:=clBlue;
Form1.Canvas.MoveTo(x0,y0);
Form1.Canvas.LineTo(bx,by);
Form1.Canvas.LineTo(cx,cy);
Form1.Canvas.LineTo(x0,y0);
//New triangle
Form1.Canvas.Pen.Color:=clGreen;
Form1.Canvas.MoveTo(x0,y0);
b1x:=Round(bx*cos(a*pi/180)-by*sin(a*pi/180));
b1y:=Round(bx*sin(a*pi/180)+by*cos(a*pi/180));
c1x:=Round(cx*cos(a*pi/180)-cy*sin(a*pi/180));
c1y:=Round(cx*sin(a*pi/180)+cy*cos(a*pi/180));
Form1.Canvas.LineTo(b1x,b1y);
Form1.Canvas.MoveTo(x0,y0);
Form1.Canvas.LineTo(c1x,c1y);
Form1.Canvas.LineTo(b1x,b1y);
end;
好吧,我没有想法 . 我究竟做错了什么?
谢谢你的时间 .
2 回答
您正在使用的公式旋转一个点(0,0) . 要获得所需的结果,请将计算更改为:
您似乎围绕其初始起点坐标旋转每条单独的线 . 因此第1行将绕其起点(x0,y0)旋转;然后第2行将绕bx旋转;然后第3行将围绕cx旋转 . 这将导致扭曲的三角形 . 相反,您需要围绕第一行的起点旋转所有三条线 .