Главная Программирование Basic
Warthog — это алгоритм, который я впервые увидел опубликованным в журнале «Investigación y ciencia» (Scientific American) в 1990 году. Алгоритм очень прост. Рассмотрим натуральное число F и последовательность значений, определяемых функцией N^3/F при N=1,2,3,....,F. Алгоритм заключается в соединении F отрезков равной длины так, чтобы конечная точка каждого отрезка была начальной точкой следующего, а ориентация отрезка определялась дробной частью N^3/F (значения от 0 до 1), где 0 соответствует направлению 0°, а 1 — направлению 360°. В результате получаются удивительные геометрические фигуры с осями симметрии, которые иногда смутно напоминают насекомых, цветы, привидения, драгоценности и другое. Для каждого значения F получаются разные фигуры, сложность которых возрастает с увеличением числа отрезков, причём некоторые паттерны повторяются. Возникает вопрос: как может такая простая функция давать столь художественные результаты? И мы приходим к выводу, что природа использует математику для достижения своей красоты и разнообразия.
.png)




Скачать код: 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