
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@48 8e941d3f-bd1b-0410-a28a-d453659cc2b4
113 lines
2.6 KiB
ObjectPascal
113 lines
2.6 KiB
ObjectPascal
program noise1d;
|
|
|
|
{$ifdef fpc}
|
|
{$mode delphi}
|
|
{$endif}
|
|
|
|
uses
|
|
{$ifdef fpc}
|
|
Interfaces, // this includes the LCL widgetset
|
|
{$endif}
|
|
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
|
|
noise;
|
|
|
|
type
|
|
|
|
{ TMainWindow }
|
|
|
|
TMainWindow = class(TForm)
|
|
private
|
|
{ private declarations }
|
|
SelectInterpolation: TComboBox;
|
|
procedure DoPaint(Sender: TObject);
|
|
procedure DoRefresh(Sender: TObject);
|
|
function NormalizeNoise(x: Double): Integer;
|
|
public
|
|
{ public declarations }
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
end;
|
|
|
|
var
|
|
vMainWindow: TMainWindow;
|
|
|
|
{ TMainWindow }
|
|
|
|
procedure TMainWindow.DoPaint(Sender: TObject);
|
|
var
|
|
i, j, interpolation: Integer;
|
|
begin
|
|
{ Draws rulers }
|
|
Canvas.MoveTo(25, 25 );
|
|
Canvas.LineTo(25, 275);
|
|
Canvas.LineTo(275, 275);
|
|
|
|
{ Draws 12 points and the interpolation between them }
|
|
for i := 0 to 11 do
|
|
begin
|
|
Canvas.Ellipse(i * 20 + 25 + 1, NormalizeNoise(IntNoise(i)) + 1,
|
|
i * 20 + 25 - 1, NormalizeNoise(IntNoise(i)) - 1);
|
|
|
|
if (i = 11) then Continue;
|
|
|
|
for j := 1 to 19 do
|
|
begin
|
|
case SelectInterpolation.ItemIndex of
|
|
0: interpolation := NormalizeNoise(Linear_Interpolate(IntNoise(i), IntNoise(i + 1), j / 20));
|
|
1: interpolation := NormalizeNoise(Cosine_Interpolate(IntNoise(i), IntNoise(i + 1), j / 20));
|
|
else
|
|
interpolation := NormalizeNoise(Cubic_Interpolate(IntNoise(i - 1),
|
|
IntNoise(i), IntNoise(i + 1), IntNoise(i + 2), j / 20));
|
|
end;
|
|
|
|
Canvas.Pixels[i * 20 + 25 + j, interpolation] := clBlack;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainWindow.DoRefresh(Sender: TObject);
|
|
begin
|
|
Repaint;
|
|
end;
|
|
|
|
function TMainWindow.NormalizeNoise(x: Double): Integer;
|
|
begin
|
|
Result := Round( 25 + (x + 1.0) * 125 );
|
|
end;
|
|
|
|
constructor TMainWindow.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
|
|
Position := poScreenCenter;
|
|
Width := 300;
|
|
Height := 300;
|
|
Caption := 'Noise 1D';
|
|
|
|
OnPaint := DoPaint;
|
|
|
|
SelectInterpolation := TComboBox.Create(Self);
|
|
SelectInterpolation.Parent := Self;
|
|
SelectInterpolation.Items.Add('Linear Interpolation');
|
|
SelectInterpolation.Items.Add('Cosine Interpolation');
|
|
SelectInterpolation.Items.Add('Cubic Interpolation');
|
|
SelectInterpolation.Left := 100;
|
|
SelectInterpolation.Width := 200;
|
|
SelectInterpolation.ItemIndex := 0;
|
|
|
|
SelectInterpolation.OnChange := DoRefresh;
|
|
end;
|
|
|
|
destructor TMainWindow.Destroy;
|
|
begin
|
|
|
|
inherited Destroy;
|
|
end;
|
|
|
|
begin
|
|
Application.Initialize;
|
|
Application.CreateForm(TMainWindow, vMainWindow);
|
|
Application.Run;
|
|
end.
|
|
|