Chaos game: Difference between revisions

Content added Content deleted
(implementation in Forth)
m (syntax highlighting fixup automation)
Line 21: Line 21:
This program will run on a PC with CGA-compatible graphics. It will keep running until a key is pressed.
This program will run on a PC with CGA-compatible graphics. It will keep running until a key is pressed.


<lang asm> cpu 8086
<syntaxhighlight lang=asm> cpu 8086
bits 16
bits 16
vmode: equ 0Fh ; Get current video mode
vmode: equ 0Fh ; Get current video mode
Line 142: Line 142:
xchg bx,bp ; Restore the registers
xchg bx,bp ; Restore the registers
xchg cx,di
xchg cx,di
ret</lang>
ret</syntaxhighlight>


=={{header|Action!}}==
=={{header|Action!}}==
<lang Action!>PROC Main()
<syntaxhighlight lang=Action!>PROC Main()
INT x,w=[220],h=[190]
INT x,w=[220],h=[190]
BYTE y,i,CH=$02FC,COLOR1=$02C5,COLOR2=$02C6
BYTE y,i,CH=$02FC,COLOR1=$02C5,COLOR2=$02C6
Line 172: Line 172:
OD
OD
CH=$FF
CH=$FF
RETURN</lang>
RETURN</syntaxhighlight>
{{out}}
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Chaos_game.png Screenshot from Atari 8-bit computer]
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Chaos_game.png Screenshot from Atari 8-bit computer]
Line 179: Line 179:
{{trans|BASIC256}}
{{trans|BASIC256}}
<p>Considerar que Hopper no usa modos gráficos, y solo imprime el caracter ascii 219 achicando el tamaño de caracteres de la terminal, dado la ilusión de un modo gráfico "arcaico".</p>
<p>Considerar que Hopper no usa modos gráficos, y solo imprime el caracter ascii 219 achicando el tamaño de caracteres de la terminal, dado la ilusión de un modo gráfico "arcaico".</p>
<lang Amazing Hopper>
<syntaxhighlight lang=Amazing Hopper>
/* Chaos game - JAMBO hopper */
/* Chaos game - JAMBO hopper */


Line 226: Line 226:
Set video text
Set video text
End
End
</syntaxhighlight>
</lang>




=={{header|BASIC}}==
=={{header|BASIC}}==
This should require minimal adaptation to work with any of the older Microsoft-style BASICs. Users of other dialects will need to replace lines <tt>10</tt> and <tt>150</tt> with the appropriate statements to select a graphics output mode (if necessary) and to plot a pixel at <tt>x,y</tt> in colour <tt>v</tt>; they should also add <tt>LET</tt> throughout and <tt>170 END</tt> if their dialects require those things.
This should require minimal adaptation to work with any of the older Microsoft-style BASICs. Users of other dialects will need to replace lines <tt>10</tt> and <tt>150</tt> with the appropriate statements to select a graphics output mode (if necessary) and to plot a pixel at <tt>x,y</tt> in colour <tt>v</tt>; they should also add <tt>LET</tt> throughout and <tt>170 END</tt> if their dialects require those things.
<lang basic>10 SCREEN 1
<syntaxhighlight lang=basic>10 SCREEN 1
20 X = INT(RND(0) * 200)
20 X = INT(RND(0) * 200)
30 Y = INT(RND(0) * 173)
30 Y = INT(RND(0) * 173)
Line 246: Line 246:
140 Y = Y/2
140 Y = Y/2
150 PSET X,Y,V
150 PSET X,Y,V
160 NEXT I</lang>
160 NEXT I</syntaxhighlight>
==={{header|Applesoft BASIC}}===
==={{header|Applesoft BASIC}}===
Adapted from the code given above.
Adapted from the code given above.
<lang basic>10 HGR2
<syntaxhighlight lang=basic>10 HGR2
20 X = INT(RND(1) * 200)
20 X = INT(RND(1) * 200)
30 Y = INT(RND(1) * 173)
30 Y = INT(RND(1) * 173)
Line 265: Line 265:
150 HCOLOR=V+4
150 HCOLOR=V+4
160 HPLOT X,Y
160 HPLOT X,Y
170 NEXT I</lang>
170 NEXT I</syntaxhighlight>


==={{header|BASIC256}}===
==={{header|BASIC256}}===
<lang BASIC256>
<syntaxhighlight lang=BASIC256>
#Chaos game
#Chaos game


Line 301: Line 301:
ImgSave "chaos_game.jpg", "jpg"
ImgSave "chaos_game.jpg", "jpg"
End
End
</syntaxhighlight>
</lang>


==={{header|Locomotive Basic}}===
==={{header|Locomotive Basic}}===
Adapted from the generic BASIC version. In [https://benchmarko.github.io/CPCBasic/cpcbasic.html CPCBasic] this program completes in less than a second. But on a real CPC (or equivalent emulator), the same program takes over six minutes to run. So using CPCBasic is strongly advised. On CPCBasic, one can also use "mode 3" instead of mode 1 in line 10 and increase iterations to e.g. 2000000 in line 40, resulting in a higher-resolution image.
Adapted from the generic BASIC version. In [https://benchmarko.github.io/CPCBasic/cpcbasic.html CPCBasic] this program completes in less than a second. But on a real CPC (or equivalent emulator), the same program takes over six minutes to run. So using CPCBasic is strongly advised. On CPCBasic, one can also use "mode 3" instead of mode 1 in line 10 and increase iterations to e.g. 2000000 in line 40, resulting in a higher-resolution image.
<lang locobasic>10 mode 1:randomize time:defint a-z
<syntaxhighlight lang=locobasic>10 mode 1:randomize time:defint a-z
20 x = 640 * rnd
20 x = 640 * rnd
30 y = 400 * rnd
30 y = 400 * rnd
Line 320: Line 320:
140 y = y/2
140 y = y/2
150 plot x,y,v
150 plot x,y,v
160 next i</lang>
160 next i</syntaxhighlight>


==={{header|Sinclair ZX81 BASIC}}===
==={{header|Sinclair ZX81 BASIC}}===
Line 326: Line 326:


Note that ZX81 BASIC does not have an explicit computed <code>GOTO</code>; we can, however, actually compute the value of an expression and then <code>GOTO</code> it as a line number.
Note that ZX81 BASIC does not have an explicit computed <code>GOTO</code>; we can, however, actually compute the value of an expression and then <code>GOTO</code> it as a line number.
<lang basic> 10 LET X=RND*46
<syntaxhighlight lang=basic> 10 LET X=RND*46
20 LET Y=RND*40
20 LET Y=RND*40
30 FOR I=1 TO 5000
30 FOR I=1 TO 5000
Line 340: Line 340:
130 LET Y=Y/2
130 LET Y=Y/2
140 PLOT X,42-Y
140 PLOT X,42-Y
150 NEXT I</lang>
150 NEXT I</syntaxhighlight>
{{out}}
{{out}}
Screenshot [http://www.edmundgriffiths.com/zx81chaosgame.jpg here]. As with most ZX81 graphics, you can obtain the very best results by making it quite small and looking at it from a long way away.
Screenshot [http://www.edmundgriffiths.com/zx81chaosgame.jpg here]. As with most ZX81 graphics, you can obtain the very best results by making it quite small and looking at it from a long way away.
Line 346: Line 346:
==={{header|ZX Spectrum Basic}}===
==={{header|ZX Spectrum Basic}}===
The final <code>INK</code> statement sets the foreground colour back to black.
The final <code>INK</code> statement sets the foreground colour back to black.
<lang basic> 10 LET x=RND*200
<syntaxhighlight lang=basic> 10 LET x=RND*200
20 LET y=RND*173
20 LET y=RND*173
30 FOR i=1 TO 20000
30 FOR i=1 TO 20000
Line 363: Line 363:
160 PLOT x,y
160 PLOT x,y
170 NEXT i
170 NEXT i
180 INK 0</lang>
180 INK 0</syntaxhighlight>


=={{header|C}}==
=={{header|C}}==
Line 369: Line 369:
Interactive code which asks the side length of the starting triangle and number of iterations as inputs, a larger number of iterations produces a more accurate approximation of the Sierpinski fractal. Requires the [http://www.cs.colorado.edu/~main/bgi/cs1300/ WinBGIm] library.
Interactive code which asks the side length of the starting triangle and number of iterations as inputs, a larger number of iterations produces a more accurate approximation of the Sierpinski fractal. Requires the [http://www.cs.colorado.edu/~main/bgi/cs1300/ WinBGIm] library.


<syntaxhighlight lang=C>
<lang C>
#include<graphics.h>
#include<graphics.h>
#include<stdlib.h>
#include<stdlib.h>
Line 421: Line 421:
return 0;
return 0;
}</lang>
}</syntaxhighlight>


=={{header|C sharp|C#}}==
=={{header|C sharp|C#}}==


<lang csharp>using System.Diagnostics;
<syntaxhighlight lang=csharp>using System.Diagnostics;
using System.Drawing;
using System.Drawing;


Line 455: Line 455:
}
}
}
}
}</lang>
}</syntaxhighlight>


=={{header|C++}}==
=={{header|C++}}==
This program will generate the Sierpinski Triangle and save it to your hard drive.
This program will generate the Sierpinski Triangle and save it to your hard drive.
<lang cpp>
<syntaxhighlight lang=cpp>
#include <windows.h>
#include <windows.h>
#include <ctime>
#include <ctime>
Line 608: Line 608:
return 0;
return 0;
}
}
</syntaxhighlight>
</lang>


=={{header|Common Lisp}}==
=={{header|Common Lisp}}==
{{libheader|opticl}}
{{libheader|opticl}}
<lang lisp>(defpackage #:chaos
<syntaxhighlight lang=lisp>(defpackage #:chaos
(:use #:cl
(:use #:cl
#:opticl))
#:opticl))
Line 640: Line 640:
(setf (pixel image (first point) (second point))
(setf (pixel image (first point) (second point))
(values 255 0 0)))
(values 255 0 0)))
(write-png-file "chaos.png" image)))</lang>
(write-png-file "chaos.png" image)))</syntaxhighlight>
=={{header|Delphi}}==
=={{header|Delphi}}==
{{libheader| Winapi.Windows}}
{{libheader| Winapi.Windows}}
Line 648: Line 648:
{{libheader| Vcl.ExtCtrls}}
{{libheader| Vcl.ExtCtrls}}
{{libheader| System.Generics.Collections}}
{{libheader| System.Generics.Collections}}
<lang Delphi>
<syntaxhighlight lang=Delphi>
unit main;
unit main;


Line 768: Line 768:
end;
end;
end;
end;
end.</lang>
end.</syntaxhighlight>
=={{header|EasyLang}}==
=={{header|EasyLang}}==


[https://easylang.online/apps/_chaos-game.html Run it]
[https://easylang.online/apps/_chaos-game.html Run it]


<lang>color 900
<syntaxhighlight lang=text>color 900
x[] = [ 0 100 50 ]
x[] = [ 0 100 50 ]
y[] = [ 93 93 7 ]
y[] = [ 93 93 7 ]
Line 784: Line 784:
x = (x + x[h]) / 2
x = (x + x[h]) / 2
y = (y + y[h]) / 2
y = (y + y[h]) / 2
.</lang>
.</syntaxhighlight>


=={{header|Emacs Lisp}}==
=={{header|Emacs Lisp}}==
<lang lisp>; Chaos game
<syntaxhighlight lang=lisp>; Chaos game


(defun make-array (size)
(defun make-array (size)
Line 838: Line 838:
(chaos-show arr size)))
(chaos-show arr size)))


(chaos 400 180 50000) </lang>
(chaos 400 180 50000) </syntaxhighlight>


=={{header|F Sharp|F#}}==
=={{header|F Sharp|F#}}==
<lang fsharp>
<syntaxhighlight lang=fsharp>
open System.Windows.Forms
open System.Windows.Forms
open System.Drawing
open System.Drawing
Line 865: Line 865:
f.Paint.Add (fun args -> args.Graphics.DrawImage(bmp, Point(0, 0)))
f.Paint.Add (fun args -> args.Graphics.DrawImage(bmp, Point(0, 0)))
f.Show()
f.Show()
</syntaxhighlight>
</lang>


=={{header|Fortran}}==
=={{header|Fortran}}==
This FORTRAN code creates an output file which can be drawn with gnuplot.
This FORTRAN code creates an output file which can be drawn with gnuplot.
<lang Fortran>
<syntaxhighlight lang=Fortran>
PROGRAM CHAOS
PROGRAM CHAOS
IMPLICIT NONE
IMPLICIT NONE
Line 913: Line 913:
END FUNCTION ZAHL
END FUNCTION ZAHL
END PROGRAM CHAOS
END PROGRAM CHAOS
</syntaxhighlight>
</lang>
Gnuplot Code to draw file:
Gnuplot Code to draw file:
<lang Gnuplot>
<syntaxhighlight lang=Gnuplot>
set terminal jpeg enhanced size 1600,960
set terminal jpeg enhanced size 1600,960
set output 'chaos.jpg'
set output 'chaos.jpg'
Line 921: Line 921:
set style line 1 lc rgb '#0060ad' lt 1 lw 3 pt 7 ps 0.3
set style line 1 lc rgb '#0060ad' lt 1 lw 3 pt 7 ps 0.3
plot 'aus.csv' using 1:3 with points ls 1 notitle
plot 'aus.csv' using 1:3 with points ls 1 notitle
</syntaxhighlight>
</lang>


=={{header|FreeBASIC}}==
=={{header|FreeBASIC}}==
{{trans|BASIC256}}
{{trans|BASIC256}}
<lang freebasic>
<syntaxhighlight lang=freebasic>
' Chaos game
' Chaos game
Const ancho = 320, alto = 240
Const ancho = 320, alto = 240
Line 955: Line 955:
Sleep
Sleep
End
End
</syntaxhighlight>
</lang>


=={{header|Fōrmulæ}}==
=={{header|Fōrmulæ}}==
Line 968: Line 968:
{{works with|gforth|0.7.3}}
{{works with|gforth|0.7.3}}
<br>
<br>
<lang forth>#! /usr/bin/gforth
<syntaxhighlight lang=forth>#! /usr/bin/gforth
\ Chaos Game
\ Chaos Game


Line 1,109: Line 1,109:
STEPS game OUT-FILE to-pbm
STEPS game OUT-FILE to-pbm


bye</lang>
bye</syntaxhighlight>


{{out}}
{{out}}
Line 1,121: Line 1,121:


'''"Game" Object Create Event:'''
'''"Game" Object Create Event:'''
<lang GML>offset = 32; //Distance from triangle vertices to edges of window
<syntaxhighlight lang=GML>offset = 32; //Distance from triangle vertices to edges of window


//triangle vertex coordinates
//triangle vertex coordinates
Line 1,151: Line 1,151:
step_count = 0;
step_count = 0;
interval = 1; //Number of frames between each step. 1 = no delay
interval = 1; //Number of frames between each step. 1 = no delay
alarm[0] = interval;</lang>
alarm[0] = interval;</syntaxhighlight>




'''"Game" Object Step Event:'''
'''"Game" Object Step Event:'''
<lang GML>if(step and step_count < max_iterations) //Wait for alarm to finish, or stop completely
<syntaxhighlight lang=GML>if(step and step_count < max_iterations) //Wait for alarm to finish, or stop completely
{ // if the desired number of iterations is hit
{ // if the desired number of iterations is hit
vertex = choose(1, 2, 3);
vertex = choose(1, 2, 3);
Line 1,188: Line 1,188:
step_count++;
step_count++;
}</lang>
}</syntaxhighlight>




'''"Game" Object Draw Event:'''
'''"Game" Object Draw Event:'''
<lang GML>if(step_count < max_iterations)
<syntaxhighlight lang=GML>if(step_count < max_iterations)
{
{
draw_triangle(x1, y1, x2, y2, x3, y3, true);
draw_triangle(x1, y1, x2, y2, x3, y3, true);
draw_circle(px, py, 1, false);
draw_circle(px, py, 1, false);
draw_line(px, py, vx, vy);
draw_line(px, py, vx, vy);
}</lang>
}</syntaxhighlight>




'''"Game" Object Alarm 0:'''
'''"Game" Object Alarm 0:'''
<lang GML>step = true;
<syntaxhighlight lang=GML>step = true;
alarm[0] = interval;</lang>
alarm[0] = interval;</syntaxhighlight>




'''"Point" Object Draw Event:'''
'''"Point" Object Draw Event:'''
<lang GML>draw_circle(x, y, 5, false);</lang>
<syntaxhighlight lang=GML>draw_circle(x, y, 5, false);</syntaxhighlight>


=={{header|Gnuplot}}==
=={{header|Gnuplot}}==
Line 1,213: Line 1,213:
[[File:ChGS3Gnu1.png|right|thumb|Output ChGS3Gnu1.png]]
[[File:ChGS3Gnu1.png|right|thumb|Output ChGS3Gnu1.png]]


<lang gnuplot>
<syntaxhighlight lang=gnuplot>
## Chaos Game (Sierpinski triangle) 2/16/17 aev
## Chaos Game (Sierpinski triangle) 2/16/17 aev
reset
reset
Line 1,241: Line 1,241:
set output
set output
unset print
unset print
</syntaxhighlight>
</lang>
{{Output}}
{{Output}}
<pre>
<pre>
Line 1,249: Line 1,249:
=={{header|Go}}==
=={{header|Go}}==
This writes a simple GIF animation of the method.
This writes a simple GIF animation of the method.
<lang Go>package main
<syntaxhighlight lang=Go>package main


import (
import (
Line 1,353: Line 1,353:
}
}
return err
return err
}</lang>
}</syntaxhighlight>


=={{header|Groovy}}==
=={{header|Groovy}}==
Line 1,359: Line 1,359:
{{libheader|JavaFX}}
{{libheader|JavaFX}}


<lang Groovy>import javafx.animation.AnimationTimer
<syntaxhighlight lang=Groovy>import javafx.animation.AnimationTimer
import javafx.application.Application
import javafx.application.Application
import javafx.scene.Scene
import javafx.scene.Scene
Line 1,427: Line 1,427:
launch(ChaosGame)
launch(ChaosGame)
}
}
}</lang>
}</syntaxhighlight>


=={{header|Haskell}}==
=={{header|Haskell}}==


<lang haskell>import Control.Monad (replicateM)
<syntaxhighlight lang=haskell>import Control.Monad (replicateM)
import Control.Monad.Random (fromList)
import Control.Monad.Random (fromList)


Line 1,440: Line 1,440:
gameOfChaos :: MonadRandom m => Int -> Transformations -> Point -> m [Point]
gameOfChaos :: MonadRandom m => Int -> Transformations -> Point -> m [Point]
gameOfChaos n transformations x = iterateA (fromList transformations) x
gameOfChaos n transformations x = iterateA (fromList transformations) x
where iterateA f x = scanr ($) x <$> replicateM n f</lang>
where iterateA f x = scanr ($) x <$> replicateM n f</syntaxhighlight>


Some transformations:
Some transformations:


<lang haskell>-- the Sierpinsky`s triangle
<syntaxhighlight lang=haskell>-- the Sierpinsky`s triangle
triangle = [ (mid (0, 0), 1)
triangle = [ (mid (0, 0), 1)
, (mid (1, 0), 1)
, (mid (1, 0), 1)
Line 1,460: Line 1,460:
dragon = [(f1, 1), (f2, 1)]
dragon = [(f1, 1), (f2, 1)]
where f1 (x,y) = (0.5*x - 0.5*y, 0.5*x + 0.5*y)
where f1 (x,y) = (0.5*x - 0.5*y, 0.5*x + 0.5*y)
f2 (x,y) = (-0.5*x + 0.5*y+1, -0.5*x - 0.5*y)</lang>
f2 (x,y) = (-0.5*x + 0.5*y+1, -0.5*x - 0.5*y)</syntaxhighlight>


Drawing the result:
Drawing the result:
<lang haskell>import Control.Monad.Random (getRandomR)
<syntaxhighlight lang=haskell>import Control.Monad.Random (getRandomR)
import Graphics.Gloss
import Graphics.Gloss


Line 1,471: Line 1,471:
display window white $ foldMap point pts
display window white $ foldMap point pts
where window = InWindow "Game of Chaos" (400,400) (0,0)
where window = InWindow "Game of Chaos" (400,400) (0,0)
point (x,y) = translate (100*x) (100*y) $ circle 0.02 </lang>
point (x,y) = translate (100*x) (100*y) $ circle 0.02 </syntaxhighlight>


=={{header|J}}==
=={{header|J}}==
[[File:j_chaos_game.png|300px|thumb|right]]
[[File:j_chaos_game.png|300px|thumb|right]]
<syntaxhighlight lang=j>
<lang j>
Note 'plan, Working in complex plane'
Note 'plan, Working in complex plane'
Make an equilateral triangle.
Make an equilateral triangle.
Line 1,509: Line 1,509:


'marker'plot NEW_POINTS
'marker'plot NEW_POINTS
</syntaxhighlight>
</lang>


=={{header|Java}}==
=={{header|Java}}==
[[File:chaos_game.png|300px|thumb|right]]
[[File:chaos_game.png|300px|thumb|right]]
{{works with|Java|8}}
{{works with|Java|8}}
<lang java>import java.awt.*;
<syntaxhighlight lang=java>import java.awt.*;
import java.awt.event.*;
import java.awt.event.*;
import java.util.*;
import java.util.*;
Line 1,602: Line 1,602:
});
});
}
}
}</lang>
}</syntaxhighlight>


=={{header|JavaScript}}==
=={{header|JavaScript}}==
Plots the fractal on an HTML <tt>canvas</tt> element.
Plots the fractal on an HTML <tt>canvas</tt> element.
<lang javascript><html>
<syntaxhighlight lang=javascript><html>


<head>
<head>
Line 1,658: Line 1,658:
</body>
</body>


</html></lang>
</html></syntaxhighlight>


=={{header|Julia}}==
=={{header|Julia}}==
Run in REPL.
Run in REPL.
<lang julia>using Luxor
<syntaxhighlight lang=julia>using Luxor


function chaos()
function chaos()
Line 1,692: Line 1,692:
finish()
finish()
preview()
preview()
</syntaxhighlight>
</lang>


=={{header|Kotlin}}==
=={{header|Kotlin}}==
{{trans|Java}}
{{trans|Java}}
<lang scala>//Version 1.1.51
<syntaxhighlight lang=scala>//Version 1.1.51


import java.awt.*
import java.awt.*
Line 1,775: Line 1,775:
}
}
}
}
}</lang>
}</syntaxhighlight>


{{output}}
{{output}}
Line 1,783: Line 1,783:


=={{header|Logo}}==
=={{header|Logo}}==
<lang logo>to chaosgame :sidelength :iterations
<syntaxhighlight lang=logo>to chaosgame :sidelength :iterations
make "width :sidelength
make "width :sidelength
make "height (:sidelength/2 * sqrt 3)
make "height (:sidelength/2 * sqrt 3)
Line 1,811: Line 1,811:
]
]
hideturtle
hideturtle
end</lang>
end</syntaxhighlight>


=={{header|Lua}}==
=={{header|Lua}}==
Needs L&Ouml;VE 2d Engine
Needs L&Ouml;VE 2d Engine
<lang Lua>
<syntaxhighlight lang=Lua>
math.randomseed( os.time() )
math.randomseed( os.time() )
colors, orig = { { 255, 0, 0 }, { 0, 255, 0 }, { 0, 0, 255 } }, {}
colors, orig = { { 255, 0, 0 }, { 0, 255, 0 }, { 0, 0, 255 } }, {}
Line 1,856: Line 1,856:
love.graphics.draw( canvas )
love.graphics.draw( canvas )
end
end
</syntaxhighlight>
</lang>


=={{header|Maple}}==
=={{header|Maple}}==
<lang maple>chaosGame := proc(numPoints)
<syntaxhighlight lang=maple>chaosGame := proc(numPoints)
local points, i;
local points, i;
randomize();
randomize();
Line 1,876: Line 1,876:
plots:-display( seq([plots:-display([seq(point(points[i]), i = 1..j)])], j = 1..numelems(points) ), insequence=true);
plots:-display( seq([plots:-display([seq(point(points[i]), i = 1..j)])], j = 1..numelems(points) ), insequence=true);
end use;
end use;
end proc:</lang>
end proc:</syntaxhighlight>


=={{header|Mathematica}}/{{header|Wolfram Language}}==
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<lang Mathematica>points = 5000;
<syntaxhighlight lang=Mathematica>points = 5000;
a = {0, 0};
a = {0, 0};
b = {1, 0};
b = {1, 0};
Line 1,888: Line 1,888:
If[t == 0, d = Mean[{a, d}],
If[t == 0, d = Mean[{a, d}],
If[t == 1, d = Mean[{b, d}], d = Mean[{c, d}]]]; AppendTo[S, d]]
If[t == 1, d = Mean[{b, d}], d = Mean[{c, d}]]]; AppendTo[S, d]]
Graphics[Point[S]]</lang>
Graphics[Point[S]]</syntaxhighlight>


=={{header|Nim}}==
=={{header|Nim}}==
Line 1,894: Line 1,894:
{{libheader|rapid}}
{{libheader|rapid}}
The "rapid" library is no longer maintained and this program fails to compile with last available version.
The "rapid" library is no longer maintained and this program fails to compile with last available version.
<lang nim>import random
<syntaxhighlight lang=nim>import random


import rapid/gfx
import rapid/gfx
Line 1,930: Line 1,930:
ctx.noTexture()
ctx.noTexture()
update step:
update step:
discard</lang>
discard</syntaxhighlight>


==={{header|Using SDL}}===
==={{header|Using SDL}}===
{{libheader|SDL2}}
{{libheader|SDL2}}
<lang nim>## needs sdl2 ("nimble install sdl2")
<syntaxhighlight lang=nim>## needs sdl2 ("nimble install sdl2")


import sdl2, random
import sdl2, random
Line 1,990: Line 1,990:


destroy render
destroy render
destroy window</lang>
destroy window</syntaxhighlight>


==={{header|Writing result into an image}}===
==={{header|Writing result into an image}}===
{{libheader|imageman}}
{{libheader|imageman}}


<lang Nim>import math
<syntaxhighlight lang=Nim>import math
import random
import random


Line 2,071: Line 2,071:
p = ((p.x + T[idx].x) / 2, (p.y + T[idx].y) / 2)
p = ((p.x + T[idx].x) / 2, (p.y + T[idx].y) / 2)


image.savePNG("chaos_game.png", compression = 9)</lang>
image.savePNG("chaos_game.png", compression = 9)</syntaxhighlight>


=={{header|PARI/GP}}==
=={{header|PARI/GP}}==
Line 2,077: Line 2,077:
{{Works with|PARI/GP|2.9.1 and above}}
{{Works with|PARI/GP|2.9.1 and above}}
[[File:SierpTri1.png|right|thumb|Output SierpTri1.png]]
[[File:SierpTri1.png|right|thumb|Output SierpTri1.png]]
<lang parigp>
<syntaxhighlight lang=parigp>
\\ Chaos Game (Sierpinski triangle) 2/15/17 aev
\\ Chaos Game (Sierpinski triangle) 2/15/17 aev
pChaosGameS3(size,lim)={
pChaosGameS3(size,lim)={
Line 2,093: Line 2,093:
\\ Test:
\\ Test:
pChaosGameS3(600,30000); \\ SierpTri1.png
pChaosGameS3(600,30000); \\ SierpTri1.png
</lang>
</syntaxhighlight>
{{Output}}
{{Output}}
<pre>
<pre>
Line 2,102: Line 2,102:


=={{header|Pascal}}==
=={{header|Pascal}}==
<lang Pascal>
<syntaxhighlight lang=Pascal>
program ChaosGame;
program ChaosGame;


Line 2,180: Line 2,180:
end.
end.


</syntaxhighlight>
</lang>


=={{header|Perl}}==
=={{header|Perl}}==
<lang perl>use Imager;
<syntaxhighlight lang=perl>use Imager;


my $width = 1000;
my $width = 1000;
Line 2,220: Line 2,220:
}
}


$img->write(file => 'chaos_game_triangle.png');</lang>
$img->write(file => 'chaos_game_triangle.png');</syntaxhighlight>


=={{header|Phix}}==
=={{header|Phix}}==
Line 2,227: Line 2,227:
{{libheader|Phix/online}}
{{libheader|Phix/online}}
You can run this online [http://phix.x10.mx/p2js/chaos.htm here]. Press space to cycle through the five fractals.
You can run this online [http://phix.x10.mx/p2js/chaos.htm here]. Press space to cycle through the five fractals.
<!--<lang Phix>(phixonline)-->
<!--<syntaxhighlight lang=Phix>(phixonline)-->
<span style="color: #000080;font-style:italic;">--
<span style="color: #000080;font-style:italic;">--
-- demo\rosetta\Chaos_game.exw
-- demo\rosetta\Chaos_game.exw
Line 2,323: Line 2,323:
<span style="color: #000000;">main</span><span style="color: #0000FF;">()</span>
<span style="color: #000000;">main</span><span style="color: #0000FF;">()</span>
<!--</lang>-->
<!--</syntaxhighlight>-->


=={{header|Plain English}}==
=={{header|Plain English}}==
<lang plainenglish>To run:
<syntaxhighlight lang=plainenglish>To run:
Start up.
Start up.
Initialize our reference points.
Initialize our reference points.
Line 2,367: Line 2,367:
If the number is 1, put the top spot into the reference spot.
If the number is 1, put the top spot into the reference spot.
If the number is 2, put the right spot into the reference spot.
If the number is 2, put the right spot into the reference spot.
If the number is 3, put the left spot into the reference spot.</lang>
If the number is 3, put the left spot into the reference spot.</syntaxhighlight>
{{out}}
{{out}}
[https://commons.wikimedia.org/wiki/File:Chaos-game.png]
[https://commons.wikimedia.org/wiki/File:Chaos-game.png]


=={{header|Processing}}==
=={{header|Processing}}==
<lang java>size(300, 260);
<syntaxhighlight lang=java>size(300, 260);


background(#ffffff); // white
background(#ffffff); // white
Line 2,400: Line 2,400:
}
}
set(x, height-y, colour);
set(x, height-y, colour);
}</lang>
}</syntaxhighlight>


==={{header|Processing Python mode}}===
==={{header|Processing Python mode}}===


<lang python>from __future__ import division
<syntaxhighlight lang=python>from __future__ import division


size(300, 260)
size(300, 260)
Line 2,428: Line 2,428:
colour = color(0, 0, 255) # blue
colour = color(0, 0, 255) # blue


set(x, height - y, colour)</lang>
set(x, height - y, colour)</syntaxhighlight>


=={{header|Python}}==
=={{header|Python}}==


<lang Python>
<syntaxhighlight lang=Python>
import argparse
import argparse
import random
import random
Line 2,549: Line 2,549:
main(arg_parser.parse_args())
main(arg_parser.parse_args())


</syntaxhighlight>
</lang>


=={{header|R}}==
=={{header|R}}==
Line 2,556: Line 2,556:
{{Works with|R|3.3.1 and above}}
{{Works with|R|3.3.1 and above}}
[[File:SierpTriR1.png|right|thumb|Output SierpTriR1.png]]
[[File:SierpTriR1.png|right|thumb|Output SierpTriR1.png]]
<syntaxhighlight lang=r>
<lang r>
# Chaos Game (Sierpinski triangle) 2/15/17 aev
# Chaos Game (Sierpinski triangle) 2/15/17 aev
# pChaosGameS3(size, lim, clr, fn, ttl)
# pChaosGameS3(size, lim, clr, fn, ttl)
Line 2,580: Line 2,580:
}
}
pChaosGameS3(600, 30000, "red", "SierpTriR1", "Sierpinski triangle")
pChaosGameS3(600, 30000, "red", "SierpTriR1", "Sierpinski triangle")
</lang>
</syntaxhighlight>
{{Output}}
{{Output}}
<pre>
<pre>
Line 2,591: Line 2,591:
'''Alternative code:'''
'''Alternative code:'''


<syntaxhighlight lang=r>
<lang r>
pta = c(1,2)
pta = c(1,2)
ptb = c(4,2)
ptb = c(4,2)
Line 2,622: Line 2,622:
}
}
}
}
</syntaxhighlight>
</lang>


=={{header|Racket}}==
=={{header|Racket}}==
Line 2,628: Line 2,628:
{{trans|Haskell}}
{{trans|Haskell}}


<lang racket>#lang racket
<syntaxhighlight lang=racket>#lang racket


(require 2htdp/image)
(require 2htdp/image)
Line 2,677: Line 2,677:
(draw-triangle)
(draw-triangle)
(draw-fern)
(draw-fern)
(draw-dragon)</lang>
(draw-dragon)</syntaxhighlight>


=={{header|Raku}}==
=={{header|Raku}}==
Line 2,683: Line 2,683:
{{works with|Rakudo|2018.10}}
{{works with|Rakudo|2018.10}}


<lang perl6>use Image::PNG::Portable;
<syntaxhighlight lang=raku line>use Image::PNG::Portable;


my ($w, $h) = (640, 640);
my ($w, $h) = (640, 640);
Line 2,700: Line 2,700:
}
}


$png.write: 'Chaos-game-perl6.png';</lang>
$png.write: 'Chaos-game-perl6.png';</syntaxhighlight>


=={{header|REXX}}==
=={{header|REXX}}==
<lang rexx>/*REXX pgm draws a Sierpinski triangle by running the chaos game with a million points*/
<syntaxhighlight lang=rexx>/*REXX pgm draws a Sierpinski triangle by running the chaos game with a million points*/
parse value scrsize() with sd sw . /*obtain the depth and width of screen.*/
parse value scrsize() with sd sw . /*obtain the depth and width of screen.*/
sw= sw - 2 /*adjust the screen width down by two. */
sw= sw - 2 /*adjust the screen width down by two. */
Line 2,728: Line 2,728:
/* [↑] strip trailing blanks (output).*/
/* [↑] strip trailing blanks (output).*/
say strip(_, 'T') /*display one row (line) of the image. */
say strip(_, 'T') /*display one row (line) of the image. */
end /*row*/ /*stick a fork in it, we're all done. */</lang>
end /*row*/ /*stick a fork in it, we're all done. */</syntaxhighlight>


This REXX program makes use of &nbsp; '''SCRSIZE''' &nbsp; REXX program (or
This REXX program makes use of &nbsp; '''SCRSIZE''' &nbsp; REXX program (or
Line 2,945: Line 2,945:


=={{header|Ring}}==
=={{header|Ring}}==
<lang ring>
<syntaxhighlight lang=ring>
# Project : Chaos game
# Project : Chaos game


Line 3,005: Line 3,005:
}
}
label1 {setpicture(p1) show()}
label1 {setpicture(p1) show()}
</syntaxhighlight>
</lang>
* [https://lh3.googleusercontent.com/-xqBO5MB8fpc/Wg05SvwaF9I/AAAAAAAABDA/UGI2goKdDoAR6nbbGZF0YcuwGG6tancvACLcBGAs/s1600/CalmoSoftChaos.jpg Chaos Game (image)]
* [https://lh3.googleusercontent.com/-xqBO5MB8fpc/Wg05SvwaF9I/AAAAAAAABDA/UGI2goKdDoAR6nbbGZF0YcuwGG6tancvACLcBGAs/s1600/CalmoSoftChaos.jpg Chaos Game (image)]


=={{header|Run BASIC}}==
=={{header|Run BASIC}}==
<lang runbasic>x = int(rnd(0) * 200)
<syntaxhighlight lang=runbasic>x = int(rnd(0) * 200)
y = int(rnd(0) * 173)
y = int(rnd(0) * 173)
graphic #g, 200,200
graphic #g, 200,200
Line 3,029: Line 3,029:
#g set(x,y)
#g set(x,y)
next
next
render #g</lang>
render #g</syntaxhighlight>


=={{header|Rust}}==
=={{header|Rust}}==
Dependencies: image, rand
Dependencies: image, rand
<lang rust>
<syntaxhighlight lang=rust>
extern crate image;
extern crate image;
extern crate rand;
extern crate rand;
Line 3,076: Line 3,076:
imgbuf.save("fractal.png").unwrap();
imgbuf.save("fractal.png").unwrap();
}
}
</syntaxhighlight>
</lang>


=={{header|Scala}}==
=={{header|Scala}}==
===Java Swing Interoperability===
===Java Swing Interoperability===
<lang Scala>import javax.swing._
<syntaxhighlight lang=Scala>import javax.swing._
import java.awt._
import java.awt._
import java.awt.event.ActionEvent
import java.awt.event.ActionEvent
Line 3,148: Line 3,148:
)
)


}</lang>
}</syntaxhighlight>


=={{header|Scilab}}==
=={{header|Scilab}}==
This script uses complex numbers to represent (x,y) coordinates: real part as x position, and imaginary part as y position.
This script uses complex numbers to represent (x,y) coordinates: real part as x position, and imaginary part as y position.
<lang>//Input
<syntaxhighlight lang=text>//Input
n_sides = 3;
n_sides = 3;
side_length = 1;
side_length = 1;
Line 3,196: Line 3,196:
plot2d(real(points),imag(points),0)
plot2d(real(points),imag(points),0)
plot2d(real(vertices),imag(vertices),-3);
plot2d(real(vertices),imag(vertices),-3);
set(gca(),'isoview','on');</lang>
set(gca(),'isoview','on');</syntaxhighlight>
{{out}}
{{out}}
It outputs a graphic window and prints on the console the time elapsed during iterations.
It outputs a graphic window and prints on the console the time elapsed during iterations.
Line 3,202: Line 3,202:


=={{header|Sidef}}==
=={{header|Sidef}}==
<lang ruby>require('Imager')
<syntaxhighlight lang=ruby>require('Imager')


var width = 600
var width = 600
Line 3,236: Line 3,236:
}
}


img.write(file => 'chaos_game.png')</lang>
img.write(file => 'chaos_game.png')</syntaxhighlight>
Output image: [https://github.com/trizen/rc/blob/master/img/chaos-game-sidef.png Chaos game]
Output image: [https://github.com/trizen/rc/blob/master/img/chaos-game-sidef.png Chaos game]


=={{header|Simula}}==
=={{header|Simula}}==
<lang simula>BEGIN
<syntaxhighlight lang=simula>BEGIN
INTEGER U, COLUMNS, LINES;
INTEGER U, COLUMNS, LINES;
COLUMNS := 40;
COLUMNS := 40;
Line 3,279: Line 3,279:
END;
END;
END
END
</syntaxhighlight>
</lang>
{{in}}
{{in}}
<pre>
<pre>
Line 3,333: Line 3,333:
{{libheader|Wren-dynamic}}
{{libheader|Wren-dynamic}}
{{libheader|Wren-seq}}
{{libheader|Wren-seq}}
<lang ecmascript>import "dome" for Window
<syntaxhighlight lang=ecmascript>import "dome" for Window
import "graphics" for Canvas, Color
import "graphics" for Canvas, Color
import "math" for Point
import "math" for Point
Line 3,394: Line 3,394:
}
}


var Game = ChaosGame.new(640, 640)</lang>
var Game = ChaosGame.new(640, 640)</syntaxhighlight>


=={{header|X86 Assembly}}==
=={{header|X86 Assembly}}==
Sixty bytes handles it.
Sixty bytes handles it.
<lang asm> 1 ;Assemble with: tasm, tlink /t
<syntaxhighlight lang=asm> 1 ;Assemble with: tasm, tlink /t
2 0000 .model tiny
2 0000 .model tiny
3 0000 .code
3 0000 .code
Line 3,435: Line 3,435:
36 0130 0140 002B 0255 Tx dw 320, 320-277, 320+277 ;equilateral triangle
36 0130 0140 002B 0255 Tx dw 320, 320-277, 320+277 ;equilateral triangle
37 0136 0000 01DF 01DF Ty dw 0, 479, 479
37 0136 0000 01DF 01DF Ty dw 0, 479, 479
38 end start</lang>
38 end start</syntaxhighlight>


=={{header|XPL0}}==
=={{header|XPL0}}==
<lang XPL0>int Tx, Ty, X, Y, R;
<syntaxhighlight lang=XPL0>int Tx, Ty, X, Y, R;
[SetVid($12); \640x480x4 graphics
[SetVid($12); \640x480x4 graphics
Tx:= [320, 320-277, 320+277]; \equilateral triangle
Tx:= [320, 320-277, 320+277]; \equilateral triangle
Line 3,450: Line 3,450:
until KeyHit;
until KeyHit;
SetVid($03); \restore normal text mode
SetVid($03); \restore normal text mode
]</lang>
]</syntaxhighlight>


=={{header|Yabasic}}==
=={{header|Yabasic}}==
<lang Yabasic>width = 640 : height = 480
<syntaxhighlight lang=Yabasic>width = 640 : height = 480
open window width, height
open window width, height
window origin "lb"
window origin "lb"
Line 3,474: Line 3,474:
color 255 * (vertex = 0), 255 * (vertex = 1), 255 * (vertex = 2)
color 255 * (vertex = 0), 255 * (vertex = 1), 255 * (vertex = 2)
dot x, y
dot x, y
next</lang>
next</syntaxhighlight>


=={{header|Z80 Assembly}}==
=={{header|Z80 Assembly}}==
Line 3,483: Line 3,483:
space key.
space key.


<lang z80>VREG: equ 99h ; VDP register port
<syntaxhighlight lang=z80>VREG: equ 99h ; VDP register port
VR0: equ 0F3DFh ; Copy of VDP R0 in memory
VR0: equ 0F3DFh ; Copy of VDP R0 in memory
VR1: equ 0F3E0h ; Copy of VDP R1 in memory
VR1: equ 0F3E0h ; Copy of VDP R1 in memory
Line 3,652: Line 3,652:
ld e,a ; -> C
ld e,a ; -> C
exx
exx
ret</lang>
ret</syntaxhighlight>




Line 3,661: Line 3,661:
{{trans|Java}}
{{trans|Java}}
[[File:ChaosGame.zkl.jpg|240px|thumb|right]]
[[File:ChaosGame.zkl.jpg|240px|thumb|right]]
<lang zkl>w,h:=640,640;
<syntaxhighlight lang=zkl>w,h:=640,640;
bitmap:=PPM(w,h,0xFF|FF|FF); // White background
bitmap:=PPM(w,h,0xFF|FF|FF); // White background
colors:=T(0xFF|00|00,0x00|FF|00,0x00|00|FF); // red,green,blue
colors:=T(0xFF|00|00,0x00|FF|00,0x00|00|FF); // red,green,blue
Line 3,688: Line 3,688:


done.wait(); // don't exit until thread is done
done.wait(); // don't exit until thread is done
println("Done");</lang>
println("Done");</syntaxhighlight>