delphi - 单独旋转矩形点使矩形变形

标签 delphi rotation graphic

enter image description here我正在尝试使用此代码通过旋转其点来旋转矩形

  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;

但是 round 函数使矩形变形,有人知道如何克服这个问题吗?

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

最佳答案

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

更新:您的评论暴露了游戏的真相。每次通过转换为整数进行数字化时,都会重复旋转并累积错误。通过将坐标存储为 double 值来处理这个问题,并在需要绘制时根据需要转换为整数。

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

关于delphi - 单独旋转矩形点使矩形变形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8201878/

相关文章:

iphone - 对象旋转不正确 - iPhone 应用程序

jquery - 如何使用 jQuery 创建像倒计时这样的饼图?

delphi - VirtualTreeView:检查节点是否可见

delphi - 如何防止 Advantage 数据库连接超时?

c++ - 二叉搜索树左旋转

algorithm - 如何计算三角形索引的循环顺序?

performance - 德尔福中的 BDE 与 ADO

delphi - 如何使用 DELPHI 中用 C 编写的外部 DLL

xamarin.ios - 旋转时如何切换 View