Ulam spiral - Tugdual - 12-22-2013 03:15 PM
Explanation is here http://en.wikipedia.org/wiki/Ulam_spiral
The code is nothing special...
Code:
EXPORT Ulam()
BEGIN
local x, y, level, i, n;
x:=320/2;
y:=240/2;
level:=1;
n:=1;
rect_p(0);
// center: initial state, level 1
if isprime(n) then pixon_p(x,y); end;
while x>=0 and x<320 and y>=0 and y<240 do
// end of level -> move right
x:=x+1;
n:=n+1;
level:=level+2;
if isprime(n) then pixon_p(x,y,#FFFFFFh); end;
// move up
for i from 3 to level do
y:=y-1;
n:=n+1;
if isprime(n) then pixon_p(x,y,#FFFFFFh); end;
end;
// move left
for i from 2 to level do
x:=x-1;
n:=n+1;
if isprime(n) then pixon_p(x,y,#FFFFFFh); end;
end;
// move down
for i from 2 to level do
y:=y+1;
n:=n+1;
if isprime(n) then pixon_p(x,y,#FFFFFFh); end;
end;
// move right
for i from 2 to level do
x:=x+1;
n:=n+1;
if isprime(n) then pixon_p(x,y,#FFFFFFh); end;
end;
end;
freeze;
END;
And here is the Sacks version (note: why do I have to use approx???)
Code:
EXPORT Sacks()
BEGIN
local r, a, n, x, y;
rect_p(0);
n:=0;
while x>=0 and x<320 and y>=0 and y<240 do
if isprime(n) then
r:=√n;
a:=r*2*π;
x:=approx(r*cos(a)+160);
y:=approx(120-r*sin(a));
pixon_p(x,y,#FFFFFF);
end;
n:=n+1;
end;
freeze;
END;
RE: Ulam spiral - Damien - 12-25-2013 01:09 PM
Posted by Gilles Carpentier on 22 July 2013, 5:38 p.m.
Code:
EXPORT Ulam
BEGIN
LOCAL a,b,xy:={160,120}, n:=1, m:=.9, d:={{1,0}, {0,1}, {-1,0}, {0,-1}};
RECT();
WHILE n<100000 DO
FOR a FROM 1 TO 4 DO
m:=m+.5;
FOR b FROM 1 TO m DO
IF isprime(n) THEN PIXON_P(xy,127);END;
xy:=xy+d(a);
n:=n+1;
END;
END;
END;
FREEZE;
END;
another one !
Regards,
Damien.
|