IniciProgramari
logo IniciProgramacióBasic

Programming

BASIC

Warthog-sdl

Warthog és un algorisme que vaig veure publicat per primera vegada a un número de la revista "Investigación y ciencia" a l'any 1990. L'algorisme és molt simple. Considerem un nombre natural F i la successió de valors definits per la funció N^3/F amb N=1,2,3,....,F. L'algorisme consisteix en enllaçar F segments d'igual longitud de manera que el punt final de cada segment sigui el punt inicial del següent i l'orientació del segment vingui definida per la part fraccionaria de N^3/F (valors de 0 a 1) de manera que 0 representi el rumb de 0º i 1 representi el rumb de 360º. El resultat són figures geomètriques sorprenents amb eixos de simetria, i que a vegades recorden vagament a insectes, flors, fantasmes, joies, i altres. Per a cada valor de F, s'obtenen figures diferents, augmentant la complexitat al incrementar el nombre de segments, i reproduint-se certs patrons. Hom es planteja que com és possible que una funció tant simple obtingui resultats tant artístics? I arribem a la conclusió que la natura empra les matemàtiques per aconseguir la seva bellesa i diversitat.

warthog
Figura 1. Warthog F=1999
warthog
Figura 2. Warthog F=2531
warthog
Figura 1. Warthog F=2533
warthog
Figura 1. Warthog F=165765
warthog
Figura 1. Warthog F=165765 daleko

   Baixar codi: warthog.sdlbas


// Warthog figures
// Adapted from 1990 article in "American Scientific"
// Tested first time in 90' using my ZX Spectrum 48K
// Pere Casellas
// version 20180520 using sdlBasic
// GNU GPL 3.0

setDisplay( 1000, 650, 16, 2 )
setcaption("Warthog")

// Initial variables
//for f =1 to 250
//printS(f)

// Change the parameter f to obtain incredible figures
f=1998

fprintS( "Segments number is:")
printS(f)

k=13  // segment units
x=450     //  initial x
y=125     // initial y
pi = 3.14159265

// Figure made of f segments
for n =1 to f

// Define colors
if n<=f/3 then
ink(rgb(255,0,0))
end if
if n>f/3 then
ink(rgb(0,255,0))
end if
if n>(2*f/3) then
ink(rgb(0,0,255))
end if

// Warthog function
zz=(n^3)/f
z=2*pi*(zz-int(zz))  // angle as fractional part of zz
x1=k*cos(z)
y1=k*sin(z)
xx=x+x1
yy=y+y1

// Draw segment
line(x,y,xx,yy)

// Define initial point
x=xx
y=yy

next

wait(100)
waitKey

cls

//next