
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@48 8e941d3f-bd1b-0410-a28a-d453659cc2b4
57 lines
1.0 KiB
ObjectPascal
57 lines
1.0 KiB
ObjectPascal
unit noise;
|
|
|
|
{$ifdef fpc}
|
|
{$mode delphi}
|
|
{$endif}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils;
|
|
|
|
function IntNoise(x: Integer): Double;
|
|
|
|
function Linear_Interpolate(a, b, x: Double): Double;
|
|
function Cosine_Interpolate(a, b, x: Double): Double;
|
|
function Cubic_Interpolate(v0, v1, v2, v3, x: Double): Double;
|
|
|
|
implementation
|
|
|
|
function IntNoise(x: Integer): Double;
|
|
var
|
|
xl: Integer;
|
|
begin
|
|
xl := (x shl 13) xor x;
|
|
Result := (xl * (xl * xl * 15731 + 789221) + 1376312589) and $7fffffff;
|
|
Result := 1.0 - (Result / 1073741824.0);
|
|
end;
|
|
|
|
function Linear_Interpolate(a, b, x: Double): Double;
|
|
begin
|
|
Result := a * (1-x) + b * x;
|
|
end;
|
|
|
|
function Cosine_Interpolate(a, b, x: Double): Double;
|
|
var
|
|
f, ft: Double;
|
|
begin
|
|
ft := x * Pi;
|
|
f := (1.0 - cos(ft)) * 0.5;
|
|
Result := a * (1 - f) + b * f;
|
|
end;
|
|
|
|
function Cubic_Interpolate(v0, v1, v2, v3, x: Double): Double;
|
|
var
|
|
P, Q, R, S: Double;
|
|
begin
|
|
P := (v3 - v2) - (v0 - v1);
|
|
Q := (v0 - v1) - P;
|
|
R := v2 - v0;
|
|
S := v1;
|
|
|
|
Result := P * x * x * x + Q * x * x + R * x + S;
|
|
end;
|
|
|
|
end.
|
|
|