Jer*_*dge 6 delphi math geometry delphi-xe2
我正在寻找Delphi XE2中的某个功能,类似于Inc()允许我从当前度数加上/减去多个度数并产生新度数.例如,如果我的圆周围有一个点为5度,我想减去10,我不应该得到-5度,而是355(360 - 5).与添加过去360相同 - 它应该在达到360时返回到0.
在Delphi中是否有这样的东西,所以我不必重写它?也许在Math单位?
LU *_* RD 10
uses
System.SysUtils,Math;
Function WrapAngle( angle : Double) : Double;
Const
modAngle : Double = 360.0;
begin
Result := angle - modAngle*Floor(angle/modAngle);
end;
begin
WriteLn(FloatToStr(WrapAngle(-5)));
WriteLn(FloatToStr(WrapAngle(5-720)));
WriteLn(FloatToStr(WrapAngle(360)));
ReadLn;
end.
Run Code Online (Sandbox Code Playgroud)
产生结果:
355
5
0
Run Code Online (Sandbox Code Playgroud)
更新:
正如@Giel发现的,在XE3中有一个新功能DegNormalize()可以完成这项工作.甚至快25%左右.诀窍是Floor()用一个替换调用Int(),如果结果为负,则添加modAngle到结果.
| 归档时间: |
|
| 查看次数: |
471 次 |
| 最近记录: |