View
Theme
Font Style
7pt
8pt
9pt
10pt
11pt
Line Style
100%
110%
120%
130%
140%
Bold Keyword
Default
Inspector
Kkaefer
Eclipse
SQ Light
Lesser
Dark
Cobalt
Monokai
Rubyblue
Night
SQ Dark
Ambiance
Blackboard
Line Num.
Wrap Lines
Preview
Redraw
JS Tab
HTML Tab
CSS Tab
Live Tab
Prev. Tab
Next Tab
Browser
History…
Help
Edit
Settings
Auto Complete
Match Brackets
Match Highlight
Strip Whitespace
Auto Close Brackets
Auto Close Quotes
Show Print Margin
Undo
Redo
Delete
Select Line
Select All
Find & Replace
Find
Find in Repo.
Find Next
Find Previous
Replace Single
Replace All
Wrap Search
Revert
As Template
Diff Revision
Format
Compress
Text
Zen Coding
Indent
Tab Width
1
2
3
4
5
6
7
8
Indent Unit
1
2
3
4
5
6
7
8
Smart Indent
Use Tabs
Visible Tabs
Shift Left
Shift Right
Put Indent
Number
Increment by 1
Decrement by 1
Increment by 0.1
Decrement by 0.1
Increment by 10
Decrement by 10
Simple Math
Comment
Line
Move Up
Move Down
Copy Up
Copy Down
Go to Line…
Remove Line
Next Point
Prev. Point
Help
Share
Login
You can jump to the latest bin by adding
/latest
to your URL
×
z
Find
→
←
⟲
Replace
⊗
All
Replace
var ANIMATION; var CTX; var CANVAS; var CANVAS_WIDTH; var CANVAS_HEIGHT; var DEFAULT_BG; var DEFAULT_FG; var BG; var FG; var XCOR; var YCOR; var ROTATION; var PEN_DOWN; var PI = Math.PI; var DEG2RAD = PI / 180; var RAD2DEG = 180 / PI; var FORWARD_FAILED; var FILL = ""; var MODE = "immediate"; var FOOD_X = 0; var FOOD_Y = 0; var DISTANCE_TO_FOOD; var DISTANCE_LAST_TIME; var OVERLAY; var OVERLAY_CTX; var TURTLE_IMG; var TURTLE_IMG_SRC = "/assets/turtle.png"; var TURTLE_WIDTH; var TURTLE_HEIGHT; var TURTLE_LOADED = false; var TURTLE_VISIBLE = true; function RESET_CANVAS(a) { a.setTransform(1, 0, 0, 1, 0, 0); a.clearRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT) } function RESET() { RESET_CANVAS(CTX); CTX.fillStyle = DEFAULT_BG; CTX.strokeStyle = DEFAULT_FG; CTX.fillRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT); STOP_ANIM(); XCOR = CANVAS_WIDTH / 2; YCOR = CANVAS_HEIGHT / 2; ROTATION = 0; PEN_DOWN = true; MODE = "immediate"; TURTLE_VISIBLE = true; CTX.translate(XCOR, YCOR); RESET_CANVAS(OVERLAY_CTX); DRAW_TURTLE() } function GET_CANVAS_POS() { var b = CANVAS; var c = 0, a = 0; if (b.offsetParent) { do { c += b.offsetLeft; a += b.offsetTop } while (b = b.offsetParent) } return [c, a] } function INIT(b, c, a) { if (typeof b === "string") { CANVAS = document.getElementById(b) } if (CANVAS.getContext) { CTX = CANVAS.getContext("2d") } else { return } CANVAS_WIDTH = CANVAS.width; CANVAS_HEIGHT = CANVAS.height; var d = GET_CANVAS_POS(); OVERLAY = CANVAS.cloneNode(false); OVERLAY.setAttribute("id", "overlay"); OVERLAY.style.zIndex = "100"; OVERLAY.style.position = "absolute"; OVERLAY.style.left = d[0] + "px"; OVERLAY.style.top = d[1] + "px"; CANVAS.parentNode.insertBefore(OVERLAY, CANVAS); OVERLAY_CTX = OVERLAY.getContext("2d"); LOAD_TURTLE(TURTLE_IMG_SRC); BG = DEFAULT_BG = c || "#000000"; FG = DEFAULT_FG = a || "#00FF00"; CTX.save(); RESET() } function LOAD_TURTLE(a) { TURTLE_IMG = new Image(); TURTLE_IMG.onload = function () { TURTLE_WIDTH = TURTLE_IMG.width; TURTLE_HEIGHT = TURTLE_IMG.height; TURTLE_LOADED = true; DRAW_TURTLE() }; TURTLE_IMG.src = a } function FORWARD(a) { if (MODE == "immediate") { CTX.beginPath(); CTX.moveTo(0, 0) } if (PEN_DOWN) { CTX.lineTo(0, -a); CTX.translate(0, -a); if (MODE == "immediate") { CTX.stroke() } } else { CTX.moveTo(0, -a); CTX.translate(0, -a) } XCOR += a * Math.cos(BEARING() * Math.PI / 180); YCOR += a * Math.sin(BEARING() * Math.PI / 180); if (TURTLE_VISIBLE) { DRAW_TURTLE() } } function BACK(a) { FORWARD(-a) } function RIGHT(a) { ROTATION -= a; ROTATION %= 360; CTX.rotate(a * Math.PI / 180); if (TURTLE_VISIBLE) { DRAW_TURTLE() } } function LEFT(a) { RIGHT(-a) } function REPEAT(d, c, a) { for (var b = 0; b < d; b++) { c.apply(this, a || []) } } function BEARING() { return ROTATION + 90 } function PENDOWN() { PEN_DOWN = true; if (MODE == "delayed") { CTX.beginPath(); CTX.moveTo(0, 0) } } function PENUP() { PEN_DOWN = false } function OUT_OF_BOUNDS() { if (XCOR < 0 || XCOR >= CANVAS_WIDTH) { return true } else { if (YCOR < 0 || YCOR >= CANVAS_HEIGHT) { return true } else { return false } } } function MOVE_FORWARD(a) { PENUP(); FORWARD(a); PENDOWN() } function CHECK_FORWARD(a) { PENUP(); FORWARD(a); FORWARD_FAILED = OUT_OF_BOUNDS(); BACK(a); if (!FORWARD_FAILED) { PENDOWN(); FORWARD(a) } PENDOWN() } function STUCK() { return FORWARD_FAILED } function SET_BG(a) { BG = a } function SET_LINE(a) { FG = a; CTX.strokeStyle = FG } function BEGIN_FILL(a) { FILL = a; CTX.fillStyle = FILL; MODE = "delayed"; PENDOWN() } function END_FILL() { CTX.fill(); CTX.stroke(); MODE = "immediate"; FILL = "" } function CENTER_X() { return CANVAS_WIDTH / 2 } function CENTER_Y() { return CANVAS_HEIGHT / 2 } function GET_WIDTH() { return CANVAS_WIDTH } function GET_HEIGHT() { return CANVAS_HEIGHT } function SET_FOOD(a, b) { FOOD_X = a; FOOD_Y = b } function DIST(b, d, a, c) { return Math.sqrt(Math.pow(a - b, 2) + Math.pow(c - d, 2)) } function SMELL() { var a; DISTANCE_TO_FOOD = DIST(FOOD_X, FOOD_Y, XCOR, YCOR); if (DISTANCE_LAST_TIME === undefined) { DISTANCE_LAST_TIME = DISTANCE_TO_FOOD } if (DISTANCE_TO_FOOD > DISTANCE_LAST_TIME) { a = "weaker" } else { a = "stronger" } DISTANCE_LAST_TIME = DISTANCE_TO_FOOD; return a } function STOP_ANIM() { if (ANIMATION) { clearInterval(ANIMATION) } } function ANIMATE(b, a) { function c(d) { d = d || 1; b.call(); if (a && d < a) { setTimeout(function () { c(++d) }, 25) } else { ANIMATION = setInterval(b, 25) } } c(1) } function RESET_OVERLAY() { OVERLAY_CTX.save(); OVERLAY_CTX.clearRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT); OVERLAY_CTX.setTransform(1, 0, 0, 1, 0, 0) } function DRAW_TURTLE() { RESET_OVERLAY(); if (TURTLE_LOADED) { OVERLAY_CTX.translate(XCOR, CANVAS_HEIGHT - YCOR); OVERLAY_CTX.rotate(-ROTATION * Math.PI / 180); OVERLAY_CTX.drawImage(TURTLE_IMG, -TURTLE_WIDTH / 2, -TURTLE_HEIGHT / 2, TURTLE_WIDTH, TURTLE_HEIGHT) } OVERLAY_CTX.restore() } function HIDE_TURTLE() { RESET_OVERLAY(); TURTLE_VISIBLE = false } function SHOW_TURTLE() { TURTLE_VISIBLE = true; DRAW_TURTLE() }; function SQUAREPIECE(a) { FORWARD(a); RIGHT(90) } function SQUARE(a) { REPEAT(4, SQUAREPIECE, [a]) } function RECTANGLE(b, a) { REPEAT(2, function () { SQUAREPIECE(b); SQUAREPIECE(a) }) } function TRIANGLE(a) { REPEAT(3, function () { FORWARD(a); RIGHT(120) }) } function HOUSE(a) { SQUARE(a); FORWARD(a); RIGHT(30); TRIANGLE(a) } function THING() { FORWARD(100); RIGHT(90); FORWARD(100); RIGHT(90); FORWARD(50); RIGHT(90); FORWARD(50); RIGHT(90); FORWARD(100); RIGHT(90); FORWARD(25); RIGHT(90); FORWARD(25); RIGHT(90); FORWARD(50) } function CIRCLE(a) { REPEAT(360, function () { FORWARD(a); RIGHT(1) }) } function ARCR(b, a) { REPEAT(a, function () { FORWARD(b); RIGHT(1) }) } function ARCL(b, a) { REPEAT(a, function () { FORWARD(b); LEFT(1) }) } function PETAL(a) { ARCR(a, 60); RIGHT(120); ARCR(a, 60); RIGHT(120) } function FLOWER(a) { REPEAT(6, function () { PETAL(a); RIGHT(60) }) } function RAY(a) { REPEAT(2, function () { ARCL(a, 90); ARCR(a, 90) }) } function SUN(a) { REPEAT(9, function () { RAY(a); RIGHT(160) }) } function POLY(a, b) { REPEAT(360, function () { FORWARD(a); RIGHT(b) }) } function NEWPOLY(a, b) { REPEAT(100, function () { FORWARD(a); RIGHT(b); FORWARD(a); RIGHT(2 * b) }) } function POLYSPI(a, c, b) { if (b === undefined) { b = 1 } FORWARD(a); RIGHT(c); if (a < 500) { POLYSPI(a + b, c, b) } } function MULTISPI(c, d, b, a) { if (a === undefined) { a = 1 } else { a += 1 } FORWARD(c); RIGHT(d); if (a < 500) { MULTISPI(c * b, d, b, a) } } function INSPI(b, d, c, a) { a = (a === undefined) ? 1 : a; FORWARD(b); RIGHT(d); if (a < 500) { INSPI(b, d + c, c, a) } } function SUBSPIRO(b, d, a) { var c = 1; while (c <= a) { FORWARD(b * c); RIGHT(d); c++ } } function SPIRO(b, c, a) { REPEAT(100, SUBSPIRO, [b, c, a, 0]) } function SUBGSPIRO(b, e, a, d) { var c = 1; while (c <= a) { FORWARD(b * c); if (d.indexOf(c) > -1) { LEFT(e) } else { RIGHT(e) } c++ } } function GSPIRO(b, d, a, c) { REPEAT(100, SUBGSPIRO, [b, d, a, c]) } function RAND(b, a) { return b + Math.random() * (a - b) } function RANDOM_MOVE(d, c, b, a, e) { REPEAT(e || 1000, function () { FORWARD(RAND(d, c)); RIGHT(RAND(b, a)) }) } function RANDOM_MOVE_IN_BOX(d, c, b, a, e) { REPEAT(e || 1000, function () { RIGHT(RAND(b, a)); CHECK_FORWARD(RAND(d, c)); if (STUCK()) { RIGHT(180) } }) } function RANDOM_COLOR() { var c = "0123456789ABCDEF"; var a = ""; for (var b = 0; b < 6; b++) { a += c.charAt(Math.round(Math.random() * 15)) } return "#" + a } function FIND_BY_SMELL1() { ANIMATE(function () { FORWARD(1); if (SMELL() == "weaker") { RIGHT(1) } }) } function FIND_BY_SMELL2(a) { ANIMATE(function () { FORWARD(1); if (SMELL() == "weaker") { RIGHT(a) } }) }; var feedback = document.getElementById("feedback"); var buffer = document.getElementById("turtle_buffer"); function RUN() { var buftext = buffer.value; feedback.innerText = ""; try { eval(buftext) } catch (e) { feedback.innerText = e.message } } INIT("canvas", "#000000", "#FFFF00");
Turtle Graphics Explorer
Your browser does not support canvas.
Turtle Shell:
a turtle graphics explorer.
//use valid javascript and procedures below, then click 'RUN' //eg: HIDE_TURTLE();//speedup rendering REPEAT(50, function(){ SET_LINE(RANDOM_COLOR()); RANDOM_MOVE_IN_BOX(RAND(-10,10), RAND(-10, 10), RAND(-90, 90), RAND(-90, 90)); }); SHOW_TURTLE(); /* PROCEDURES... FORWARD(len); BACK(len); RIGHT(angle); LEFT(angle); REPEAT(times, fn, args); PENDOWN(); PENUP(); HIDE_TURTLE(); SHOW_TURTLE(); RESET(); SQUAREPIECE(size); SQUARE(size); RECTANGLE(side1, side2); TRIANGLE(size); HOUSE(size); THING(); CIRCLE(size); ARCR(r, deg); ARCL(r, deg); PETAL(size); FLOWER(size); RAY(r); SUN(size); POLY(side, angle); NEWPOLY(side, angle); POLYSPI(side, angle, inc); MULTISPI(side, angle, factor, iter); INSPI(side, angle, inc, iter); SUBSPIRO(side, angle, max); SPIRO(side, angle, max); SUBGSPIRO(side, angle, max, list); GSPIRO(side, angle, max, list); RAND(min, max); RANDOM_MOVE(d1, d2, a1, a2, times); RANDOM_MOVE_IN_BOX(d1, d2, a1, a2, times); SET_BG(color); SET_LINE(color); BEGIN_FILL(color); END_FILL(); SET_FOOD(x, y); SMELL(); ANIMATE(fn, max); STOP_ANIM(); FIND_BY_SMELL1(); FIND_BY_SMELL2(TURN); SOURCE: http://github.com/bigfish/turtle */
body { font-family:Verdana, Helvetica, Arial; padding:0; margin:0 } #instructions { padding-left:.5em; font-size:.8em } #feedback { color:red; margin:0; padding:0; font-size:.6em } #title { display:inline; font-size:15px; margin:5px 0 5px 5px } #subtitle { display:inline; font-size:12px } #turtle_buffer { display:block; width:98%; height:510px; margin:5px; padding:1% } input[type=button] { margin-left: 5px }
Pop out
Help
About
×
×