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; 但圆形功能使矩形变形,有谁知道如何克服这个? 我附上了图像,白点是我围绕中心点旋转的点,我确信图像旋转得很好,因此白点应该与图像的角相同. 解决方法
我能看到这种方法失败的唯一方法就是改变周边的每个点.如果你这样做,不要.使用图形基元变换角点并在每个角之间绘制线条.
更新:你的评论让游戏消失了.通过转换为整数,每次数字化时,您都会反复旋转并累积错误.通过将坐标存储为双精度值来处理它,并在需要绘制时按需转换为整数. 事实上,如果我是你,我会将你的主数据视为一个位置和一个角度,两者都存储为双精度.我根本不会存储角落的坐标.我会存储一个位置(中心或一个角)和一个方向角(相对于固定的全局轴系统).这样你总会画一个真正的矩形.在每个积分步骤中根据需要增加位置和方向,然后根据主数据计算角的位置.这样做,你永远不会受到你的形状扭曲. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |