Calculates the Superformula for any angle Phi from Phi = 0 degree to Phi = 360 degrees. http://en.wikipedia.org/wiki/Superformula
Using these values the superformula should give a figure looking like a circle: a=b=1; n1, n2, n3 and m are equal to 2
How the code works
For quick input the values for n1, n2, n3 and m are preset with value 2 but can instead be overwritten if different.
Then in P0 the angle is set to 0 degree and is incremented by 1 at the ending of the program.
To obtain a full circle the Memory Register 06 ( MR06 ) is set to the end value " 360 ". (In run mode "MR06" is actually to enter to recall the memory register for register 06.)
The program generated coordinate pairs, as pasted and copied out of the printer simulation:
File Attach:sf.1.txt Δ :
+X= +Y= 1.0000 0.0000 0.9998 1.0000 0.9994 0.9998 0.9986 0.9994 0.9976 0.9986 0.9962 0.9976 0.9945 0.9962 ... 0.9986 0.9976 0.9994 0.9986 0.9998 0.9994
Here the angle Phi runs through a full rotation if register MR06 is set to the value 360.
The program file contains the two programs P0 and P1, that looks like this: Attach:SF360.pf Δ
***P0 MAC 0 Min0F 360 Min06 “N1?” PAUSE 2 HLT Min01 “N2?” PAUSE 2 HLT Min02 “N3?” PAUSE 2 HLT Min03 “M?” PAUSE 2 HLT Min44 1 Min08 1 Min09 “+X= +Y=” GSBP1 LBL0 MR0F × MR44 = ÷ 4 = Min05 cos ÷ MR08 = abs X^y MR02 = Min07 MR05 sin ÷ MR09 = abs X^y MR03 = M+07 MR07 X^y ( MR01 ± 1/x ) = P→R MR0F = FIX4 “; #” = X↔Y FIX4 “; #” GSBP1 0 Min07 1 M+0F MR06 x=F GOTO1 GOTO0 LBL1 “End.” ***P1 SAVE invEXE
While using the same variable names as in the Wikipedia article, the memory registers are set as follows:
M01 n1 M02 n2 M03 n3 M44 m M05 m*Phi/4 M06 361 M07 r M08 a M09 b M0F Phi
Here the simulator does not like M04 that I use M44. This requires to set the calculator into Mode .45 and will reduce the number of free program steps while more registers become available.
As it turns out the resulting data file does not respresent points on just one circle: The image shows a small elipse.
File Attach:sf360.gif Δ
To the developer
The display cannot hold both coordinates at the same time that the values are scrolled through which is very time consuming. I suggest you to code a switch in the simulator for allowing to turn off the display of to be printed values, while the display can show a counter value instead.