// COMPLETE THREAD

More Noise Sphere Noise (simple source code)

1 expanded post ยท every known parent and child

NODE 6fa4b120More Noise Sphere Noise (simple source code)
Ok, no language holy wars.  This was quickie to test out
the Noise Sphere plotting.  It's in Pascal, but it's
understandable.

{ Simple demo of a Noise Sphere in Turbo Pascal         }
{ (If only I had a really awful RNG to test it with...) }

program NoiseSphere;
  uses Graph, Crt;

const
  BGIPath = ''; { where those silly Borland *.BGI drivers are }

var
  GraphMode,
  GraphDriver: Integer;


type
  Polar = record
    r, theta, phi: Real;
  end;

  Cartesian = record
    x,y,z: Real;
  end;

procedure PolarToCartesian(var P: Polar; var C: Cartesian);
begin
  C.x := P.r * Sin(P.phi) * Cos(P.theta);
  C.y := P.r * Sin(P.phi) * Sin(P.theta);
  C.z := P.r * Cos(P.phi);
end;

procedure Plot(var C: Cartesian);
begin
  with C do begin
    PutPixel(100+(Round(100*y)), 200-(Round(120*z)), Yellow);
    PutPixel(320+(Round(100*x)), 200-(Round(120*y)), Red);
    PutPixel(540+(Round(100*x)), 200-(Round(120*z)), Blue);
  end;
  Delay(1);
end;


function ByteToReal(b: Byte): Real;
begin
  ByteToReal := b / 256;
end;

function InitScreen: Integer;
begin
  GraphMode := VGAHi;
  GraphDriver := EGA;
  InitGraph(GraphDriver,GraphMode,BGIPath);
  InitScreen := GraphResult;
end;

var
  n: LongInt;
  X: Array [ 0..2 ] of Real;
  P: Polar;
  C: Cartesian;
begin
  InitScreen;
  Randomize;
  for n := 0 to 2 do X[n] :=
{$ifdef USEDEV}
{$else}
    ByteToReal(Random(256));
{$endif}
  n := 0;
  repeat
    with P do begin
      r := Sqrt(X[(n+2) mod 3]);
      theta := pi * X[(n+1) mod 3];
      phi := 2 * pi * X[n];
    end;
    PolarToCartesian(P,C);
    Plot(C);
    X[n] :=
{$ifdef USEDEV}
{$else}
    ByteToReal(Random(256));
{$endif}
    n := (n + 1) mod 3;
  until KeyPressed;
    ReadKey;
  RestoreCrtMode;
end.