{ "metadata": { "language": "Julia", "name": "", "signature": "sha256:35c9e2895819e736345a88118033597361c065db02e99d263b4eeba4ca2fccef" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "# This notebook is a semi top-down explanation. This cell needs to be\n", "# executed first so that the operators and helper functions are defined\n", "# All of this is explained in the later half of the notebook\n", "\n", "using Compose, Interact\n", "Compose.set_default_graphic_size(2inch, 2inch)\n", "\n", "points_f = [\n", " (.1, .1),\n", " (.9, .1),\n", " (.9, .2),\n", " (.2, .2),\n", " (.2, .4),\n", " (.6, .4),\n", " (.6, .5),\n", " (.2, .5),\n", " (.2, .9),\n", " (.1, .9),\n", " (.1, .1)\n", "]\n", "\n", "f = compose(context(), stroke(\"black\"), line(points_f))\n", "\n", "rot(pic) = compose(context(rotation=Rotation(-deg2rad(90))), pic)\n", "flip(pic) = compose(context(mirror=Mirror(deg2rad(90), 0.5w, 0.5h)), pic)\n", "above(m, n, p, q) =\n", " compose(context(),\n", " (context(0, 0, 1, m/(m+n)), p),\n", " (context(0, m/(m+n), 1, n/(m+n)), q))\n", "\n", "above(p, q) = above(1, 1, p, q)\n", "\n", "beside(m, n, p, q) =\n", " compose(context(),\n", " (context(0, 0, m/(m+n), 1), p),\n", " (context(m/(m+n), 0, n/(m+n), 1), q))\n", "\n", "beside(p, q) = beside(1, 1, p, q)\n", "\n", "over(p, q) = compose(context(),\n", " (context(), p), (context(), q))\n", "\n", "rot45(pic) =\n", " compose(context(0, 0, 1/sqrt(2), 1/sqrt(2),\n", " rotation=Rotation(-deg2rad(45), 0w, 0h)), pic)\n", "\n", "# Utility function to zoom out and look at the context\n", "zoomout(pic) = compose(context(),\n", " (context(0.2, 0.2, 0.6, 0.6), pic),\n", " (context(0.2, 0.2, 0.6, 0.6), fill(nothing), stroke(\"black\"), strokedash([0.5mm, 0.5mm]),\n", " polygon([(0, 0), (1, 0), (1, 1), (0, 1)])))\n", "\n", "function read_path(p_str)\n", " tokens = [try parsefloat(x) catch symbol(x) end for x in split(p_str, r\"[\\s,]+\")]\n", " path(tokens)\n", "end\n", "\n", "fish = compose(context(units=UnitBox(260, 260)), stroke(\"black\"),\n", " read_path(strip(readall(\"fish.path\"))))\n", "\n", "rotatable(pic) = @manipulate for \u03b8=0:0.001:2\u03c0\n", " compose(context(rotation=Rotation(\u03b8)), pic)\n", "end\n", "\n", "blank = compose(context())\n", "\n", "fliprot45(pic) = rot45(compose(context(mirror=Mirror(deg2rad(-45))),pic))\n", "\n", "# Hide this cell.\n", "display(MIME(\"text/html\"), \"\"\"\"\"\")" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "display_data" }, { "html": [ "" ], "metadata": {}, "output_type": "display_data" }, { "html": [ "" ], "metadata": {}, "output_type": "display_data" } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Functional Geometry\n", "*Functional Geometry* is a paper by Peter Henderson ([original (1982)](users.ecs.soton.ac.uk/peter/funcgeo.pdf), [revisited (2002)](https://cs.au.dk/~hosc/local/HOSC-15-4-pp349-365.pdf)) which deconstructs the MC Escher woodcut *Square Limit*\n", "\n", "![Square Limit](http://i.imgur.com/LjRzmNM.png)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "> A picture is an example of a complex object that can be described in terms of its parts.\n", "Yet a picture needs to be rendered on a printer or a screen by a device that expects to\n", "be given a sequence of commands. Programming that sequence of commands directly is\n", "much harder than having an application generate the commands automatically from the\n", "simpler, denotational description." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "A `picture` is a *denotation* of something to draw.\n", "\n", "e.g. The value of f here denotes the picture of the letter F" ] }, { "cell_type": "code", "collapsed": false, "input": [ "f" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", "\n", "\n", "\n" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAABmJLR0QA/wD/AP+gvaeTAAACsUlEQVR4nO3doW4VURRA0QOpQleji8bzD/jahn+qfn9SXWyx6HosiPYZDCm5k5l2r5WMPTl5mT03IyZvBgAAAAAAAAAAAAAAAIDX4d3ieaeZ+bR4JvztYWauVwy6WDHk2Wlmvs7Mh4UzYVMrA/g0Tzf/9cz8WDgXzq7m6UG7zMoAzn7MzP0Gc2G593svAHsSAGkCIE0ApAmANAGQJgDSBECaAEgTAGkCIE0ApAmANAGQJgDStvgeYIXrmfmy9xIczuXqgUcN4MvM3Oy9BG/fUQM4O83M3d5LcDiPqwYdPYC7mbndewneLi/BpAmANAGQJgDSBECaAEgTAGkCIE0ApAmANAGQJgDSBECaAEgTAGkCIE0ApAmANAGQJgDSBECaAEgTAGkCIE0ApAmANAGQJgDSBECaAEgTAGkCIE0ApAmAtKP/RdLHmfm89xKvzMPM/Np7iaL7mfk9a27Y2+dZrpdfHhgvcNQT4OfMfN97iVfmamY+7L1E2coTgJfz+/8HL8GkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIg7ahfhN3OzM3eS/D2OQFIO+oJcPZtnk4D2IQTgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgLSLDWZeLZhxuWAG/NMWAZw2mAmbWBnAw8JZZ48bzAQAAAAAAAAAAAAAAAAAXp0/yepqRJ+VfkgAAAAASUVORK5CYII=", "prompt_number": 2, "svg": [ "\n", "\n", "\n", " \n", "\n", "\n" ], "text": [ "Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0)" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basic Operations on Pictures\n", "\n", "We begin specifying the algebra of pictures we will use to describe *Square Limit* with a few operations that operate on pictures to give other pictures, namely:\n", "\n", "* `rot : picture \u2192 picture`\n", "* `flip : picture \u2192 picture`\n", "* `rot45 : picture \u2192 picture`\n", "* `above : picture \u00d7 picture \u2192 picture`\n", "* `above : int \u00d7 int \u00d7 picture \u00d7 picture \u2192 picture`\n", "* `beside : picture \u00d7 picture \u2192 picture`\n", "* `beside : int \u00d7 int \u00d7 picture \u00d7 picture \u2192 picture`\n", "* `over : picture \u2192 picture`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Rotate and flip\n", "\n", "#### `rot : picture \u2192 picture`\n", "\n", "Rotate a picture anti-clockwise by 90\u00b0" ] }, { "cell_type": "code", "collapsed": false, "input": [ "rot(f)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", "\n", "\n", "\n" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAABmJLR0QA/wD/AP+gvaeTAAACxElEQVR4nO3brW4WYRRG0VNShQaL5rNUcxF4NDeB5SYItr73gKZYatGgsSD4SWgCBfpOhnavlYx9csRsMWJmAAAAAAAAAAAAAAAAALgZjhZunc7MYeHezMyLmTlbvAk/HC/cOszMo4V7MzP3F+/BT1YG8N3Tmbm45sbzmXmy4Bb4rS0CuJiZ82tufFxxCFzlzt4HwJ4EQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIg7XjvA26YuzNz2GD3fINN/oAA/s5hZt5ssHu0wSZ/QAD/5tPMXCzYebRgg2sQwL+5mJmTBTufF2xwDT6CSRMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASDve+4ArPN77gEsebLT7bKPd2+rDzJytGPrfA3j67bntXu59wA3zdm55AK/3PuAK7xftvFq0U3FvZp7sfcSvnM/M55k52fsQbq2T+fqOna8a9BFMmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkLbFDzEPN9iEmQ3erZUBvJuvB54u3IRNHS3eO52Zw+JNuOzdNP4VBwAAAAAAAAAAAAAAAOCHL1upHgtG+Ka4AAAAAElFTkSuQmCC", "prompt_number": 3, "svg": [ "\n", "\n", "\n", " \n", "\n", "\n" ], "text": [ "Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(-1.5707963267948966,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0)" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "### `flip : picture \u2192 picture`\n", "\n", "Flip a picture along its virtical center axis" ] }, { "cell_type": "code", "collapsed": false, "input": [ "flip(f)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", "\n", "\n", "\n" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAABmJLR0QA/wD/AP+gvaeTAAACuUlEQVR4nO3doW4UURSA4QOpQoNFtxY0D1Ffz0NgeQo0nndAA5ZaNGgsiCIIaUi63GG2+39fcu3JySR/dkbc7AwAAAAAAAAAAAAAAAAA98ODhbPezszFwnlwm88zc7Vq2MoAPs7Ms4Xz4DbfZ+bdLIrgbMWQP1zNzPUGc+F8Fr9pbBHA9dz8GsDRe7j3ArAnAZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgbYv7AK9m5tsGc7nf3s/NZZajskUAlxvM5DScdACvZ+bJwnmchhez8BL7aisDeLdwFqflaAPwEUyaAEgTAGkCIE0ApAmANAGQJgDSBECaAEgTAGkCIE0ApAmANAGQJgDSBECaAEgTAGkCIE0ApAmANAGQJgDSBECaAEgTAGkCIE0ApAmANAGQJgDSBECaAEjb4k/yTtmjmbnYe4l75uneC/yNAO7mYmY+7L0E6wjgMN9n5nrvJe6ZL3svcBsBHOZ6Zp7vvQT/zkcwaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBPAYZ7NzA/nTufNQU96YwIgTQB383FmHjh3Oi8PetL/iQBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIO9t7ATIez8zzf5xxvmKR3wmA/+Xy1zkqAmBrX2fm0+KZnxfPAwAAAAAAAAAAAAAAAODo/QTsgma/zWtcfgAAAABJRU5ErkJggg==", "prompt_number": 4, "svg": [ "\n", "\n", "\n", " \n", "\n", "\n" ], "text": [ "Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),Mirror(1.5707963267948966,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0)" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "rot(flip(f))" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", "\n", "\n", "\n" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAABmJLR0QA/wD/AP+gvaeTAAACuUlEQVR4nO3boU6WcRiH4UdHIpPNUMXsOdjJehBmT4LMmZjJUM10qwZhc87hkP+7F7iva/vqbw8bNy9feGcAAAAAAAAAAAAAAAAAeB5eLd67mJmTxZvwp6uZOVsxdLBi5NbFzHyYmcOFm7CplQGczK9f/rOZuV64C3eO59cf2mVWBnDnemYuN9iF5V7vfQDsSQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASNvifYAVzmbm/d5H3OPbzHxZsHO+YKPkaO8D7nM5Mz9m5nTB1vnt1lP9rHrhZ++f47l+lr1w9VSfAHcuZubr3kf85s3MfN5g99MGmy/Zzd4H/M0WT4CPC7ZWOp1tngDsxJdg0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0g72PuCZOp6Zy72P4PEE8H8OZ+bt3kfweAJ4mKuZebf3EawjgIf5Pv71eVF8CSZNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkCYA0g422DxesHG0YAP+aYsALjbYhE2sDOBq4dadmw02AQAAAAAAAAAAAAAAAIBn5ycD4pV9LPD+xwAAAABJRU5ErkJggg==", "prompt_number": 5, "svg": [ "\n", "\n", "\n", " \n", "\n", "\n" ], "text": [ "Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(-1.5707963267948966,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),Mirror(1.5707963267948966,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0)" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### fliprot45 : picture \u2192 picture\n", "\n", "rotate the picture anti-clockwise by 45\u00b0, then flip it across the new virtical axis. In the paper this is implemented as $flip(rot45(fish))$. This function is rather specific to the problem at hand." ] }, { "cell_type": "code", "collapsed": false, "input": [ "fliprot45(fish) |> zoomout # zoomout shows the bounding box" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", "\n" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAABmJLR0QA/wD/AP+gvaeTAAALK0lEQVR4nO3de4wV5R3G8S+wCuKK61oQFLtBUUS0iGipEqEVL0WL94BYbxW1GC1N01RtSU20qRgvjTbBNLRNq422jUn7R7lUqoKiAipg8QaKgKAIiisgCoqy/eP3bNaYo12cmPed2eeTEOZhOLu/3XPmzHln3guYmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZdQAXAtOAI5RvUO4O7K7tm7TvMOVLlUcrj1S+Rrmv8h3AVG331L6fKg9TPlt5vPJg5cnKewFdtP1r7TtEeYLyKconKk9UblK+Ffidthu171rlY5TPUx6rfLTy9coNytOAW7R9kPKVyqOUT1a+Qvkg5SnKnYC9tf1z7RuiPE75XOVjlX+mvK/y3cDt2m7SvmnE82m7YBrQApymvFS5EdhT28u1b5TyPcqTla9Snq58lPJGYLu2+2vfXOWLlKcoT1U+U3mR8n7EgdgCrNS+Ecr3K1+rPEn5H8qtL543gU+03aR9TyiPU259Md2p3HpALFBuPahbgLXaPk75AeWfKLce5H9XPl55jXJnYH9tP6V95yj/Vvk25fHK85T7Ke8ANmj7GO17mrbnMStdUhfwOfYgfpFPEr/gLcBbwMPEL3MH8AYwC3gB+BB4WftXA1uBxcBjxIv9HX2dBcA2YL0euwT4WI95UF9jG/A8MAdYB2wGFhIvzM3A28Ajn6pjHTBTj/kQeAV4CFilOpYAj+pxzcDjquMD4oXyb9X6CfCa6liuOl7U93pD3/spPX6Tvt4c/dsO4mCaCTwHfASsUB0rgfeBZ1XHW8C7+nnma98GYDbwjOpYo7qWqY6XVMdaPRdPq4539fudqzo++lQdS5VfBe7Tc2Pt1Pruf+X/+4+WvZHAn2n7eJqVzqkL+BzriHe/5tSFWGEDgEto+7hl1qEcAJxEXKiwdjocOJW2Bp5Zh+I2QHWMJRrTN6YupJa61AV8jnlE+2RZ6kKssAaiHdAndSFmKdQB9UDX1IXUkut9gDHABcB7xHVlK686oBuwk7hfYe3gNkB1XEk8l9NSF1JLrm2Ae4k7i/NSF2KFNRN3yV9PXYiZlcQkoi/K6NSFWGEHEs/joNSF1JJrV4gjiBthB6YuxAobTXSO+3HqQmrJ9SrQIqID1QLaui1bOXUnepjOI3qImpl9sTuJPu+XpC7EChtKdIMYk7qQWnJtA3QmPp51Sl2IFTaUGM6a5QFg9lUbQIyRHp66kDLpDQykbcC3WYfirhDVcRox3jjLy6C5doV4kRjQ7dvn5deXmI5ldeI6zJJoIEb4eTzALjge+AFwaOpCzFJwG6A6LiXmErorcR015doGmE5M1rQ4dSFmZpWVa2e4C4Grie4QaxLXYsU0EJPw1hFTRVo7uA1QHVkPicz1DLAKmEFM4LolcS1WzH5AL+K5XJi4FjMrgxuIwRPnpi7EChsAXEamk+Pm2h26L3AkbauOWHmNBP5IptOj56o7sRJMlrOJ2S7JekBMrnYnDoJcG+lmXylfBq2OE4DfE2uvZSfXNsAGYq2tTakLscIGApcTB4JZh5P1xFi5GkCsrbt/6kLMUnAboDrOI5ZuvSF1IbXk2h16PjGn/MupC7HCGompLuenLsQshd2BfYjL2tnJ9Tr7aGAc0X12feJarJhO+vMxMUeotYPbANWRdXfoXNsA9wFL8AoxVbAJWI7XejOz9roa+BexSIaV2wHAScBhqQspE7cBqiPrNkCuV4GeBf5CrBCzLXEtVkw9cRVoHvG8mlkucj0D3EFcCVqP15UquyFEb9B6oodvVnLtDt0N6EHcRbRyOxb4FXBW6kLMUhgITARGpC6kTHoC/YmzgFmH48ug1XEqMdnxNakLqSXXrhDLgUeBdakLscKagNPxc2kdVCMwmJjrydppGDFDdP/UhZil4DZAdVwMvAP8JnUhteTaBpgFNONb51VQR4wG8z0ds9zk2hViPHHzZBOwNnEtVkwP4OvEmeD9xLWUhtsA1eHu0F/CWuBB4HFgc+JarJg+xARnT+KpUcysPSYDi4CzUxdihR1CzAw9LHUhteTaHboJOJroFGfl9h3gXmBC6kLKZC9idcE9UhdihR0L3IzHA+ySLsBuxFhSsw7Hl0GrYzhwN3BB6kJqybUNsBFYjRfJroJBwFXAtxPXYZZEE3AG8I3UhZRJf2JNqd6pCzFLwW2A6jgHWEzc28lOrt2hnyIuha5IXYgV9jVibqBnUhdilkI3oBfxhpadXDvDnQKcS6wQsyFxLVbMTuAj/WlJXEtpuA1QHVl3h861DfA34HngidSFWGFbgFXA26kLMbPPyLUNMBH4BTEwfmXiWqyYPsBQYlB8c+JaSsNtgOrIug2Q6xngOeCvxBC6DxLXYsX0IHr2Pk6s/Glm9sVuJSZT/X7qQqywwcB1ZLriZ67doXsQHeG6py7EChsG3ELc2DTrcAYBPyLGBls7NRKzie2ZuhCzFHwZtDpOBv5JjArLTq5dIVYQM4mtT12IFdaPmBHCXSGsQ+pJTI3SlLqQMjkGGAcclLoQsxTcBqiOC4mPsrelLqSWXNsAs4H3gKWpC7HCuhHDIutTF2Jmn5FrZ7ixwOXE2gCvJ67Fiqkn1gfoAmxLXEtpuA1QHe4O/SWsAx4iutBuSlyLFXMAcVf/Sf0xM/ti1xGDYc5MXYgVdjBwPnFvJzu5doc+GPgWsUiGldsoYnSf23O7oAHoi3uDVsEw4HbgvNSFmFlJ+DJodRwH3EX07cpOrm2Ad4E3iLlBrdyOBCYRbQGzDqcfMR54SOpCyqQfcRWoV+pCzFJwG6A6zgIWAtenLqSWXLtDLyIGxnte0PLrBXwT+G/qQsxS6E70B2pIXUgtuXaGG0V0g9gKvJW4FitmB/E8bk9dSJm4DVAdWXeHzrUN8ACwnOgQZ+W2lRjUlOXaALl+BFpJHJxDiCm1uwKXEVNrvET0Lx9HjDddS0y78T1iOZ5m4HRiKr4VwId67JFEQ6wRuIiYrmMFMJBYy3YnMXh7JDGR63piXPJYYLgeWwdMIC7Tvkj0Vzqf6LP0GrEQxBjiSX8HGA2cqJ9nO3ApcBTwLPGZ+GKiw98rwADa5s98k1go/LvER8At2ncCMXV8J2LE3MHAC8SIq/HESoyr9Xs7g5hafqN+nlHat03fd6h+tz2AS4iFLF4GDiH67XQmxmUM18+xkRihdzYwQt93J3CFHvM8MZ/rBcDexLJIg4mZPaYQHeKsna4AXiVOnV2JF2sLbfPLj1G+W/lm5YuVH1E+VPkD2t6BBmvfDOUfKv9S+U/KJysvU64nXrQtxJMN8QJtAf6gfKPyBOUHlQcpbyYOKoDDtW+28mXKNym3fgw8TXmp8j7EAddCnCUhXtwtwD3Kk5UnKk9XPkp5I22fyftr3xzli5SnKE9Vbu2avki5F7HqSwttV+tGKN+vfK3yJDKV6xngcOLdZTHx5EEcBAuAx4h3/jptP0e8871HjCJ7HdgXWAPMBN4n3pmWEC/I3fT/nyAW5O4OfAzMJd6JG4hZzGYTL5SexDvjdNXUS3U8Shycu6mOpfq6W4GHiTPTvvp7lv69N3EmmaX6e6iOhcAe+vpziRf23sRZZDZxFmg9Y81Qvb31uDmqoyswjzi71BMH/cPEmamR6Foyizib7Kff20ziNdBAjNaarzpa9PMtUx3NwH+IJWt7Em9OM4ilT/uojkeIA6Kb6lhCHKjbtW8VZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlX2P+57fCsVQ2X+AAAAAElFTkSuQmCC", "prompt_number": 6, "svg": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n" ], "text": [ "Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0),Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.6,0.0,0.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{PolygonPrimitive}([PolygonPrimitive([Point(Measure{Int64,MeasureNil}(0.0,0,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),0,0.0,0.0)),Point(Measure{Int64,MeasureNil}(0.0,1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),0,0.0,0.0)),Point(Measure{Int64,MeasureNil}(0.0,1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),1,0.0,0.0)),Point(Measure{Int64,MeasureNil}(0.0,0,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokeDashPrimitive}([StrokeDashPrimitive(Measure[Measure{MeasureNil,MeasureNil}(0.5,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.5,MeasureNil(),MeasureNil(),0.0,0.0)])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNode{ComposeNode}(Property{FillPrimitive}([FillPrimitive(nothing)]),ListNull{ComposeNode}())))),0,false,false,false,false,nothing,nothing,0.0),ListNode{ComposeNode}(Context(BoundingBox(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0),Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.6,0.0,0.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{Int64,MeasureNil}(0.0,0,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),0,0.0,0.0),Measure{Float64,MeasureNil}(0.0,0.7071067811865475,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.7071067811865475,0.0,0.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(-0.7853981633974483,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),Mirror(-0.7853981633974483,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Int64,Int64,Int64,Int64}(0,0,260,260,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{PathPrimitive}([PathPrimitive(PathOp[MoveAbsPathOp(Point(Measure{Float64,MeasureNil}(0.0,-4.2207441,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),256.03034,0.0,0.0))),CubicCurveAbsPathOp(Point(Measure{Float64,MeasureNil}(0.0,-28.145511,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),234.64868,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,-48.352478,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),216.63385,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,-64.254835,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),194.25807,0.0,0.0))),CubicCurveRelPathOp(Point(Measure{Float64,MeasureNil}(0.0,0.0,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-0.98162,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,1.409231,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-4.58443,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,3.131624,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-8.00625,0.0,0.0))),CubicCurveRelPathOp(Point(Measure{Float64,MeasureNil}(0.0,9.780189,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-19.42994,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,18.510553,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-32.02794,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,40.347284,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-58.22148,0.0,0.0))),LineRelPathOp(Point(Measure{Float64,MeasureNil}(0.0,11.6713579,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-14.0,0.0,0.0))),LineRelPathOp(Point(Measure{Float64,MeasureNil}(0.0,-0.5810892,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-5.95367,0.0,0.0))),CubicCurveAbsPathOp(Point(Measure{Float64,MeasureNil}(0.0,-12.866405,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),70.238313,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,-11.000232,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),42.188243,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,-1.6245701,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),6.280326,0.0,0.0))),CubicCurveAbsPathOp(Point(Measure{Float64,MeasureNil}(0.0,-0.44826504,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-4.552565,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,2.1569119,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),1.0296139,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,16.04983,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),11.409158,0.0,0.0))),CubicCurveAbsPathOp(Point(Measure{Float64,MeasureNil}(0.0,31.80326,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),24.108892,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,46.438782,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),31.394353,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,61.228466,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),55.314218,0.0,0.0))),LineRelPathOp(Point(Measure{Float64,MeasureNil}(0.0,18.47934,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.80424,0.0,0.0))) \u2026 ClosePathOp(),MoveRelPathOp(Point(Measure{Float64,MeasureNil}(0.0,-1.57762,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-18.53569,0.0,0.0))),CubicCurveRelPathOp(Point(Measure{Float64,MeasureNil}(0.0,-1.06389,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-0.64878,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,-1.93526,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-1.10287,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,-2.83379,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-2.28729,0.0,0.0))),CubicCurveRelPathOp(Point(Measure{Float64,MeasureNil}(0.0,-1.06757,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-1.40726,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,-1.97908,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-3.0679,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,-2.64102,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-4.68559,0.0,0.0))),CubicCurveRelPathOp(Point(Measure{Float64,MeasureNil}(0.0,-1.45362,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-3.55248,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,-2.39222,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-6.76012,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,-0.44843,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),-6.76012,0.0,0.0))),CubicCurveRelPathOp(Point(Measure{Float64,MeasureNil}(0.0,0.4823,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.0,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,1.29583,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),1.99069,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,2.05446,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),3.94922,0.0,0.0))),CubicCurveRelPathOp(Point(Measure{Float64,MeasureNil}(0.0,0.51683,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),1.33427,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,1.00818,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),2.65362,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,1.35198,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),3.31844,0.0,0.0))),CubicCurveRelPathOp(Point(Measure{Float64,MeasureNil}(0.0,0.84844,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),1.64069,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,2.88499,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),3.67725,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,4.52568,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),4.52568,0.0,0.0))),CubicCurveRelPathOp(Point(Measure{Float64,MeasureNil}(0.0,0.77517,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),3.93209,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,-1.33538,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),2.36354,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,-2.00888,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),1.93966,0.0,0.0))),ClosePathOp()])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0)" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "### Juxtaposition\n", "#### `above : picture \u00d7 picture \u2192 picture`\n", "\n", "place a picture above another." ] }, { "cell_type": "code", "collapsed": false, "input": [ "above(f, f)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", "\n" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAABmJLR0QA/wD/AP+gvaeTAAADgUlEQVR4nO3dMY4TSxiF0TtPLyJmUtgDQzqLMDEpYhEmhEVAygLYAzGTk0LKpMS8oHFiPQmLqVaXfc+RKv1VsvRNyWpXTwIAAAAAAFyqq8HzdkmuB8+EYz+SfNp6E8d2Sb4l+WVZK6+7DPLvqEFJ3iR5kqXM+4Fz4eBxlj+0U7rLUufN1hvhYt1k8Anwz6hBcI4EQDUBUE0AVBMA1QRAtZHPAUbaJ3mx9SaYzqPRA2cN4GmSZ1tvgss3awAH7zLhbz7Y3M9Rg2YP4HsGPvWDY74EU00AVBMA1QRANQFQTQBUEwDVBEA1AVBNAFQTANUEQDUBUE0AVBMA1Wa/D/AyyfOtN3Fm3ma5R8EJZg/g9vfidO8jgJPNGsDHJF+23sSZ2Wd5OTEb8XLcbfn8/4IvwVQTANUEQDUBUE0AVBMA1WZ9DvAhyautN8HlcwJQbdYT4OB1ltMAVuEEoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKqt8T/C9knuHzjjdsRG4E/WCGC3wkxYxdXAWbsk1wPnJcnnJF8HzwQAAAAAAAAAAAAAAOCMjbwQk6xzKQaO/UjyaetNHNsl+Zbkl2WtvO4yyMg7wW+SPMlS5kMvxcP/eZyJ75zfZanzZuuNcLFuMvgE8F4gqgmAagKgmgCoJgCqCYBqa7wbdIR9khdbb4LpPBo9cNYAniZ5tvUmuHyzBnDwLhP+5oPN/Rw1aPYAvmfgUz845ksw1QRANQFQTQBUEwDVBEA1AVBNAFQTANUEQDUBUE0AVBMA1QRANQFQbfb7AC+TPN96E2fmbZZ7FJxg9gBufy9O9z4CONmsAXxM8mXrTZyZfZaXE7MRL8fdls//L/gSTDUBUE0AVBMA1QRANQFQbdbnAB+SvNp6E1w+JwDVZj0BDl5nOQ1gFU4AqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoNoa/yNsn+T+gTNuR2wE/mSNAHYrzIRVXA2ctUtyPXBeknxO8nXwTAAAAAAAAAr8B8KZcTj1ZWwBAAAAAElFTkSuQmCC", "prompt_number": 7, "svg": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n" ], "text": [ "Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{Int64,MeasureNil}(0.0,0,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0),Measure{Int64,MeasureNil}(0.0,1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNode{ComposeNode}(Context(BoundingBox(Measure{Int64,MeasureNil}(0.0,0,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),0,0.0,0.0),Measure{Int64,MeasureNil}(0.0,1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0)" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### `above : int \u00d7 int \u00d7 picture \u00d7 picture \u2192 picture`\n", "\n", "given `m`, `n`, `picture1` and `picture2`, return a picture where `picture1` is placed above `picture2` such that their heights occupy the total height in m:n ratio" ] }, { "cell_type": "code", "collapsed": false, "input": [ "above(1, 2, f, f)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", "\n" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAABmJLR0QA/wD/AP+gvaeTAAADiElEQVR4nO3dsW4UVxiG4c8RFbRJu2k3tWsugrRJSuSLMCVcRFw7LbkHUjsttHYb2tBCsWxjRWKDzzBn93seadpfR5bfHY12z5kEAAAASpwNnneZ5MfBM+G+2ySv1l7EfZdJ/kny0eVa+LrJII9GDUryc5LvsyvzbuBc2Ntk90E7pZvs6jxfeyGcrPMMvgN8N2oQHCMBUG3kM8BImyQ/rL0IprMdPXDWAF4keb72Ijh9swawd5fk/dqLYDpvRw2aPYBXSa7WXgSny0Mw1QRANQFQTQBUEwDVBEA1AVBNAFQTANVm/yb46doLOEKv4+cjB5s9gF8/XxzuJgI42KwBvFl7AUfoWXZbUlmJLZHr8vf/Ch6CqSYAqgmAarM+BF/Flki+AXcAqs16B9i7iC2RLMgdgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqDaEseiPMvDD2jdjlgIfMkSAVwuMBMWMTKA19kd0T3S28HzAAAAAAAAAAAAAAAAOHJng+dtkzwZPBPu+zfJuxGDRgawTfJn7OdleX/n4fvOk4zdEvlHdv/875J8GDgX9h5n4g/YmyQfM6hM+A/n2f2PDdt77lwgqgmAagKgmgCoJgCqCYBqAqCaAKgmAKotcTz6CE+T/LT2IpjOZvTAWQP4LcnztRfB6Zs1gL2/Muhnr5yU21GDZg/gOsnV2ovgdHkIppoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKg2+7Eol0ku1l7EkfklzlI62OwBbLLAcXgnznua/4dZA3iZ5Pe1F3FkrjPxK0RnNWsAd58vDufdzF/BQzDVBEA1AVBNAFQTANUEQDUBUE0AVBMA1Wb9Jvgq3hLJN+AOQLVZ7wB7F/GWSBbkDkA1AVBNAFQTANUEQDUBUE0AVBMA1QRANQFQTQBUEwDVBEA1AVBNAFQTANUEQDUBUE0AVBMA1QRANQFQTQBUEwDVBEA1AVBNAFQTANUEQDUBUE0AVBMA1QRANQFQTQBUEwDVBEA1AVBNAFQTANUEQDUBUE0AVBMA1QRANQFQTQBUEwDVHi0w8zrJhwfO2IxYCHzJEgFsF5gJizgbOGub5MnAeUlym+T94JkAAAAAAAAAAHCKPgGcVdT3Y5OxYwAAAABJRU5ErkJggg==", "prompt_number": 8, "svg": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n" ], "text": [ "Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{Int64,MeasureNil}(0.0,0,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.3333333333333333,0.0,0.0),Measure{Int64,MeasureNil}(0.0,1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.6666666666666666,0.0,0.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNode{ComposeNode}(Context(BoundingBox(Measure{Int64,MeasureNil}(0.0,0,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),0,0.0,0.0),Measure{Int64,MeasureNil}(0.0,1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.3333333333333333,0.0,0.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0)" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### `beside : picture \u00d7 picture \u2192 picture`\n", "\n", "Similar to `above` but in the left-to-right direction." ] }, { "cell_type": "code", "collapsed": false, "input": [ "beside(f, f)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", "\n" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAABmJLR0QA/wD/AP+gvaeTAAADAUlEQVR4nO3doXKUVxyH4T8dFBostWiK5SJSjc5NBAke26mtzz3gwdbXgsVXpAymQ75vOV+26fs8M1HZOXvmN3mzs2JnZwAAAAAAAAAAAAAAAAC4Hx5sfNzFzLw+8iL/U29m5nrBOfY/za37P9xwyMXMvJuZpytuFPNkwRn2P92t+28J4MncjH89M29/9EYRV3Pzh7uC/ffbvP+WAL76PDMfTrpOz+eDzrT/Npv3/+nIW8B/nQBIEwBpAiBNAKQJgDQBkCYA0gRAmgBIEwBpAiBNAKQJgDQBkLbn8wC3uZqZnxeed5+9PMNz2v+bzfuvDODXmXm+8Dz2sf8JVgbw1duZ+euAc++j92d4Tvt/c+v+RwRwPT66d07238GbYNIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQJoASBMAaQIgTQCkCYA0AZAmANIEQNoRX5H07IAzV/g0je/Osv8ORwTwxwFnrvD7zFye+xJ3wP47rAzgz4VnrfR4Zp6e+xJ3wP4nWBnAq4VnrXQ5M7+d+xJ3wP4n8CaYNAGQJgDSBECaAEgTAGkCIE0ApAmANAGQJgDSBECaAEgTAGkCIE0ApK38QMyHmXm+8Dz2sf8JvAKQdsSH4l/MzX8jzsP+O3gFIE0ApAmANAGQJgDSBECaAEgTAGkCIE0ApAmANAGQJgDSBECaAEgTAGkCIE0ApAmANAGQJgDSBECaAEgTAGkCIE0ApAmANAGQJgDSBECaAEgTAGkCIE0ApAmANAGQJgDSBECaAEgTAGkCIE0ApAmANAGQJgDSBECaAEgTAGkCIE0ApAmANAGQJgDSBECaAEgTAGkCIE0ApAmANAGQJgDSBECaAEgTAGkCIE0ApAmANAGQJgDSBECaAEgTAGkCIO3hjsc+nplfvvP7Rz94F77P/gfYE8DFPz+ch/0PsCWATzPzcceZX068C//O/gAAAAAAAAAAAAAAAAAwfwMlfzJuv9Cc/gAAAABJRU5ErkJggg==", "prompt_number": 9, "svg": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n" ], "text": [ "Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{Float64,MeasureNil}(0.0,0.5,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),0,0.0,0.0),Measure{Float64,MeasureNil}(0.0,0.5,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),1,0.0,0.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNode{ComposeNode}(Context(BoundingBox(Measure{Int64,MeasureNil}(0.0,0,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),0,0.0,0.0),Measure{Float64,MeasureNil}(0.0,0.5,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),1,0.0,0.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0)" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `beside : int \u00d7 int \u00d7 picture \u00d7 picture \u2192 picture`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "beside(1, 2, f, f)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", "\n" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAABmJLR0QA/wD/AP+gvaeTAAADeElEQVR4nO3dvXIbVQCG4Q8mldMmrWhNrZqLCC2hhLTpQ5uLwLTQJhdBS9LGrdNC67RJsc4MMEhGmv2R9nuemR2PLO3q+Fjv7qg4swkAAAAAAAAAAAAAAAAA5+GLPc+9SPLtXAOZwaskL0c4zmWS30Y4DtP4Lsn1/33xgx2/f5HkeZJHY4zoRLwZ4RiXSV7f/eQ0PTzkxbsC+CrDh/9lhn/4OXuSIegxPMzw4b9O8nSkYzKOX3PEiWlXAJ+9zzhnziVtJzjmh5z/vKzNh2N2+nLsUcA5EQDVBEA1AVBNAFQTANUEQDUBUE0AVBMA1QRANQFQTQBUEwDVBEC1+9YD/NsmyU9TDGRCS6/e+ibJ9wuPocHmmJ0ODeBxkh+OeaNiX8ecnaxDA/jsfcZZYD6ndwu//+8Zlu0xrZtDXnxsAH8luTpy31bXMWcnx5dgqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGrH3iLpIsl2zIHscJPhdkxr8CjzzNkcbjPc8unsHRvAZZI/xhzIDs+ynvtqPbnb1uBtVhLzoQHcZvjjp7bJcMZcgz8zz5zN4SLL33d5VIcGcJ15yr/Keu6t+/puW4Nt5rnyz8aXYKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqHbogpjVLYiYwY9Jfl56EPw3VwCqHbsofjWLomf0S4arASfEFYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqD+55fpNk+7fHlxOO5Zxc5J/zss9myoEwjaskH/dsb5Yb2qK22T8v+7arBcbLPXZdAW6SvN2z37sJxnIObrN/Xva5GXMgAAAAAAAAAAAAAAAAANDlE3P0TEWAL0RKAAAAAElFTkSuQmCC", "prompt_number": 10, "svg": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n" ], "text": [ "Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{Float64,MeasureNil}(0.0,0.3333333333333333,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),0,0.0,0.0),Measure{Float64,MeasureNil}(0.0,0.6666666666666666,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),1,0.0,0.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNode{ComposeNode}(Context(BoundingBox(Measure{Int64,MeasureNil}(0.0,0,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),0,0.0,0.0),Measure{Float64,MeasureNil}(0.0,0.3333333333333333,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),1,0.0,0.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0)" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "above(beside(f, f), f)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", "\n" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAABmJLR0QA/wD/AP+gvaeTAAADzElEQVR4nO3dsU4cVxiG4Y8oVeq4dVrc2m7JPZDabeKLIKVzEaF1eu4Bt6GnddrQpnaK8coRiszsckYz7Pc80lSsDkc/vDtadmdIAAAAAACAY3Uy83GnSX5cciNH6jrJ7YB1zP8wQ+Z/muR9kk+OvY9fDpj3fea/4Py/fegBmZ553mQq6cOMx5OcZfrFHcH89zd7/nMC2PmQMc9oDS4zLoAd859v9vy/WXgjsGkCoJoAqCYAqgmAagKg2j5/Bn3IH0leDFzvKXu+wvc0/y9mz39kAC+SvBy4Hvsx/wOMDGBn964lyccVvqf5f/Hg/JcI4DbJzQLrMo/578GLYKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoNoS1wNcJLlbYN3Hus502eCxM/89LBHA+QJrjrK5H8ACzH8PIwN4l+TZwPVGOct0meCxM/8DjAzgauBao232BzCQ+R/Ai2CqCYBqAqCaAKgmAKoJgGoj/wx6E/emXJP5H8AZgGpLfBTiddybck3mvwdnAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqDaPv8j7CzJ5Ve+/vyRe+HrzH8B+wRw+vlgHea/gDkBXCd5u8eaHw/cC//P/AEAAAAAAAAAAAAAAP7jZPB650meDV4T7vs7ydXam7jvPNPVSJ8cjoWPmwyyzzXBD/k104XZV0nuBq4LO99neqLdpJtMdb5aeyMcrVcZfAZwXyCqCYBqAqCaAKgmAKoJgGoj3wcY6SLJT2tvgs35bvSCWw3ghyQv194Ex2+rAez8lg1+5oPV/TNqoa0H8FcGvusH93kRTDUBUE0AVBMA1QRANQFQTQBUEwDVBEA1AVBNAFQTANUEQDUBUE0AVNv69QBvkrxeexNPzLtM11Eww9YDOPt8MN/vEcBsWw3gfZI/197EE3OR6ebErMTNcddl/gfwIphqAqCaAKgmAKoJgGoCoNpW3we4TPLz2pvg+DkDUG2rZ4Cdt5nOBrAIZwCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKg2hL/I+wiyd0j1zgbsRF4yBIBnC+wJiziZOBa50meDVwvSa6T3A5eEwAAAAAAgAL/Am+rgs3qNBfjAAAAAElFTkSuQmCC", "prompt_number": 11, "svg": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n" ], "text": [ "Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{Int64,MeasureNil}(0.0,0,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0),Measure{Int64,MeasureNil}(0.0,1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNode{ComposeNode}(Context(BoundingBox(Measure{Int64,MeasureNil}(0.0,0,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),0,0.0,0.0),Measure{Int64,MeasureNil}(0.0,1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{Float64,MeasureNil}(0.0,0.5,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),0,0.0,0.0),Measure{Float64,MeasureNil}(0.0,0.5,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),1,0.0,0.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNode{ComposeNode}(Context(BoundingBox(Measure{Int64,MeasureNil}(0.0,0,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),0,0.0,0.0),Measure{Float64,MeasureNil}(0.0,0.5,MeasureNil(),0.0,0.0),Measure{MeasureNil,Int64}(0.0,MeasureNil(),1,0.0,0.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0)" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "### Superposition\n", "\n", "#### `over : picture \u2192 picture`\n", "\n", "place a picture upon another" ] }, { "cell_type": "code", "collapsed": false, "input": [ "over(f, flip(f))" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", "\n" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAYAAABS3GwHAAAABmJLR0QA/wD/AP+gvaeTAAADdklEQVR4nO3dsYpcdRjG4TchRYhdTGOTEEkgtVsIgvaW9lsF3OAtaO8tCGube/ACBEEwaRUUJJVCSLqVVEmKmYUYsxGcbzxneZ8Hpn35szu/OTvF2ZMAAAAAAAAAAAAAAAAAcD5cGNy6n+TTJJcHN+F1z5J8l+RwYmwygCdJrg7uwVmeJnl3YujSxMjW6Sf/N0l+GNyFUx8l+SIr/SvjJMmLDF2a4A0Os3mPnUwNXpwagvNIAFQTANUEQDUBUE0AVBMA1QRANQFQTQBUEwDVBEA1AVBNAFQTANUmb4g5dTfJJztu3Ery3sBZWI8/kvy248atiYO8avKWyJMkVwb34Cx/JXlnYmjyCvBnkveTfJ3k0Y5bh0k+TvJjkl933GJZt5N8mOT7bP5xwi5uJPkym/fa6jzI5na1g4Gt4+3W0cAWyzrK5nd5PLB1sN16MLCVxJdgygmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGr7eErkpOuZeeTSlMtJbi59iH/xe5JnSx/iFdeXPsDbrD2Ar7Yv2Iu1BvAoycOlD/EGV5LcSfI86/qUTTZXp4tJfsnmMaJrs+uTQ1dv8imRazX+lMJBfv7/gS/BVBMA1QRANQFQTQBUEwDVBEA1AVBNAFQTANUEQDUBUE0AVBMA1QRANQFQba13hB0n+XzpQ7zFB9ncmLFGPy19gDN8m+Ro6UO8zhWAamsP4F6SC17n+nXvH7/VFVl7ALBXAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBqAqCaAKgmAKoJgGoCoJoAqCYAqgmAagKgmgCoJgCqCYBql/aweWdg49rAButyLcnBjhsT762/2UcA9/ewyfn32fa1KpMB/Dy4derxHjb5fz1O8nB4cx/vNQAAAAAAAAAAAAAAAABW7SV7ST8VkvyunQAAAABJRU5ErkJggg==", "prompt_number": 12, "svg": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n" ], "text": [ "Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),Mirror(1.5707963267948966,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Context(BoundingBox(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),1.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,1.0)),UnitBox{Nothing,Nothing,Nothing,Nothing}(nothing,nothing,nothing,nothing,Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.0)),Rotation(0.0,Point(Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.5,0.0),Measure{MeasureNil,MeasureNil}(0.0,MeasureNil(),MeasureNil(),0.0,0.5))),nothing,ListNode{ComposeNode}(Form{LinePrimitive}([LinePrimitive([Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.9,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.2,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.4,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.6,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.5,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.2,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.9,0.0,0.0)),Point(Measure{Float64,MeasureNil}(0.0,0.1,MeasureNil(),0.0,0.0),Measure{MeasureNil,Float64}(0.0,MeasureNil(),0.1,0.0,0.0))])]),ListNode{ComposeNode}(Property{StrokePrimitive}([StrokePrimitive(RGB{Float64}(0.0,0.0,0.0))]),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}()),0,false,false,false,false,nothing,nothing,0.0),ListNull{ComposeNode}())),0,false,false,false,false,nothing,nothing,0.0)" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Square Limit\n", "\n", "## The Fish\n", "\n", "We will now study some of the properties of the fish." ] }, { "cell_type": "code", "collapsed": false, "input": [ "fish |> zoomout" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "