Archimedean spiral: Difference between revisions
Content deleted Content added
Thundergnat (talk | contribs) m syntax highlighting fixup automation |
Thundergnat (talk | contribs) m Automated syntax highlighting fixup (second round - minor fixes) |
||
Line 18: | Line 18: | ||
=={{header|Action!}}== |
=={{header|Action!}}== |
||
Action! does not provide trigonometric functions. Therefore a simple implementation for Sin and Cos function has been provided. |
Action! does not provide trigonometric functions. Therefore a simple implementation for Sin and Cos function has been provided. |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="action!">INT ARRAY SinTab=[ |
||
0 4 9 13 18 22 27 31 36 40 44 49 53 58 62 66 71 75 79 83 |
0 4 9 13 18 22 27 31 36 40 44 49 53 58 62 66 71 75 79 83 |
||
88 92 96 100 104 108 112 116 120 124 128 132 136 139 143 |
88 92 96 100 104 108 112 116 120 124 128 132 136 139 143 |
||
Line 74: | Line 74: | ||
=={{header|Ada}}== |
=={{header|Ada}}== |
||
{{libheader|SDLAda}} |
{{libheader|SDLAda}} |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="ada">with Ada.Numerics.Elementary_Functions; |
||
with SDL.Video.Windows.Makers; |
with SDL.Video.Windows.Makers; |
||
Line 150: | Line 150: | ||
{{Trans|AWK}} |
{{Trans|AWK}} |
||
This version doubles the characters horiontally to give a slightly more rounded shape. |
This version doubles the characters horiontally to give a slightly more rounded shape. |
||
<syntaxhighlight lang=algolw>begin % draw an Archimedian spiral % |
<syntaxhighlight lang="algolw">begin % draw an Archimedian spiral % |
||
% Translation of AWK which was a trnslation of Applesoft Basic program % |
% Translation of AWK which was a trnslation of Applesoft Basic program % |
||
integer procedure max ( integer x, y ) ; begin if x > y then x else y end; |
integer procedure max ( integer x, y ) ; begin if x > y then x else y end; |
||
Line 240: | Line 240: | ||
Uses Dyalog's [https://sharpplot.com/ SharpPlot] integration, which works on all supported platforms. |
Uses Dyalog's [https://sharpplot.com/ SharpPlot] integration, which works on all supported platforms. |
||
<syntaxhighlight lang=apl> 'InitCauseway' 'View' ⎕CY 'sharpplot' |
<syntaxhighlight lang="apl"> 'InitCauseway' 'View' ⎕CY 'sharpplot' |
||
InitCauseway ⍬ ⍝ initialise current namespace |
InitCauseway ⍬ ⍝ initialise current namespace |
||
sp←⎕NEW Causeway.SharpPlot |
sp←⎕NEW Causeway.SharpPlot |
||
Line 250: | Line 250: | ||
=={{header|AutoHotkey}}== |
=={{header|AutoHotkey}}== |
||
Requires [https://github.com/tariqporter/Gdip GDIP] |
Requires [https://github.com/tariqporter/Gdip GDIP] |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="autohotkey">if !pToken := Gdip_Startup() |
||
{ |
{ |
||
MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system |
MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system |
||
Line 303: | Line 303: | ||
=={{header|AWK}}== |
=={{header|AWK}}== |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="awk"> |
||
# syntax: GAWK -f ARCHIMEDEAN_SPIRAL.AWK |
# syntax: GAWK -f ARCHIMEDEAN_SPIRAL.AWK |
||
# converted from Applesoft BASIC |
# converted from Applesoft BASIC |
||
Line 386: | Line 386: | ||
==={{header|AmigaBASIC}}=== |
==={{header|AmigaBASIC}}=== |
||
{{trans|Locomotive Basic}} |
{{trans|Locomotive Basic}} |
||
<syntaxhighlight lang=amigabasic>a=1.5 |
<syntaxhighlight lang="amigabasic">a=1.5 |
||
b=1.5 |
b=1.5 |
||
pi=3.141592 |
pi=3.141592 |
||
Line 397: | Line 397: | ||
==={{header|Applesoft BASIC}}=== |
==={{header|Applesoft BASIC}}=== |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="applesoftbasic">110 LET H = 96 |
||
120 LET W = H + H / 2 |
120 LET W = H + H / 2 |
||
130 HGR2 |
130 HGR2 |
||
Line 419: | Line 419: | ||
==={{header|BASIC256}}=== |
==={{header|BASIC256}}=== |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="basic256"> |
||
# Basic-256 ver 1.1.4 |
# Basic-256 ver 1.1.4 |
||
# Archimedean Spiral |
# Archimedean Spiral |
||
Line 459: | Line 459: | ||
==={{header|Commodore BASIC}}=== |
==={{header|Commodore BASIC}}=== |
||
Commodore BASIC 2.0 lacks in-built graphics capability. This implementation is written for Commodore BASIC 7.0 that was built into the Commodore 128 computer. Should also work for Commodore BASIC 3.5. |
Commodore BASIC 2.0 lacks in-built graphics capability. This implementation is written for Commodore BASIC 7.0 that was built into the Commodore 128 computer. Should also work for Commodore BASIC 3.5. |
||
<syntaxhighlight lang=basic>1 REM ARCHIMEDEAN SPIRAL |
<syntaxhighlight lang="basic">1 REM ARCHIMEDEAN SPIRAL |
||
2 REM USING COMMODORE BASIC 7.0 |
2 REM USING COMMODORE BASIC 7.0 |
||
3 REM OF THE COMMODORE 128 |
3 REM OF THE COMMODORE 128 |
||
Line 476: | Line 476: | ||
==={{header|FreeBASIC}}=== |
==={{header|FreeBASIC}}=== |
||
<syntaxhighlight lang=freebasic>' version 16-10-2016 |
<syntaxhighlight lang="freebasic">' version 16-10-2016 |
||
' compile with: fbc -s gui |
' compile with: fbc -s gui |
||
Line 504: | Line 504: | ||
==={{header|GW-BASIC}}=== |
==={{header|GW-BASIC}}=== |
||
<syntaxhighlight lang=gwbasic>10 A = 0 |
<syntaxhighlight lang="gwbasic">10 A = 0 |
||
20 B = 1 |
20 B = 1 |
||
30 SCREEN 1 |
30 SCREEN 1 |
||
Line 518: | Line 518: | ||
==={{header|IS-BASIC}}=== |
==={{header|IS-BASIC}}=== |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="is-basic">100 GRAPHICS LORES 2 |
||
110 OPTION ANGLE DEGREES |
110 OPTION ANGLE DEGREES |
||
120 PLOT 640,360,ANGLE 90; |
120 PLOT 640,360,ANGLE 90; |
||
Line 527: | Line 527: | ||
==={{header|Locomotive Basic}}=== |
==={{header|Locomotive Basic}}=== |
||
{{trans|Commodore BASIC}} |
{{trans|Commodore BASIC}} |
||
<syntaxhighlight lang=locobasic>10 a=1.5:b=2 |
<syntaxhighlight lang="locobasic">10 a=1.5:b=2 |
||
20 mode 2:rad:move 320,200 |
20 mode 2:rad:move 320,200 |
||
30 for t=0 to 40*pi step 0.2 |
30 for t=0 to 40*pi step 0.2 |
||
Line 536: | Line 536: | ||
==={{header|Run BASIC}}=== |
==={{header|Run BASIC}}=== |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="run basic"> 'archimedean spiral.bas |
||
'runs in Run Basic |
'runs in Run Basic |
||
'Run Basic website http://www.runbasic.com |
'Run Basic website http://www.runbasic.com |
||
Line 565: | Line 565: | ||
==={{header|QBasic}}=== |
==={{header|QBasic}}=== |
||
<syntaxhighlight lang=qbasic>SCREEN 12 |
<syntaxhighlight lang="qbasic">SCREEN 12 |
||
WINDOW (-2.67, -2!)-(2.67, 2!) |
WINDOW (-2.67, -2!)-(2.67, 2!) |
||
PI = 4 * ATN(1) |
PI = 4 * ATN(1) |
||
Line 581: | Line 581: | ||
{{trans|Applesoft BASIC}} |
{{trans|Applesoft BASIC}} |
||
Works with the unexpanded (1k RAM) ZX81. The output is quite blocky, but identifiably a spiral. |
Works with the unexpanded (1k RAM) ZX81. The output is quite blocky, but identifiably a spiral. |
||
<syntaxhighlight lang=basic>10 LET A=1.5 |
<syntaxhighlight lang="basic">10 LET A=1.5 |
||
20 LET B=0.7 |
20 LET B=0.7 |
||
30 FOR T=0 TO 7*PI STEP 0.05 |
30 FOR T=0 TO 7*PI STEP 0.05 |
||
Line 593: | Line 593: | ||
The BQN online REPL supports some basic plotting functionality through <code>•Plot</code>. This is used to create a spiral plotting function: |
The BQN online REPL supports some basic plotting functionality through <code>•Plot</code>. This is used to create a spiral plotting function: |
||
<syntaxhighlight lang=bqn>{(•math.Sin •Plot○(⊢×↕∘≠) •math.Cos) -(2×π) × 𝕩⥊(↕÷-⟜1)100}</syntaxhighlight> |
<syntaxhighlight lang="bqn">{(•math.Sin •Plot○(⊢×↕∘≠) •math.Cos) -(2×π) × 𝕩⥊(↕÷-⟜1)100}</syntaxhighlight> |
||
When called with argument 200, it is similar to the given example diagram. |
When called with argument 200, it is similar to the given example diagram. |
||
Line 603: | Line 603: | ||
=={{header|C}}== |
=={{header|C}}== |
||
Interactive code which asks the parameters a and b as inputs, the number of cycles and the division steps. Requires the [http://www.cs.colorado.edu/~main/bgi/cs1300/ WinBGIm] library. |
Interactive code which asks the parameters a and b as inputs, the number of cycles and the division steps. Requires the [http://www.cs.colorado.edu/~main/bgi/cs1300/ WinBGIm] library. |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="c"> |
||
#include<graphics.h> |
#include<graphics.h> |
||
#include<stdio.h> |
#include<stdio.h> |
||
Line 640: | Line 640: | ||
=={{header|C sharp|C#}}== |
=={{header|C sharp|C#}}== |
||
<syntaxhighlight lang=csharp>using System; |
<syntaxhighlight lang="csharp">using System; |
||
using System.Linq; |
using System.Linq; |
||
using System.Drawing; |
using System.Drawing; |
||
Line 683: | Line 683: | ||
=={{header|C++}}== |
=={{header|C++}}== |
||
[[File:SpiralCpp.png|200px|thumb|right]] |
[[File:SpiralCpp.png|200px|thumb|right]] |
||
<syntaxhighlight lang=cpp> |
<syntaxhighlight lang="cpp"> |
||
#include <windows.h> |
#include <windows.h> |
||
#include <string> |
#include <string> |
||
Line 798: | Line 798: | ||
=={{header|Clojure}}== |
=={{header|Clojure}}== |
||
{{Works with| Incanter}} |
{{Works with| Incanter}} |
||
<syntaxhighlight lang=clojure> |
<syntaxhighlight lang="clojure"> |
||
(use '(incanter core stats charts io)) |
(use '(incanter core stats charts io)) |
||
Line 821: | Line 821: | ||
Common Lisp doesn't provide native graphical output. Libraries or bitmapped output could be used instead, but for this solution, the output is accomplished with character printing. |
Common Lisp doesn't provide native graphical output. Libraries or bitmapped output could be used instead, but for this solution, the output is accomplished with character printing. |
||
<syntaxhighlight lang=lisp>(defun draw-coords-as-text (coords size fill-char) |
<syntaxhighlight lang="lisp">(defun draw-coords-as-text (coords size fill-char) |
||
(let* ((min-x (apply #'min (mapcar #'car coords))) |
(let* ((min-x (apply #'min (mapcar #'car coords))) |
||
(min-y (apply #'min (mapcar #'cdr coords))) |
(min-y (apply #'min (mapcar #'cdr coords))) |
||
Line 894: | Line 894: | ||
=={{header|FOCAL}}== |
=={{header|FOCAL}}== |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="focal">1.1 S A=1.5 |
||
1.2 S B=2 |
1.2 S B=2 |
||
1.3 S N=250 |
1.3 S N=250 |
||
Line 918: | Line 918: | ||
{{Works with|Frege|3.23.888}} |
{{Works with|Frege|3.23.888}} |
||
<syntaxhighlight lang=frege>module Archimedean where |
<syntaxhighlight lang="frege">module Archimedean where |
||
import Java.IO |
import Java.IO |
||
Line 1,013: | Line 1,013: | ||
{{works with|go|1.9}} |
{{works with|go|1.9}} |
||
Creates a PNG file using only built-in packages. |
Creates a PNG file using only built-in packages. |
||
<syntaxhighlight lang=go>package main |
<syntaxhighlight lang="go">package main |
||
import ( |
import ( |
||
Line 1,067: | Line 1,067: | ||
{{libheader|Juicy.Pixels}} |
{{libheader|Juicy.Pixels}} |
||
{{libheader|Rasterific}} |
{{libheader|Rasterific}} |
||
<syntaxhighlight lang=haskell>#!/usr/bin/env stack |
<syntaxhighlight lang="haskell">#!/usr/bin/env stack |
||
-- stack --resolver lts-7.0 --install-ghc runghc --package Rasterific --package JuicyPixels |
-- stack --resolver lts-7.0 --install-ghc runghc --package Rasterific --package JuicyPixels |
||
Line 1,099: | Line 1,099: | ||
=={{header|J}}== |
=={{header|J}}== |
||
[[File:Archimedian spiral j.png|200px|thumb|right]] |
[[File:Archimedian spiral j.png|200px|thumb|right]] |
||
<syntaxhighlight lang=j>require'plot' |
<syntaxhighlight lang="j">require'plot' |
||
'aspect 1' plot (*^)j.0.01*i.1400</syntaxhighlight> |
'aspect 1' plot (*^)j.0.01*i.1400</syntaxhighlight> |
||
Line 1,107: | Line 1,107: | ||
[[File:archimedian_spiral.png|300px|thumb|right]] |
[[File:archimedian_spiral.png|300px|thumb|right]] |
||
{{works with|Java|8}} |
{{works with|Java|8}} |
||
<syntaxhighlight lang=java>import java.awt.*; |
<syntaxhighlight lang="java">import java.awt.*; |
||
import static java.lang.Math.*; |
import static java.lang.Math.*; |
||
import javax.swing.*; |
import javax.swing.*; |
||
Line 1,196: | Line 1,196: | ||
{{Works with|Chrome}} |
{{Works with|Chrome}} |
||
[[File:ASjs.png|200px|right|thumb|Output ASjs.png]] |
[[File:ASjs.png|200px|right|thumb|Output ASjs.png]] |
||
<syntaxhighlight lang=html> |
<syntaxhighlight lang="html"> |
||
<!-- ArchiSpiral.html --> |
<!-- ArchiSpiral.html --> |
||
<html> |
<html> |
||
Line 1,231: | Line 1,231: | ||
Assumes the same HTML canvas embedding as above, but is functionally composed. |
Assumes the same HTML canvas embedding as above, but is functionally composed. |
||
Defines and logs a set of points, before rendering them to canvas. |
Defines and logs a set of points, before rendering them to canvas. |
||
<syntaxhighlight lang=html><html> |
<syntaxhighlight lang="html"><html> |
||
<head> |
<head> |
||
<title>Archimedean spiral</title> |
<title>Archimedean spiral</title> |
||
Line 1,240: | Line 1,240: | ||
<canvas id="spiral" width="640" height="640" style="border: 2px outset;"></canvas> |
<canvas id="spiral" width="640" height="640" style="border: 2px outset;"></canvas> |
||
<script></syntaxhighlight> |
<script></syntaxhighlight> |
||
<syntaxhighlight lang=javascript>const main = strColor => intCycles => { |
<syntaxhighlight lang="javascript">const main = strColor => intCycles => { |
||
const |
const |
||
ai = 0.05, |
ai = 0.05, |
||
Line 1,273: | Line 1,273: | ||
length: 1 + n - m |
length: 1 + n - m |
||
}, (_, i) => m + i);</syntaxhighlight> |
}, (_, i) => m + i);</syntaxhighlight> |
||
<syntaxhighlight lang=html></script></body></html></syntaxhighlight> |
<syntaxhighlight lang="html"></script></body></html></syntaxhighlight> |
||
=={{header|jq}}== |
=={{header|jq}}== |
||
Line 1,279: | Line 1,279: | ||
'''Works with gojq, the Go implementation of jq''' |
'''Works with gojq, the Go implementation of jq''' |
||
====SVG version==== |
====SVG version==== |
||
<syntaxhighlight lang=jq>def spiral($zero; $turns; $step): |
<syntaxhighlight lang="jq">def spiral($zero; $turns; $step): |
||
def pi: 1 | atan * 4; |
def pi: 1 | atan * 4; |
||
Line 1,312: | Line 1,312: | ||
====ASCII Art Version==== |
====ASCII Art Version==== |
||
{{trans|awk}} |
{{trans|awk}} |
||
<syntaxhighlight lang=jq>def spiral($a; $b; $step; $h): |
<syntaxhighlight lang="jq">def spiral($a; $b; $step; $h): |
||
def min($x;$y): if $x <= $y then $x else $y end; |
def min($x;$y): if $x <= $y then $x else $y end; |
||
def max($x;$y): if $x <= $y then $y else $x end; |
def max($x;$y): if $x <= $y then $y else $x end; |
||
Line 1,349: | Line 1,349: | ||
{{works with|Julia|0.6}} |
{{works with|Julia|0.6}} |
||
<syntaxhighlight lang=julia>using UnicodePlots |
<syntaxhighlight lang="julia">using UnicodePlots |
||
spiral(θ, a=0, b=1) = @. b * θ * cos(θ + a), b * θ * sin(θ + a) |
spiral(θ, a=0, b=1) = @. b * θ * cos(θ + a), b * θ * sin(θ + a) |
||
Line 1,379: | Line 1,379: | ||
=={{header|Kotlin}}== |
=={{header|Kotlin}}== |
||
{{trans|Java}} |
{{trans|Java}} |
||
<syntaxhighlight lang=scala>// version 1.1.0 |
<syntaxhighlight lang="scala">// version 1.1.0 |
||
import java.awt.* |
import java.awt.* |
||
Line 1,459: | Line 1,459: | ||
{{libheader|LÖVE}} |
{{libheader|LÖVE}} |
||
{{works with|LÖVE|11.3}} |
{{works with|LÖVE|11.3}} |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="lua"> |
||
a=1 |
a=1 |
||
b=2 |
b=2 |
||
Line 1,483: | Line 1,483: | ||
=={{header|M2000 Interpreter}}== |
=={{header|M2000 Interpreter}}== |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="m2000 interpreter"> |
||
module Archimedean_spiral { |
module Archimedean_spiral { |
||
smooth on ' enable GDI+ |
smooth on ' enable GDI+ |
||
Line 1,513: | Line 1,513: | ||
=={{header|Maple}}== |
=={{header|Maple}}== |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="maple"> |
||
plots[polarplot](1+2*theta, theta = 0 .. 6*Pi) |
plots[polarplot](1+2*theta, theta = 0 .. 6*Pi) |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
Line 1,519: | Line 1,519: | ||
=={{header|Mathematica}}/{{header|Wolfram Language}}== |
=={{header|Mathematica}}/{{header|Wolfram Language}}== |
||
The built-in function PolarPlot easily creates the desired plot |
The built-in function PolarPlot easily creates the desired plot |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="mathematica">With[{a = 5, b = 4}, PolarPlot[a + b t, {t, 0, 10 Pi}]]</syntaxhighlight> |
||
=={{header|MATLAB}}== |
=={{header|MATLAB}}== |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="matlab">a = 1; |
||
b = 1; |
b = 1; |
||
turns = 2; |
turns = 2; |
||
Line 1,530: | Line 1,530: | ||
=={{header|Nim}}== |
=={{header|Nim}}== |
||
{{libheader|gintro}} |
{{libheader|gintro}} |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="nim">import math |
||
import gintro/[glib, gobject, gtk, gio, cairo] |
import gintro/[glib, gobject, gtk, gio, cairo] |
||
Line 1,611: | Line 1,611: | ||
[[File:ArchiSpiral2.png|right|thumb|Output ArchiSpiral2.png]] |
[[File:ArchiSpiral2.png|right|thumb|Output ArchiSpiral2.png]] |
||
<syntaxhighlight lang=parigp> |
<syntaxhighlight lang="parigp"> |
||
\\ The Archimedean spiral |
\\ The Archimedean spiral |
||
\\ ArchiSpiral() - Where: lps is a number of loops, c is a direction 0/1 |
\\ ArchiSpiral() - Where: lps is a number of loops, c is a direction 0/1 |
||
Line 1,644: | Line 1,644: | ||
=={{header|Perl}}== |
=={{header|Perl}}== |
||
{{trans|Raku}} |
{{trans|Raku}} |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="perl">use Imager; |
||
use constant PI => 3.14159265; |
use constant PI => 3.14159265; |
||
Line 1,664: | Line 1,664: | ||
{{libheader|Phix/online}} |
{{libheader|Phix/online}} |
||
You can run this online [http://phix.x10.mx/p2js/Archimedean_spiral.htm here]. |
You can run this online [http://phix.x10.mx/p2js/Archimedean_spiral.htm here]. |
||
<!--<syntaxhighlight lang= |
<!--<syntaxhighlight lang="phix">(phixonline)--> |
||
<span style="color: #000080;font-style:italic;">-- |
<span style="color: #000080;font-style:italic;">-- |
||
-- demo\rosetta\Archimedean_spiral.exw |
-- demo\rosetta\Archimedean_spiral.exw |
||
Line 1,720: | Line 1,720: | ||
====with points==== |
====with points==== |
||
When drawn with points the rotation must be very small, and initially the animation is very slow. This is because the points will move further and further apart as the radius increases. |
When drawn with points the rotation must be very small, and initially the animation is very slow. This is because the points will move further and further apart as the radius increases. |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="processing">float x, y; |
||
float theta; |
float theta; |
||
float rotation; |
float rotation; |
||
Line 1,743: | Line 1,743: | ||
====with points, rotated==== |
====with points, rotated==== |
||
Rotates the canvas matrix using the built-in rotate() and draws a simple point, rather than computing rotated coordinates with sin()/cos(). |
Rotates the canvas matrix using the built-in rotate() and draws a simple point, rather than computing rotated coordinates with sin()/cos(). |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="processing">float theta; |
||
float rotation; |
float rotation; |
||
Line 1,764: | Line 1,764: | ||
====with points, vector==== |
====with points, vector==== |
||
Rotates a vector object of increasing magnitude using the built-in PVector and draws its point, rather than computing rotated coordinates with sin()/cos(). |
Rotates a vector object of increasing magnitude using the built-in PVector and draws its point, rather than computing rotated coordinates with sin()/cos(). |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="processing">PVector pv; |
||
float rotation; |
float rotation; |
||
Line 1,786: | Line 1,786: | ||
====with line segments==== |
====with line segments==== |
||
Draw each new line segments anchored to the previous point in order to keep the spiral visually connected no matter how much the radius expands. |
Draw each new line segments anchored to the previous point in order to keep the spiral visually connected no matter how much the radius expands. |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="processing">float px, py, x, y; |
||
float theta; |
float theta; |
||
float rotation; |
float rotation; |
||
Line 1,811: | Line 1,811: | ||
====with line segments, rotated==== |
====with line segments, rotated==== |
||
Uses the built-in rotate() and screenX() to rotate the frame of reference and then recover the rotated screen position of each next point. Draw each new line segments anchored to the previous point in order to keep the spiral visually connected no matter how much the radius expands. |
Uses the built-in rotate() and screenX() to rotate the frame of reference and then recover the rotated screen position of each next point. Draw each new line segments anchored to the previous point in order to keep the spiral visually connected no matter how much the radius expands. |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="processing">float x, y, px, py; |
||
float theta; |
float theta; |
||
float rotation; |
float rotation; |
||
Line 1,841: | Line 1,841: | ||
====with points==== |
====with points==== |
||
When drawn with points the rotation must be very small, and initially the animation is very slow. This is because the points will move further and further apart as the radius increases. |
When drawn with points the rotation must be very small, and initially the animation is very slow. This is because the points will move further and further apart as the radius increases. |
||
<syntaxhighlight lang=python>theta = 0 |
<syntaxhighlight lang="python">theta = 0 |
||
rotation = 0.1 |
rotation = 0.1 |
||
Line 1,861: | Line 1,861: | ||
=={{header|PureBasic}}== |
=={{header|PureBasic}}== |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="purebasic">#MAXLOOP = 7*360 |
||
#XCENTER = 640/2 |
#XCENTER = 640/2 |
||
#YCENTER = 480/2 |
#YCENTER = 480/2 |
||
Line 1,887: | Line 1,887: | ||
Using the '''turtle''' module. |
Using the '''turtle''' module. |
||
<syntaxhighlight lang=python>from turtle import * |
<syntaxhighlight lang="python">from turtle import * |
||
from math import * |
from math import * |
||
color("blue") |
color("blue") |
||
Line 1,901: | Line 1,901: | ||
=={{header|Quackery}}== |
=={{header|Quackery}}== |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="quackery"> [ $ "turtleduck.qky" loadfile ] now! |
||
turtle |
turtle |
||
0 n->v |
0 n->v |
||
Line 1,915: | Line 1,915: | ||
=={{header|R}}== |
=={{header|R}}== |
||
<syntaxhighlight lang=r>with(list(s=seq(0, 10 * pi, length.out=500)), |
<syntaxhighlight lang="r">with(list(s=seq(0, 10 * pi, length.out=500)), |
||
plot((1 + s) * exp(1i * s), type="l"))</syntaxhighlight> |
plot((1 + s) * exp(1i * s), type="l"))</syntaxhighlight> |
||
Line 1,921: | Line 1,921: | ||
[[File:archemedian-spiral-racket.png]] |
[[File:archemedian-spiral-racket.png]] |
||
<syntaxhighlight lang=racket>#lang racket/base |
<syntaxhighlight lang="racket">#lang racket/base |
||
(require plot |
(require plot |
||
racket/math) |
racket/math) |
||
Line 1,948: | Line 1,948: | ||
{{works with|Rakudo|2018.10}} |
{{works with|Rakudo|2018.10}} |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="raku" line>use Image::PNG::Portable; |
||
my ($w, $h) = (400, 400); |
my ($w, $h) = (400, 400); |
||
Line 1,964: | Line 1,964: | ||
Note: the value of <big><big> ''a'' </big></big> doesn't mean that much as the plot is automatically centered. |
Note: the value of <big><big> ''a'' </big></big> doesn't mean that much as the plot is automatically centered. |
||
<syntaxhighlight lang=rexx>/*REXX pgm plots several cycles (half a spiral) of the Archimedean spiral (ASCII plot).*/ |
<syntaxhighlight lang="rexx">/*REXX pgm plots several cycles (half a spiral) of the Archimedean spiral (ASCII plot).*/ |
||
parse arg cy a b inc chr . /*obtain optional arguments from the CL*/ |
parse arg cy a b inc chr . /*obtain optional arguments from the CL*/ |
||
if cy=='' | cy=="," then cy= 3 /*Not specified? Then use the default.*/ |
if cy=='' | cy=="," then cy= 3 /*Not specified? Then use the default.*/ |
||
Line 2,205: | Line 2,205: | ||
=={{header|Ring}}== |
=={{header|Ring}}== |
||
<syntaxhighlight lang=ring> |
<syntaxhighlight lang="ring"> |
||
/* |
/* |
||
+--------------------------------------------------------------------------------------------------------- |
+--------------------------------------------------------------------------------------------------------- |
||
Line 2,316: | Line 2,316: | ||
{{libheader|JRubyArt}} |
{{libheader|JRubyArt}} |
||
JRubyArt is an implementation of Processing in ruby, that uses JRuby to provide the interoperability with the java libraries. |
JRubyArt is an implementation of Processing in ruby, that uses JRuby to provide the interoperability with the java libraries. |
||
<syntaxhighlight lang=ruby> |
<syntaxhighlight lang="ruby"> |
||
INCR = 0.1 |
INCR = 0.1 |
||
attr_reader :x, :theta |
attr_reader :x, :theta |
||
Line 2,340: | Line 2,340: | ||
=={{header|Rust}}== |
=={{header|Rust}}== |
||
<syntaxhighlight lang=rust>#[macro_use(px)] |
<syntaxhighlight lang="rust">#[macro_use(px)] |
||
extern crate bmp; |
extern crate bmp; |
||
Line 2,374: | Line 2,374: | ||
=={{header|SAS}}== |
=={{header|SAS}}== |
||
<syntaxhighlight lang=sas>data xy; |
<syntaxhighlight lang="sas">data xy; |
||
h=constant('pi')/40; |
h=constant('pi')/40; |
||
do i=0 to 400; |
do i=0 to 400; |
||
Line 2,391: | Line 2,391: | ||
=={{header|Scala}}== |
=={{header|Scala}}== |
||
===Java Swing Interoperability=== |
===Java Swing Interoperability=== |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="scala"> |
||
object ArchimedeanSpiral extends App { |
object ArchimedeanSpiral extends App { |
||
Line 2,463: | Line 2,463: | ||
{{libheader|Scheme/PsTk}} |
{{libheader|Scheme/PsTk}} |
||
<syntaxhighlight lang=scheme> |
<syntaxhighlight lang="scheme"> |
||
(import (scheme base) |
(import (scheme base) |
||
(scheme complex) |
(scheme complex) |
||
Line 2,501: | Line 2,501: | ||
=={{header|Scilab}}== |
=={{header|Scilab}}== |
||
<lang>a = 3; |
<syntaxhighlight lang="text">a = 3; |
||
b = 2; |
b = 2; |
||
Line 2,522: | Line 2,522: | ||
=={{header|Seed7}}== |
=={{header|Seed7}}== |
||
<syntaxhighlight lang=seed7>$ include "seed7_05.s7i"; |
<syntaxhighlight lang="seed7">$ include "seed7_05.s7i"; |
||
include "draw.s7i"; |
include "draw.s7i"; |
||
include "keybd.s7i"; |
include "keybd.s7i"; |
||
Line 2,552: | Line 2,552: | ||
=={{header|Sidef}}== |
=={{header|Sidef}}== |
||
{{trans|Raku}} |
{{trans|Raku}} |
||
<syntaxhighlight lang=ruby>require('Imager') |
<syntaxhighlight lang="ruby">require('Imager') |
||
define π = Num.pi |
define π = Num.pi |
||
Line 2,570: | Line 2,570: | ||
=={{header|Stata}}== |
=={{header|Stata}}== |
||
<syntaxhighlight lang=stata>clear all |
<syntaxhighlight lang="stata">clear all |
||
scalar h=_pi/40 |
scalar h=_pi/40 |
||
set obs 400 |
set obs 400 |
||
Line 2,581: | Line 2,581: | ||
This creates a little Tk GUI where you can interactively enter values for `a` and `b`. The spiral will be re-drawn automatically thanks to `trace`: |
This creates a little Tk GUI where you can interactively enter values for `a` and `b`. The spiral will be re-drawn automatically thanks to `trace`: |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="tcl">package require Tk |
||
# create widgets |
# create widgets |
||
Line 2,648: | Line 2,648: | ||
=={{header|VBA}}== |
=={{header|VBA}}== |
||
<syntaxhighlight lang=vb>Private Sub plot_coordinate_pairs(x As Variant, y As Variant) |
<syntaxhighlight lang="vb">Private Sub plot_coordinate_pairs(x As Variant, y As Variant) |
||
Dim chrt As Chart |
Dim chrt As Chart |
||
Set chrt = ActiveSheet.Shapes.AddChart.Chart |
Set chrt = ActiveSheet.Shapes.AddChart.Chart |
||
Line 2,675: | Line 2,675: | ||
{{trans|Sidef}} |
{{trans|Sidef}} |
||
{{libheader|DOME}} |
{{libheader|DOME}} |
||
<syntaxhighlight lang=ecmascript>import "graphics" for Canvas, Color |
<syntaxhighlight lang="ecmascript">import "graphics" for Canvas, Color |
||
import "dome" for Window |
import "dome" for Window |
||
Line 2,706: | Line 2,706: | ||
=={{header|XPL0}}== |
=={{header|XPL0}}== |
||
Looks a lot like the C++ image. |
Looks a lot like the C++ image. |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="xpl0">real A, B, R, T, X, Y; |
||
[SetVid($12); \set 640x480 graphics |
[SetVid($12); \set 640x480 graphics |
||
A:= 0.0; B:= 3.0; T:= 0.0; |
A:= 0.0; B:= 3.0; T:= 0.0; |
||
Line 2,719: | Line 2,719: | ||
=={{header|Yabasic}}== |
=={{header|Yabasic}}== |
||
{{trans|Sinclair_ZX81_BASIC}} |
{{trans|Sinclair_ZX81_BASIC}} |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="yabasic">5 OPEN WINDOW 320, 200 : WINDOW ORIGIN "CC" |
||
10 LET A=1.5 |
10 LET A=1.5 |
||
20 LET B=0.7 |
20 LET B=0.7 |
||
Line 2,730: | Line 2,730: | ||
[[File:ArchimedeanSpiral.zk.jpg|250px|thumb|right]] |
[[File:ArchimedeanSpiral.zk.jpg|250px|thumb|right]] |
||
Uses the PPM class from http://rosettacode.org/wiki/Bitmap/Bresenham%27s_line_algorithm#zkl |
Uses the PPM class from http://rosettacode.org/wiki/Bitmap/Bresenham%27s_line_algorithm#zkl |
||
<syntaxhighlight lang=zkl>fcn archimedeanSpiral(a,b,circles){ |
<syntaxhighlight lang="zkl">fcn archimedeanSpiral(a,b,circles){ |
||
w,h:=640,640; centerX,centerY:=w/2,h/2; |
w,h:=640,640; centerX,centerY:=w/2,h/2; |
||
bitmap:=PPM(w+1,h+1,0xFF|FF|FF); // White background |
bitmap:=PPM(w+1,h+1,0xFF|FF|FF); // White background |