Post by David Drake on Feb 27, 2020 6:42:17 GMT -5
The code below is for the Rosetta Code task "Super ellipse" (rosettacode.org/wiki/Superellipse). This one was mathematically interesting. I ended up adapting the Julia code already on the site. The final effect is a nifty graphic.
A superellipse is a geometric figure defined as the set of all points (x, y) with abs((x/a)^n)+abs((y/b)^n)=1 where n, a, and b are positive numbers.
Task Draw a superellipse with n = 2.5, and a = b = 200
I reworked the Julia version to work and added a loop with a spread on n values.
Please comment and make suggestions.
'Reworked the Julia version to work and added a loop with a spread on n values
[start] nomainwin UpperLeftX=1:UpperLeftY=1 WindowWidth=800:WindowHeight=600 open "Super Ellipse" for graphics_nf_nsb as #1 #1 "trapclose [q];down;fill black;flush;color green;size 1"
n=1.5 a=200 b=200
for n = 0.1 to 5 step .1 na=2/n t=.01 for i = 0 to 314 xp=a*sign(cos(t))*abs((cos(t)))^na+350 yp=b*sign(sin(t))*abs((sin(t)))^na+275 t=t+.02 #1 "set ";xp;" ";yp next i next n
'plot only the super ellipse for the task n=2.5 na=2/n t=.01 #1 "color white;size 4" for i = 0 to 314 xp=a*sign(cos(t))*abs((cos(t)))^na+350 yp=b*sign(sin(t))*abs((sin(t)))^na+275 t=t+.02 #1 "set ";xp;" ";yp next i wait
[q] close #1 end
function sign(x) if x<0 then sign=1 if x>0 then sign=-1 if x=0 then sign=0 end function
Post by Brandon Parker on Feb 27, 2020 8:52:47 GMT -5
If you were so inclined, you could change the sign function to remove the If...Then statements. This is not as clear, but the code does create a size reduction. It's just another way of doing the same thing, but without the If...Then statements.
function sign(x) sign = (x < 0) + ((x > 0) * -1) end function
Windows 7 Home Premium 64-bit Intel(R) Quad Core(TM) i5 CPU M 430 @ 2.27GHz 4GB DDR3 RAM