# 【Spine】Spine Runtime for Delphi移植笔记（二）

2017-07-29 21:27:29来源:cnblogs.com作者: spine.math - 水中盗影人点击

`//////////////////////////////////////////////////////////////////////////////////Generic delphi runtime v3.6 for Spine animation tool                        ////Runtime port by cjk (hzi1980@163.com)                                       //////////////////////////////////////////////////////////////////////////////////unit spine.math;interfacetype  TSpineMath = class  public const    PI2 = PI * 2;    RadDeg = 180.0 / PI;    DegRad = PI / 180;    RadFull = PI * 2;    DegFull = 360;  public    class function Sin(const radians: Single): Single; static;    class function Cos(const radians: Single): Single; static;    class function SinDeg(const degrees: Single): Single; static;    class function CosDeg(const degrees: Single): Single; static;    class function Atan2(const x,y: Single): Single; static;    class function Clamp(const value, min, max: Single): Single; static;  end;implementation{ TSpineMath }class function TSpineMath.Atan2(const x, y: Single): Single;var  lAtan: Single;  lZ: Single;begin  if x = 0 then  begin    if y > 0 then exit(PI / 2);    if y = 0 then exit(0);    exit(-PI / 2);  end;  lZ:= y / x;  if Abs(lZ) < 1 then  begin    lAtan:= lZ / (1 + 0.28 * lZ * lZ);    if x < 0 then    begin      if y < 0 then        exit(lAtan - PI)      else        exit(lAtan + PI);    end;    exit(lAtan);  end;  lAtan:= PI / 2 - lZ / (lZ * lZ + 0.28);  if y < 0 then    result:= lAtan - PI  else    result:= lAtan;end;class function TSpineMath.Clamp(const value, min, max: Single): Single;begin  if value < min then exit(min);  if value > max then exit(max);  result:= value;end;class function TSpineMath.Cos(const radians: Single): Single;begin  result:= System.Cos(radians);end;class function TSpineMath.CosDeg(const degrees: Single): Single;begin  result:= System.Cos(degrees * DegRad);end;class function TSpineMath.Sin(const radians: Single): Single;begin  result:= System.Sin(radians);end;class function TSpineMath.SinDeg(const degrees: Single): Single;begin  result:= System.Sin(degrees * DegRad);end;end.`