是否有将圆的度数移过0的函数?

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到结果.