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)
但圆形功能使矩形变形,有谁知道如何克服这个?
我附上图像,白点是我围绕中心点旋转的点,我确信图像旋转得很好,因此白点应该与图像的角相同.
我能看到这种方法失败的唯一方法就是改变周边的每个点.如果你这样做,不要.使用图形基元变换角点并在每个角之间绘制线条.
更新:你的评论让游戏消失了.每次数字化时,您都会反复旋转并累积错误,转换为整数.通过将坐标存储为双精度值来处理它,并在需要绘制时根据需要转换为整数.
事实上,如果我是你,我会将你的主数据视为一个位置和一个角度,两者都存储为双精度.我根本不会存储角落的坐标.我会存储一个位置(中心或一个角)和一个方向角(相对于固定的全局轴系统).这样你就会总是绘制一个真正的矩形.在每个积分步骤中根据需要增加位置和方向,然后根据主数据计算角的位置.这样做,你永远不会受到你的形状扭曲.
| 归档时间: |
|
| 查看次数: |
2376 次 |
| 最近记录: |