﻿ 【Spine】Spine Runtime for Delphi移植笔记（二） - spine.mat - 鸿网互联

# 【Spine】Spine Runtime for Delphi移植笔记（二） - spine.mat

// ////////////////////////////////////////////////////////////////////////////// // Generic delphi runtime v3.6 for Spine animation tool // // Runtime port by cjk (hzi1980@163.com) // // ///////////////////////////////////////////////////
```////////////////////////////////////////////////////////////////////////////////
//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;
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
end;

class function TSpineMath.CosDeg(const degrees: Single): Single;
begin
end;

class function TSpineMath.Sin(const radians: Single): Single;
begin
end;

class function TSpineMath.SinDeg(const degrees: Single): Single;
begin