加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:18:53 所属栏目:大数据 来源:网络整理
导读:我正在尝试使用此代码旋转其点来旋转矩形 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;
我正在尝试使用此代码旋转其点来旋转矩形
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;

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

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

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读