【Spine】Spine Runtime for Delphi移植笔记(二…

2018-06-17 18:56:14来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

////////////////////////////////////////////////////////////////////////////////
//Generic delphi runtime v3.6 for Spine animation tool                        //
//Runtime port by cjk (hzi1980@163.com)                                       //
////////////////////////////////////////////////////////////////////////////////

unit spine.math;

interface

type
  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.

一些需要用到的数学函数

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:探讨下在Delphi里面进程之间的数据共享

下一篇:[控件] Firemonkey 跨平台 Toast