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

前端之家收集整理的这篇文章主要介绍了delphi – 旋转矩形点可单独扭曲矩形前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用此代码旋转其点来旋转矩形
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;

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

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

解决方法

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

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

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

猜你在找的Delphi相关文章