Sierpinski curve: Difference between revisions
Content added Content deleted
m (→{{header|jq}}: typo) |
m (→{{header|Phix}}: syntax coloured, added online link) |
||
Line 928: | Line 928: | ||
=={{header|Phix}}== |
=={{header|Phix}}== |
||
{{libheader|Phix/pGUI}} |
{{libheader|Phix/pGUI}} |
||
{{libheader|Phix/online}} |
|||
<lang Phix>-- demo\rosetta\Sierpinski_curve.exw |
|||
You can run this online [http://phix.x10.mx/p2js/Sierpinski_curve.htm here]. |
|||
-- |
|||
<!--<lang Phix>(phixonline)--> |
|||
-- Draws curves lo to hi (simultaneously), initially {1,1}, max {8,8} |
|||
<span style="color: #000080;font-style:italic;">-- |
|||
-- Press +/- to change hi, shift +/- to change lo. |
|||
-- demo\rosetta\Sierpinski_curve.exw |
|||
-- ("=_" are also mapped to "+-", for the non-numpad +/-) |
|||
-- ================================= |
|||
-- |
|||
-- |
|||
include pGUI.e |
|||
-- Draws curves lo to hi (simultaneously), initially {1,1}, max {8,8} |
|||
-- Press +/- to change hi, shift +/- to change lo, ctrl +/- for both. |
|||
Ihandle dlg, canvas |
|||
-- ("=_" are also mapped to "+-", for the non-numpad +/-) |
|||
cdCanvas cddbuffer, cdcanvas |
|||
--</span> |
|||
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span> |
|||
integer width, height, |
|||
<span style="color: #008080;">include</span> <span style="color: #000000;">pGUI</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span> |
|||
lo = 1, hi = 1 |
|||
atom cx, cy, h |
|||
procedure lineTo(atom newX, newY) |
|||
cdCanvasVertex(cddbuffer, newX-width/2+h, height-newY+2*h) |
|||
cx = newX |
|||
cy = newY |
|||
end procedure |
|||
procedure lineN() lineTo(cx,cy-2*h) end procedure |
|||
procedure lineS() lineTo(cx,cy+2*h) end procedure |
|||
procedure lineE() lineTo(cx+2*h,cy) end procedure |
|||
procedure lineW() lineTo(cx-2*h,cy) end procedure |
|||
<span style="color: #004080;">Ihandle</span> <span style="color: #000000;">dlg</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">canvas</span> |
|||
procedure lineNW() lineTo(cx-h,cy-h) end procedure |
|||
<span style="color: #004080;">cdCanvas</span> <span style="color: #000000;">cddbuffer</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">cdcanvas</span> |
|||
procedure lineNE() lineTo(cx+h,cy-h) end procedure |
|||
procedure lineSE() lineTo(cx+h,cy+h) end procedure |
|||
procedure lineSW() lineTo(cx-h,cy+h) end procedure |
|||
procedure sierN(integer level) |
|||
if level=1 then |
|||
lineNE() lineN() |
|||
lineNW() |
|||
else |
|||
sierN(level-1) lineNE() |
|||
sierE(level-1) lineN() |
|||
sierW(level-1) lineNW() |
|||
sierN(level-1) |
|||
end if |
|||
end procedure |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">width</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">height</span><span style="color: #0000FF;">,</span> |
|||
procedure sierE(integer level) |
|||
<span style="color: #000000;">lm</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">tm</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- left and top margins</span> |
|||
if level=1 then |
|||
<span style="color: #000000;">lo</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">hi</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span> |
|||
lineSE() lineE() |
|||
<span style="color: #004080;">atom</span> <span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">cy</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h</span> |
|||
lineNE() |
|||
else |
|||
sierE(level-1) lineSE() |
|||
sierS(level-1) lineE() |
|||
sierN(level-1) lineNE() |
|||
sierE(level-1) |
|||
end if |
|||
end procedure |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">lineTo</span><span style="color: #0000FF;">(</span><span style="color: #004080;">atom</span> <span style="color: #000000;">newX</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">newY</span><span style="color: #0000FF;">)</span> |
|||
procedure sierS(integer level) |
|||
<span style="color: #7060A8;">cdCanvasVertex</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cddbuffer</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">newX</span><span style="color: #0000FF;">-</span><span style="color: #000000;">width</span><span style="color: #0000FF;">/</span><span style="color: #000000;">2</span><span style="color: #0000FF;">+</span><span style="color: #000000;">h</span><span style="color: #0000FF;">+</span><span style="color: #000000;">lm</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">height</span><span style="color: #0000FF;">-</span><span style="color: #000000;">newY</span><span style="color: #0000FF;">+</span><span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #000000;">h</span><span style="color: #0000FF;">+</span><span style="color: #000000;">tm</span><span style="color: #0000FF;">)</span> |
|||
if level=1 then |
|||
<span style="color: #000000;">cx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">newX</span> |
|||
lineSW() lineS() |
|||
<span style="color: #000000;">cy</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">newY</span> |
|||
lineSE() |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
else |
|||
sierS(level-1) lineSW() |
|||
sierW(level-1) lineS() |
|||
sierE(level-1) lineSE() |
|||
sierS(level-1) |
|||
end if |
|||
end procedure |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">lineN</span><span style="color: #0000FF;">()</span> <span style="color: #000000;">lineTo</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #000000;">h</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
procedure sierW(integer level) |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">lineS</span><span style="color: #0000FF;">()</span> <span style="color: #000000;">lineTo</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">+</span><span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #000000;">h</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
if level=1 then |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">lineE</span><span style="color: #0000FF;">()</span> <span style="color: #000000;">lineTo</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #000000;">h</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
lineNW() lineW() |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">lineW</span><span style="color: #0000FF;">()</span> <span style="color: #000000;">lineTo</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #000000;">h</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
lineSW() |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">lineNW</span><span style="color: #0000FF;">()</span> <span style="color: #000000;">lineTo</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">h</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">-</span><span style="color: #000000;">h</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
sierW(level-1) lineNW() |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">lineNE</span><span style="color: #0000FF;">()</span> <span style="color: #000000;">lineTo</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">h</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">-</span><span style="color: #000000;">h</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
sierN(level-1) lineW() |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">lineSE</span><span style="color: #0000FF;">()</span> <span style="color: #000000;">lineTo</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">h</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">+</span><span style="color: #000000;">h</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
sierS(level-1) lineSW() |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">lineSW</span><span style="color: #0000FF;">()</span> <span style="color: #000000;">lineTo</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">h</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">+</span><span style="color: #000000;">h</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
sierW(level-1) |
|||
end if |
|||
<span style="color: #008080;">forward</span> <span style="color: #008080;">procedure</span> <span style="color: #000000;">sierN</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">level</span><span style="color: #0000FF;">)</span> |
|||
end procedure |
|||
<span style="color: #008080;">forward</span> <span style="color: #008080;">procedure</span> <span style="color: #000000;">sierE</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">level</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">forward</span> <span style="color: #008080;">procedure</span> <span style="color: #000000;">sierS</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">level</span><span style="color: #0000FF;">)</span> |
|||
procedure sierpinskiCurve(integer level) |
|||
<span style="color: #008080;">forward</span> <span style="color: #008080;">procedure</span> <span style="color: #000000;">sierW</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">level</span><span style="color: #0000FF;">)</span> |
|||
sierN(level) lineNE() |
|||
sierE(level) lineSE() |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">sierN</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">level</span><span style="color: #0000FF;">)</span> |
|||
sierS(level) lineSW() |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">level</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span> |
|||
sierW(level) lineNW() |
|||
<span style="color: #000000;">lineNE</span><span style="color: #0000FF;">()</span> <span style="color: #000000;">lineN</span><span style="color: #0000FF;">()</span> |
|||
end procedure |
|||
<span style="color: #000000;">lineNW</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #008080;">else</span> |
|||
function redraw_cb(Ihandle /*ih*/, integer /*posx*/, integer /*posy*/) |
|||
<span style="color: #000000;">sierN</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #000000;">lineNE</span><span style="color: #0000FF;">()</span> |
|||
{width, height} = IupGetIntInt(canvas, "DRAWSIZE") |
|||
<span style="color: #000000;">sierE</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #000000;">lineN</span><span style="color: #0000FF;">()</span> |
|||
cdCanvasActivate(cddbuffer) |
|||
<span style="color: #000000;">sierW</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #000000;">lineNW</span><span style="color: #0000FF;">()</span> |
|||
for level=lo to hi do |
|||
<span style="color: #000000;">sierN</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> |
|||
cx = width/2 |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
cy = height |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
h = cx/power(2,level+1) |
|||
cdCanvasBegin(cddbuffer, CD_CLOSED_LINES) |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">sierE</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">level</span><span style="color: #0000FF;">)</span> |
|||
sierpinskiCurve(level) |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">level</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span> |
|||
cdCanvasEnd(cddbuffer) |
|||
<span style="color: #000000;">lineSE</span><span style="color: #0000FF;">()</span> <span style="color: #000000;">lineE</span><span style="color: #0000FF;">()</span> |
|||
end for |
|||
<span style="color: #000000;">lineNE</span><span style="color: #0000FF;">()</span> |
|||
cdCanvasFlush(cddbuffer) |
|||
<span style="color: #008080;">else</span> |
|||
return IUP_DEFAULT |
|||
<span style="color: #000000;">sierE</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #000000;">lineSE</span><span style="color: #0000FF;">()</span> |
|||
end function |
|||
<span style="color: #000000;">sierS</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #000000;">lineE</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #000000;">sierN</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #000000;">lineNE</span><span style="color: #0000FF;">()</span> |
|||
function map_cb(Ihandle ih) |
|||
<span style="color: #000000;">sierE</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> |
|||
cdcanvas = cdCreateCanvas(CD_IUP, ih) |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
cddbuffer = cdCreateCanvas(CD_DBUFFER, cdcanvas) |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
cdCanvasSetBackground(cddbuffer, CD_WHITE) |
|||
cdCanvasSetForeground(cddbuffer, CD_BLUE) |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">sierS</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">level</span><span style="color: #0000FF;">)</span> |
|||
return IUP_DEFAULT |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">level</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span> |
|||
end function |
|||
<span style="color: #000000;">lineSW</span><span style="color: #0000FF;">()</span> <span style="color: #000000;">lineS</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #000000;">lineSE</span><span style="color: #0000FF;">()</span> |
|||
function key_cb(Ihandle /*ih*/, atom c) |
|||
<span style="color: #008080;">else</span> |
|||
if c=K_ESC then return IUP_CLOSE end if |
|||
<span style="color: #000000;">sierS</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #000000;">lineSW</span><span style="color: #0000FF;">()</span> |
|||
if find(c,"+=-_") then |
|||
<span style="color: #000000;">sierW</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #000000;">lineS</span><span style="color: #0000FF;">()</span> |
|||
bool bShift = IupGetInt(NULL,"SHIFTKEY") |
|||
<span style="color: #000000;">sierE</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #000000;">lineSE</span><span style="color: #0000FF;">()</span> |
|||
if c='+' or c='=' then |
|||
<span style="color: #000000;">sierS</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> |
|||
if bShift then |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
lo = min(lo+1,hi) |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
else |
|||
hi = min(8,hi+1) |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">sierW</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">level</span><span style="color: #0000FF;">)</span> |
|||
end if |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">level</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span> |
|||
elsif c='-' or c='_' then |
|||
<span style="color: #000000;">lineNW</span><span style="color: #0000FF;">()</span> <span style="color: #000000;">lineW</span><span style="color: #0000FF;">()</span> |
|||
if bShift then |
|||
<span style="color: #000000;">lineSW</span><span style="color: #0000FF;">()</span> |
|||
lo = max(1,lo-1) |
|||
<span style="color: #008080;">else</span> |
|||
<span style="color: #000000;">sierW</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #000000;">lineNW</span><span style="color: #0000FF;">()</span> |
|||
hi = max(lo,hi-1) |
|||
<span style="color: #000000;">sierN</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #000000;">lineW</span><span style="color: #0000FF;">()</span> |
|||
end if |
|||
<span style="color: #000000;">sierS</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #000000;">lineSW</span><span style="color: #0000FF;">()</span> |
|||
end if |
|||
<span style="color: #000000;">sierW</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> |
|||
IupSetStrAttribute(dlg, "TITLE", "Sierpinski curve (%d..%d)",{lo,hi}) |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
cdCanvasClear(cddbuffer) |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
IupUpdate(canvas) |
|||
end if |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">sierpinskiCurve</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">level</span><span style="color: #0000FF;">)</span> |
|||
return IUP_CONTINUE |
|||
<span style="color: #000000;">sierN</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">)</span> <span style="color: #000000;">lineNE</span><span style="color: #0000FF;">()</span> |
|||
end function |
|||
<span style="color: #000000;">sierE</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">)</span> <span style="color: #000000;">lineSE</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #000000;">sierS</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">)</span> <span style="color: #000000;">lineSW</span><span style="color: #0000FF;">()</span> |
|||
procedure main() |
|||
<span style="color: #000000;">sierW</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">)</span> <span style="color: #000000;">lineNW</span><span style="color: #0000FF;">()</span> |
|||
IupOpen() |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
canvas = IupCanvas(NULL) |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">redraw_cb</span><span style="color: #0000FF;">(</span><span style="color: #004080;">Ihandle</span> <span style="color: #000080;font-style:italic;">/*ih*/</span><span style="color: #0000FF;">)</span> |
|||
IupSetAttribute(canvas, "RASTERSIZE", "770x770") |
|||
<span style="color: #0000FF;">{</span><span style="color: #000000;">width</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">height</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupGetIntInt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">canvas</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"DRAWSIZE"</span><span style="color: #0000FF;">)</span> |
|||
IupSetCallback(canvas, "MAP_CB", Icallback("map_cb")) |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">width</span><span style="color: #0000FF;">></span><span style="color: #000000;">height</span> <span style="color: #008080;">then</span> |
|||
IupSetCallback(canvas, "ACTION", Icallback("redraw_cb")) |
|||
<span style="color: #000000;">lm</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">floor</span><span style="color: #0000FF;">((</span><span style="color: #000000;">width</span><span style="color: #0000FF;">-</span><span style="color: #000000;">height</span><span style="color: #0000FF;">)/</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #000000;">tm</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span> |
|||
dlg = IupDialog(canvas) |
|||
<span style="color: #000000;">width</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">height</span> |
|||
IupSetAttribute(dlg, "TITLE", "Sierpinski curve (1..1)") |
|||
<span style="color: #008080;">else</span> |
|||
IupSetCallback(dlg, "K_ANY", Icallback("key_cb")) |
|||
<span style="color: #000000;">lm</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span> |
|||
<span style="color: #000000;">tm</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">floor</span><span style="color: #0000FF;">((</span><span style="color: #000000;">height</span><span style="color: #0000FF;">-</span><span style="color: #000000;">width</span><span style="color: #0000FF;">)/</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)</span> |
|||
IupMap(dlg) |
|||
<span style="color: #000000;">height</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">width</span> |
|||
IupShowXY(dlg,IUP_CENTER,IUP_CENTER) |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
IupMainLoop() |
|||
<span style="color: #7060A8;">cdCanvasActivate</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cddbuffer</span><span style="color: #0000FF;">)</span> |
|||
IupClose() |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">level</span><span style="color: #0000FF;">=</span><span style="color: #000000;">lo</span> <span style="color: #008080;">to</span> <span style="color: #000000;">hi</span> <span style="color: #008080;">do</span> |
|||
end procedure |
|||
<span style="color: #000000;">cx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">width</span><span style="color: #0000FF;">/</span><span style="color: #000000;">2</span> |
|||
<span style="color: #000000;">cy</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">height</span> |
|||
main()</lang> |
|||
<span style="color: #000000;">h</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">cx</span><span style="color: #0000FF;">/</span><span style="color: #7060A8;">power</span><span style="color: #0000FF;">(</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">level</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasBegin</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cddbuffer</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CD_CLOSED_LINES</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #000000;">sierpinskiCurve</span><span style="color: #0000FF;">(</span><span style="color: #000000;">level</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasEnd</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cddbuffer</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<span style="color: #7060A8;">cdCanvasFlush</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cddbuffer</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #004600;">IUP_DEFAULT</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">map_cb</span><span style="color: #0000FF;">(</span><span style="color: #004080;">Ihandle</span> <span style="color: #000000;">ih</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #000000;">cdcanvas</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">cdCreateCanvas</span><span style="color: #0000FF;">(</span><span style="color: #004600;">CD_IUP</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">ih</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #000000;">cddbuffer</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">cdCreateCanvas</span><span style="color: #0000FF;">(</span><span style="color: #004600;">CD_DBUFFER</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">cdcanvas</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasSetBackground</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cddbuffer</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CD_WHITE</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">cdCanvasSetForeground</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cddbuffer</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">CD_BLUE</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #004600;">IUP_DEFAULT</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">set_dlg_title</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #7060A8;">IupSetStrAttribute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dlg</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"TITLE"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Sierpinski curve (%d..%d)"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">lo</span><span style="color: #0000FF;">,</span><span style="color: #000000;">hi</span><span style="color: #0000FF;">})</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">key_cb</span><span style="color: #0000FF;">(</span><span style="color: #004080;">Ihandle</span> <span style="color: #000080;font-style:italic;">/*ih*/</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=</span><span style="color: #004600;">K_ESC</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #004600;">IUP_CLOSE</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=</span><span style="color: #004600;">K_F5</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #004600;">IUP_DEFAULT</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> <span style="color: #000080;font-style:italic;">-- (let browser reload work)</span> |
|||
<span style="color: #000000;">c</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">iup_XkeyBase</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"+=-_"</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #004080;">bool</span> <span style="color: #000000;">bCtrl</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupGetInt</span><span style="color: #0000FF;">(</span><span style="color: #004600;">NULL</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"CONTROLKEY"</span><span style="color: #0000FF;">),</span> |
|||
<span style="color: #000000;">bShift</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupGetInt</span><span style="color: #0000FF;">(</span><span style="color: #004600;">NULL</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"SHIFTKEY"</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'+'</span> <span style="color: #008080;">or</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'='</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">bCtrl</span> <span style="color: #008080;">or</span> <span style="color: #008080;">not</span> <span style="color: #000000;">bShift</span> <span style="color: #008080;">then</span> <span style="color: #000000;">hi</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">min</span><span style="color: #0000FF;">(</span><span style="color: #000000;">8</span><span style="color: #0000FF;">,</span><span style="color: #000000;">hi</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">bCtrl</span> <span style="color: #008080;">or</span> <span style="color: #000000;">bShift</span> <span style="color: #008080;">then</span> <span style="color: #000000;">lo</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">min</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lo</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">hi</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">elsif</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'-'</span> <span style="color: #008080;">or</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'_'</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">bCtrl</span> <span style="color: #008080;">or</span> <span style="color: #000000;">bShift</span> <span style="color: #008080;">then</span> <span style="color: #000000;">lo</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">max</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">lo</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">bCtrl</span> <span style="color: #008080;">or</span> <span style="color: #008080;">not</span> <span style="color: #000000;">bShift</span> <span style="color: #008080;">then</span> <span style="color: #000000;">hi</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">max</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lo</span><span style="color: #0000FF;">,</span><span style="color: #000000;">hi</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #000000;">set_dlg_title</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #7060A8;">cdCanvasClear</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cddbuffer</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">IupUpdate</span><span style="color: #0000FF;">(</span><span style="color: #000000;">canvas</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #004600;">IUP_CONTINUE</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">main</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #7060A8;">IupOpen</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #000000;">canvas</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupCanvas</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"RASTERSIZE=770x770"</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">IupSetCallbacks</span><span style="color: #0000FF;">(</span><span style="color: #000000;">canvas</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"MAP_CB"</span><span style="color: #0000FF;">,</span> <span style="color: #7060A8;">Icallback</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"map_cb"</span><span style="color: #0000FF;">),</span> |
|||
<span style="color: #008000;">"ACTION"</span><span style="color: #0000FF;">,</span> <span style="color: #7060A8;">Icallback</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"redraw_cb"</span><span style="color: #0000FF;">)})</span> |
|||
<span style="color: #000000;">dlg</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">IupDialog</span><span style="color: #0000FF;">(</span><span style="color: #000000;">canvas</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">IupSetCallback</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dlg</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"KEY_CB"</span><span style="color: #0000FF;">,</span> <span style="color: #7060A8;">Icallback</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"key_cb"</span><span style="color: #0000FF;">))</span> |
|||
<span style="color: #000000;">set_dlg_title</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #7060A8;">IupShow</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dlg</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">IupSetAttribute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">canvas</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"RASTERSIZE"</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">NULL</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()!=</span><span style="color: #004600;">JS</span> <span style="color: #008080;">then</span> |
|||
<span style="color: #7060A8;">IupMainLoop</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #7060A8;">IupClose</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
<span style="color: #000000;">main</span><span style="color: #0000FF;">()</span> |
|||
<!--</lang>--> |
|||
=={{header|Processing}}== |
=={{header|Processing}}== |