旋转矩形点可单独扭曲矩形

Sar*_* S. 7 delphi rotation graphic

在此输入图像描述我正在尝试使用此代码旋转其点来旋转矩形

  var
 dx,dy:real;
 rotp:Tpoint;
begin
  dx := (CenterPoint.Y * Sin(angle)) - (CenterPoint.X * Cos(angle)) + CenterPoint.X;
  dy := -(CenterPoint.X * Sin(angle)) - (CenterPoint.Y * Cos(angle)) + CenterPoint.Y;
  rotP.X := round((point.X * Cos(angle)) - (point.Y * Sin(angle)) + dx);
  rotP.Y := round((point.X * Sin(angle)) + (point.Y * Cos(angle)) + dy);
  result:= rotP;
end;
Run Code Online (Sandbox Code Playgroud)

但圆形功能使矩形变形,有谁知道如何克服这个?

我附上图像,白点是我围绕中心点旋转的点,我确信图像旋转得很好,因此白点应该与图像的角相同.

Dav*_*nan 7

我能看到这种方法失败的唯一方法就是改变周边的每个点.如果你这样做,不要.使用图形基元变换角点并在每个角之间绘制线条.

更新:你的评论让游戏消失了.每次数字化时,您都会反复旋转并累积错误,转换为整数.通过将坐标存储为双精度值来处理它,并在需要绘制时根据需要转换为整数.

事实上,如果我是你,我会将你的主数据视为一个位置和一个角度,两者都存储为双精度.我根本不会存储角落的坐标.我会存储一个位置(中心或一个角)和一个方向角(相对于固定的全局轴系统).这样你就会总是绘制一个真正的矩形.在每个积分步骤中根据需要增加位置和方向,然后根据主数据计算角的位置.这样做,你永远不会受到你的形状扭曲.

  • @Sara Saeed Concering积累 - 你用什么坐标(point.X,point.Y)旋转?上一步的初始或旋转? (4认同)