program AnimatedPoints;
uses
Raylib, Math;
const NUM_POINTS = 10000;
var
t: Single = 0.0;
Points: array of TVector2;
procedure CalculatePoint(x, y, t: Single; var px, py: Single);
var
k, d, e, c, q: Single;
begin
k := (4.0 + Sin(x / 11.0 + t * 8.0)) * Cos(x / 14.0);
e := y / 8.0 - 19.0;
d := Sqrt(k * k + e * e) + Sin(y / 9.0 + t * 2.0);
c := d * d / 49.0 - t;
q := 2.0 * Sin(k * 2.0) + Sin(y / 17.0) * k * (9.0 + 2.0 * Sin(y - d * 3.0));
px := q + 50.0 * Cos(c) + 200.0;
py := q * Sin(c) + d * 39.0 - 440.0;
end;
procedure Setup;
begin
InitWindow(800, 800, 'Animated Points');
SetTargetFPS(60);
SetLength(Points, NUM_POINTS);
end;
procedure UpdateJellyPoints;
var
x, y, k, e, d0, d, angle, q, c: Single;
i: integer;
begin
t := t + 0.01;
for i := 0 to NUM_POINTS - 1 do
begin
x := i;
y := i / 41.0;
k := 5 * Cos(x/19) * Cos(y/30);
e := y/8 - 12;
d0 := Sqrt(k*k + e*e);
d := (d0*d0)/59 + 2;
angle := ArcTan2(k, e);
q := (4 * Sin(angle * 9) + 9 * Sin(d - t) -
(k/d) * (9 + 3*Sin(d*9 - t*16)));
c := (d*d)/7 - t;
Points[i].x := (q + 50*Cos(c)) * 2 + 800/2;
Points[i].y := (q*Sin(c) + d*45) * 2;
end;
end;
procedure DrawFrame;
var
i: Integer;
px, py: Single;
begin
px := 0; py := 0;
t := t + Pi / 240.0;
ClearBackground(BLACK);
for i := 0 to 9999 do
begin
CalculatePoint(i, i / 235.0, t, px, py);
DrawPixel(Round(px), Round(py), RayWhite );
end;
UpdateJellyPoints;
for i := 0 to NUM_POINTS - 1 do DrawPixelV(Points[i], WHITE);
end;
begin
Setup;
while not WindowShouldClose do
begin
BeginDrawing;
DrawFrame;
EndDrawing;
end;
CloseWindow;
end.