A path, a goose & a bicycle

A tortoise (see: Transforms) with a 'path transform' is used to draw houses, bicycles, and geese.

#tortoise #path

Log in to post a comment.

// A tortoise, a goose & a bicycle. Created by Reinder Nijhoff 2019
// @reindernijhoff
//
// https://turtletoy.net/turtle/d93671dfa0
//

const pathInput = `M57,61C-72,51 -23,-84 36,-67`; // type=path, Click here to redraw the path

const path = Path(pathInput);

function Translate(x,y) { return p => [p[0]+x, p[1]+y]; }
function Scale(s) { return p => [p[0]*s, p[1]*s]; }
function Circle(r) { return p => { let ry = r - p[1]; a = p[0]/r;
                                   return [ry*Math.cos(a), ry*Math.sin(a)]; } }

function PathTransform(path) {
    return p => {
        const l = path.length();
        if (p[0] > l) return path.p(1);
        const x = p[0] / l;
        const y = p[1];
        const t = path.p(x);
        const n = [-t[3], t[2]];
        const nl = Math.hypot(...n);
        return [t[0] - y * t[3] / nl, t[1] + y * t[2] / nl];
    }
}

const scale = 0.5;
const numHouses = 400;

const turtle = new Tortoise();
turtle.addTransform(PathTransform(path));
for (let i=0; i<1000; i++) {
    turtle.forward(numHouses*25 / 1000); 
    turtle.forward(numHouses*25 / 1000);
}


function walk(i) {
    if (Math.random() > .67) {
        const h = new Tortoise();
        h.addTransform(Scale(.3));
        h.addTransform(Translate(i * 20 + 10, 0));
        h.addTransform(PathTransform(path));
        drawHouse(h);
    } else if (Math.random() > .5) {
        const h = new Tortoise();
        h.addTransform(Scale(.18));
        h.addTransform(Translate(i * 20 + 10, 0));
        h.addTransform(PathTransform(path));
        drawBicycle(h, 0, 0)
    } else {
        const h = new Tortoise();
        h.addTransform(Scale(.15));
        h.addTransform(Translate(i * 20 + 10, -3.5));
        h.addTransform(PathTransform(path));
        goose(h);
    }
    
    return i < numHouses - 1;
}

// House
function drawHouse(t) {
    square(t, [-10,-20], [30,0]);
    square(t, [-5,-15], [2,-8]);
    square(t, [7,0], [14,-15]);
    square(t, [19,-15], [25,-8]);
    square(t, [-25,-15], [-15,-8]);
    for (let i=-20; i<=20; i+=4) {
        t.jmp(i,-30); t.goto(i+10,-20);
    }
    t.jmp(-20,-30); t.goto(20,-30);
    t.jmp(-20,-30); t.goto(-30,-20);
    t.jmp(-30,-20); t.goto(-30,0);
    t.jmp(-30,0); t.goto(-10,0);
}
function square(t, lt, rb) {
    t.jmp(lt); t.goto(lt[0], rb[1]); t.goto(rb), t.goto(rb[0], lt[1]); t.goto(lt);
}

function drawBicycle(t, x, y) {
    t = t.addTransform(Translate(x, y));
    t.jmp(-15,-20); t.circle(10);
    t.jmp( 15,-20); t.circle(10);
    t.jmp(-15, -10); 
        t.goto(0, -10); t.goto(10, -25); 
        t.goto(-5, -25); t.goto(-15, -10);
    t.jmp( 0, -10); t.goto(-6, -28); t.goto(-8, -28); t.goto(-2, -28);  
    t.jmp( 15, -10); t.goto( 9, -28);  t.goto( 14, -28); t.circle(2, 180);
}



////////////////////////////////////////////////////////////////
// Path utility code. Created by Reinder Nijhoff 2023
// Parses a single SVG path (only M, C and L statements are
// supported). The p-method will return
// [...position, ...derivative] for a normalized point t.
//
// https://turtletoy.net/turtle/46adb0ad70
////////////////////////////////////////////////////////////////
function Path(svg) {
    class MoveTo {
        constructor(p) { this.p0 = p; }
        p(t, s) { return [...this.p0, 1, 0]; }
        length() { return 0; }
    }
    class LineTo {
        constructor(p0, p1) { this.p0 = p0, this.p1 = p1; }
        p(t, s = 1) {
            const nt = 1 - t, p0 = this.p0, p1 = this.p1;
            return [ 
                nt*p0[0] + t*p1[0],
                nt*p0[1] + t*p1[1],
                (p1[0] - p0[0]) * s,
                (p1[1] - p0[1]) * s,
            ];
        }
        length() { 
            const p0 = this.p0, p1 = this.p1;
            return Math.hypot(p0[0]-p1[0], p0[1]-p1[1]);
        }
    }
    class BezierTo {
        constructor(p0, c0, c1, p1) { this.p0 = p0, this.c0 = c0, this.c1 = c1, this.p1 = p1; }
        p(t, s = 1) {
            const nt = 1 - t, p0 = this.p0, c0 = this.c0, c1 = this.c1, p1 = this.p1;
            return [ 
                nt*nt*nt*p0[0] + 3*t*nt*nt*c0[0] + 3*t*t*nt*c1[0] + t*t*t*p1[0],
                nt*nt*nt*p0[1] + 3*t*nt*nt*c0[1] + 3*t*t*nt*c1[1] + t*t*t*p1[1],
                (3*nt*nt*(c0[0]-p0[0]) + 6*t*nt*(c1[0]-c0[0]) + 3*t*t*(p1[0]-c1[0])) * s,
                (3*nt*nt*(c0[1]-p0[1]) + 6*t*nt*(c1[1]-c0[1]) + 3*t*t*(p1[1]-c1[1])) * s,
            ];
        }
        length() {
            return this._length || (
                this._length = Array.from({length:25}, (x, i) => this.p(i/25)).reduce( 
                    (a,c,i,v) => i > 0 ? a + Math.hypot(c[0]-v[i-1][0], c[1]-v[i-1][1]) : a, 0));
        }
    }
    class Path {
        constructor(svg) {
            this.segments = [];
            this.parsePath(svg);
        }
        parsePath(svg) {
            const t = svg.match(/([0-9.-]+|[MLC])/g);
            for (let s, i=0; i<t.length;) {
                switch (t[i++]) {
                    case 'M': this.add(new MoveTo(s=[t[i++],t[i++]]));
                              break;
                    case 'L': this.add(new LineTo(s, s=[t[i++],t[i++]]));
                              break;
                    case 'C': this.add(new BezierTo(s, [t[i++],t[i++]], [t[i++],t[i++]], s=[t[i++],t[i++]]));
                              break;
                    default:  i++;
                }
            }
        }
        add(segment) {
            this.segments.push(segment);
            this._length = 0;
        }
        length() {
            return this._length || (this._length = this.segments.reduce((a,c) => a + c.length(), 0));
        }
        p(t) {
            t = Math.max(Math.min(t, 1), 0) * this.length();
            for (let l=0, i=0, sl=0; i<this.segments.length; i++, l+=sl) {
                sl = this.segments[i].length();
                if (t > l && t <= l + sl) {
                    return this.segments[i].p((t-l)/sl, sl/this.length());
                }
            }
            return this.segments[Math.min(1, this.segments.length-1)].p(0);
        }
    }
    return new Path(svg);
}



////////////////////////////////////////////////////////////////
// Tortoise utility code. Created by Reinder Nijhoff 2019
// https://turtletoy.net/turtle/102cbd7c4d
////////////////////////////////////////////////////////////////

function Tortoise(x, y) {
    class Tortoise extends Turtle {
        constructor(x, y) {
            super(x, y);
            this.ps = Array.isArray(x) ? [...x] : [x || 0, y || 0];
            this.transforms = [];
        }
        addTransform(t) {
            this.transforms.push(t);
            this.jump(this.ps);
            return this;
        }
        applyTransforms(p) {
            if (!this.transforms) return p;
            let pt = [...p];
            this.transforms.map(t => { pt = t(pt); });
            return pt;
        }
        goto(x, y, rec = 0) {
            const p = Array.isArray(x) ? [...x] : [x, y];
            if (rec > 5) return p;

            const pt = this.applyTransforms(p);
            if (this.isdown() && (this.pt[0]-pt[0])**2 + (this.pt[1]-pt[1])**2 > 8) {
               this.goto((this.ps[0]+p[0])/2, (this.ps[1]+p[1])/2, rec+1);
               this.goto(p[0], p[1], rec+1);
            } else {
                super.goto(pt);
                this.ps = p;
                this.pt = pt;
            }
        }
        position() { return this.ps; }
    }
    return new Tortoise(x,y);
}


// Goose by imakerobots: https://turtletoy.net/turtle/a6b25da0df
//
const a=[-128.964, -86.085,
-129.279, -87.079,
-129.776, -88.158,
-130.277, -89.07,
-130.848, -90.015,
-131.467, -90.985,
-132.115, -91.968,
-132.769, -92.957];
const b = [
-128.964, -86.085,
-128.823, -85.093,
-128.771, -83.98,
-128.776, -82.857,
-128.815, -81.799,
-128.881, -80.682,
-128.973, -79.519,
-129.085, -78.324,
-129.191, -77.316,
-129.308, -76.306,
-129.357, -75.903,
-129.484, -74.907,
-129.642, -73.738,
-129.804, -72.614,
-129.965, -71.551,
-130.148, -70.408,
-130.32, -69.393,
-130.515, -68.316,
-130.717, -67.331,
-130.728, -67.288,
-130.96, -66.233,
-131.184, -65.188,
-131.406, -64.196,
-131.667, -63.085,
-131.923, -62.053,
-132.21, -60.964,
-132.529, -59.831,
-132.819, -58.865,
-133.199, -57.685,
-133.612, -56.51,
-134.056, -55.354,
-134.533, -54.231,
-135.042, -53.154,
-135.585, -52.138,
-136.161, -51.197,
-136.771, -50.345,
-137.638, -49.371,
-138.095, -48.962,
-139.039, -48.221,
-139.979, -47.547,
-140.944, -46.911,
-141.965, -46.288,
-143.073, -45.65,
-143.978, -45.147,
-144.963, -44.608,
-146.039, -44.024,
-146.42, -43.817,
-147.636, -43.156,
-148.97, -42.423,
-149.932, -41.889,
-150.956, -41.316,
-152.045, -40.699,
-153.205, -40.036,
-154.437, -39.323,
-155.747, -38.557,
-157.137, -37.734,
-158.611, -36.852,
-160.174, -35.906,
-161.829, -34.893,
-162.692, -34.361,
-163.579, -33.811,
-164.491, -33.243,
-165.428, -32.655,
-166.363, -32.061,
-167.262, -31.473,
-168.124, -30.894,
-168.952, -30.322,
-170.506, -29.201,
-171.929, -28.109,
-173.229, -27.047,
-174.413, -26.014,
-175.486, -25.01,
-176.456, -24.033,
-177.33, -23.084,
-178.113, -22.162,
-178.812, -21.267,
-179.434, -20.398,
-179.987, -19.554,
-180.698, -18.337,
-180.907, -17.943,
-181.477, -16.771,
-181.944, -15.681,
-182.332, -14.667,
-182.666, -13.724,
-183.07, -12.563,
-183.483, -11.502,
-183.963, -10.524,
-184.57, -9.617,
-184.939, -9.185,
-185.76, -8.308,
-186.565, -7.463,
-187.353, -6.649,
-188.124, -5.862,
-188.879, -5.101,
-189.617, -4.364,
-190.338, -3.648,
-191.389, -2.61,
-192.402, -1.608,
-193.378, -0.635,
-194.316, 0.316,
-195.217, 1.253,
-195.509, 1.564,
-196.295, 2.424,
-197.011, 3.253,
-197.651, 4.051,
-198.291, 4.944,
-198.672, 5.557,
-199.143, 6.507,
-199.449, 7.546,
-199.473, 8.548,
-199.383, 8.981,
-198.942, 9.902,
-198.226, 10.725,
-197.424, 11.368,
-196.504, 11.944,
-195.474, 12.471,
-194.528, 12.885,
-193.542, 13.263,
-192.536, 13.608,
-191.695, 13.87,
-190.575, 14.188,
-189.493, 14.466,
-188.474, 14.705,
-187.33, 14.949,
-186.211, 15.165,
-185.367, 15.31,
-185.367, 15.31,
-182.808, 21.282,
-182.3, 22.26,
-181.619, 23.26,
-180.788, 24.274,
-179.828, 25.292,
-178.762, 26.307,
-178.003, 26.979,
-177.213, 27.643,
-176.4, 28.298,
-175.568, 28.941,
-174.726, 29.57,
-173.88, 30.182,
-173.036, 30.774,
-172.617, 31.063,
-171.78, 31.629,
-170.555, 32.433,
-169.386, 33.177,
-168.294, 33.854,
-167.3, 34.454,
-166.425, 34.971,
-165.481, 35.516,
-164.584, 36.018,
-164.535, 36.045,
-163.307, 36.748,
-162.391, 37.26,
-161.246, 37.891,
-159.884, 38.628,
-158.319, 39.459,
-156.567, 40.371,
-155.624, 40.853,
-154.64, 41.352,
-153.616, 41.864,
-152.553, 42.389,
-151.453, 42.925,
-150.319, 43.471,
-149.152, 44.024,
-147.953, 44.584,
-146.725, 45.149,
-145.469, 45.717,
-144.186, 46.287,
-142.879, 46.857,
-141.55, 47.426,
-140.2, 47.992,
-138.833, 48.553,
-137.448, 49.107,
-136.047, 49.655,
-134.631, 50.194,
-133.203, 50.722,
-131.763, 51.239,
-130.313, 51.742,
-128.856, 52.23,
-127.394, 52.701,
-125.927, 53.154,
-124.457, 53.588,
-122.987, 54,
-121.519, 54.389,
-120.053, 54.753,
-118.592, 55.092,
-117.138, 55.402,
-115.691, 55.684,
-114.255, 55.934,
-112.831, 56.153,
-111.42, 56.337,
-110.024, 56.485,
-108.646, 56.597,
-107.286, 56.67,
-105.947, 56.702,
-104.63, 56.692,
-103.338, 56.639,
-102.071, 56.541,
-100.832, 56.396,
-99.623, 56.204,
-98.445, 55.961,
-96.219, 55.447,
-94.132, 54.964,
-92.178, 54.511,
-90.351, 54.087,
-88.646, 53.691,
-87.057, 53.322,
-85.578, 52.977,
-84.204, 52.657,
-82.928, 52.36,
-81.745, 52.085,
-80.65, 51.83,
-79.637, 51.595,
-77.832, 51.178,
-76.287, 50.824,
-74.954, 50.525,
-73.79, 50.271,
-72.747, 50.052,
-71.312, 49.77,
-69.896, 49.514,
-68.887, 49.343,
-68.887, 49.343,
-68.423, 48.427,
-67.358, 48.186,
-66.297, 47.891,
-65.252, 47.552,
-64.233, 47.181,
-63.253, 46.789,
-62.321, 46.387,
-61.038, 45.788,
-59.926, 45.229,
-59.023, 44.745,
-58.082, 44.209,
-57.916, 44.109,
-58.237, 44.536,
-58.086, 44.896,
-57.081, 45.33,
-55.879, 45.822,
-54.697, 46.285,
-53.29, 46.815,
-52.232, 47.198,
-51.085, 47.602,
-49.851, 48.02,
-48.534, 48.451,
-47.139, 48.889,
-45.669, 49.332,
-44.584, 49.591,
-43.56, 49.762,
-42.409, 49.903,
-41.143, 50.016,
-40.123, 50.084,
-39.049, 50.138,
-37.925, 50.18,
-36.756, 50.21,
-36.357, 50.218,
-35.128, 50.233,
-33.863, 50.238,
-32.564, 50.235,
-31.236, 50.222,
-29.883, 50.202,
-28.511, 50.175,
-27.123, 50.141,
-25.724, 50.102,
-24.318, 50.058,
-22.91, 50.01,
-21.504, 49.959,
-20.103, 49.905,
-18.713, 49.85,
-17.338, 49.793,
-15.982, 49.736,
-14.649, 49.679,
-13.345, 49.624,
-12.074, 49.57,
-10.84, 49.52,
-9.648, 49.472,
-8.5, 49.429,
-7.402, 49.39,
-6.36, 49.358,
-5.065, 49.324,
-3.886, 49.304,
-2.834, 49.298,
-1.713, 49.314,
-0.985, 49.347,
0.158, 49.412,
1.565, 49.476,
2.633, 49.521,
3.795, 49.571,
5.041, 49.627,
6.362, 49.692,
7.747, 49.766,
9.188, 49.853,
10.675, 49.953,
12.199, 50.069,
13.75, 50.202,
15.319, 50.354,
16.895, 50.528,
18.471, 50.725,
19.647, 50.888,
20.812, 51.067,
21.962, 51.261,
23.093, 51.471,
24.202, 51.698,
25.283, 51.942,
26.334, 52.205,
27.351, 52.487,
28.328, 52.789,
29.264, 53.111,
30.442, 53.576,
31.518, 54.076,
32.485, 54.612,
33.337, 55.185,
34.229, 55.954,
34.918, 56.784,
35.313, 57.493,
35.96, 58.701,
36.785, 59.843,
37.767, 60.918,
38.501, 61.599,
39.291, 62.25,
40.131, 62.871,
41.016, 63.463,
41.94, 64.026,
42.898, 64.56,
43.883, 65.064,
44.89, 65.539,
45.914, 65.984,
46.948, 66.4,
47.468, 66.598,
48.517, 66.973,
49.566, 67.321,
50.611, 67.64,
51.646, 67.93,
52.665, 68.192,
53.663, 68.425,
54.875, 68.676,
55.111, 68.721,
56.259, 68.917,
57.347, 69.069,
58.365, 69.176,
59.479, 69.242,
60.607, 69.235,
60.892, 69.216,
62.109, 69.145,
63.238, 69.114,
64.317, 69.072,
65.388, 68.971,
66.49, 68.763,
67.663, 68.399,
68.683, 67.961,
69.801, 67.369,
70.719, 66.809,
71.716, 66.139,
72.803, 65.348,
73.989, 64.426,
74.841, 63.733,
75.744, 62.976,
76.703, 62.149,
77.719, 61.252,
78.796, 60.279,
79.808, 59.451,
80.854, 58.765,
81.93, 58.208,
83.026, 57.768,
84.135, 57.432,
85.251, 57.189,
86.365, 57.025,
87.471, 56.929,
88.56, 56.888,
89.626, 56.889,
90.793, 56.927,
91.799, 56.977,
92.923, 57.038,
93.93, 57.081,
94.31, 57.088,
94.633, 57.088,
95.711, 57.017,
96.737, 56.738,
97.374, 56.272,
97.374, 56.272,
97.673, 55.179,
97.741, 53.91,
97.59, 52.646,
97.257, 51.4,
96.776, 50.189,
96.185, 49.028,
95.518, 47.933,
94.99, 47.164,
94.295, 46.243,
93.604, 45.406,
92.823, 44.533,
92.038, 43.722,
91.462, 43.167,
91.462, 43.167,
93.47, 40.929,
94.142, 40.083,
94.771, 38.976,
95.126, 37.902,
95.242, 36.869,
95.107, 35.649,
94.726, 34.525,
94.167, 33.512,
93.517, 32.641,
92.833, 31.9,
92.061, 31.201,
91.248, 30.582,
91.102, 30.485,
90.686, 30.471,
90.686, 30.471,
74.457, 39.243,
74.457, 39.243,
58.741, 37.934,
57.6, 37.507,
56.545, 37.115,
55.576, 36.755,
54.473, 36.347,
53.254, 35.897,
51.937, 35.412,
50.539, 34.899,
49.57, 34.545,
49.077, 34.365,
48.007, 33.975,
46.919, 33.581,
45.82, 33.183,
44.716, 32.786,
43.613, 32.392,
42.519, 32.002,
41.438, 31.619,
40.377, 31.246,
39.343, 30.885,
38.342, 30.539,
37.379, 30.211,
36.023, 29.755,
34.79, 29.351,
34.047, 29.115,
33.062, 28.866,
31.947, 28.661,
30.801, 28.494,
29.702, 28.358,
28.703, 28.249,
27.635, 28.145,
26.502, 28.044,
25.307, 27.947,
24.309, 27.871,
23.277, 27.798,
22.748, 27.762,
21.667, 27.692,
20.557, 27.624,
19.418, 27.557,
18.253, 27.492,
17.065, 27.429,
15.855, 27.367,
14.625, 27.306,
13.378, 27.247,
12.115, 27.189,
10.838, 27.132,
9.55, 27.076,
8.252, 27.021,
6.947, 26.967,
5.637, 26.913,
4.323, 26.861,
3.008, 26.808,
1.693, 26.757,
0.381, 26.705,
-0.926, 26.654,
-2.226, 26.603,
-3.517, 26.552,
-4.797, 26.502,
-6.065, 26.451,
-7.317, 26.4,
-8.552, 26.348,
-9.768, 26.297,
-10.963, 26.244,
-12.135, 26.192,
-13.282, 26.138,
-14.401, 26.084,
-15.492, 26.029,
-16.551, 25.974,
-17.577, 25.917,
-19.047, 25.829,
-20.43, 25.74,
-21.717, 25.647,
-22.904, 25.551,
-23.982, 25.451,
-25.238, 25.312,
-26.273, 25.167,
-26.495, 25.129,
-27.931, 24.818,
-29.281, 24.416,
-30.556, 23.931,
-31.765, 23.373,
-32.917, 22.753,
-34.021, 22.079,
-35.086, 21.363,
-36.123, 20.613,
-37.14, 19.839,
-38.146, 19.052,
-39.152, 18.26,
-40.166, 17.475,
-41.197, 16.704,
-42.255, 15.96,
-43.349, 15.25,
-44.374, 14.548,
-45.281, 13.785,
-46.084, 12.965,
-46.795, 12.09,
-47.427, 11.162,
-47.991, 10.183,
-48.5, 9.156,
-48.968, 8.084,
-49.405, 6.968,
-49.824, 5.811,
-50.237, 4.62,
-50.658, 3.395,
-51.098, 2.139,
-51.572, 0.858,
-52.091, -0.446,
-52.669, -1.768,
-53.317, -3.105,
-53.796, -4.002,
-54.315, -4.903,
-54.879, -5.806,
-55.492, -6.71,
-55.818, -7.162,
-56.716, -8.338,
-57.381, -9.165,
-58.095, -10.022,
-58.852, -10.907,
-59.65, -11.818,
-60.483, -12.75,
-61.348, -13.702,
-62.24, -14.671,
-63.154, -15.653,
-64.088, -16.645,
-65.036, -17.646,
-65.995, -18.651,
-66.96, -19.659,
-67.926, -20.665,
-68.409, -21.167,
-69.374, -22.171,
-70.33, -23.166,
-71.273, -24.15,
-72.2, -25.121,
-73.105, -26.076,
-73.986, -27.011,
-74.837, -27.924,
-75.655, -28.812,
-76.435, -29.672,
-77.174, -30.501,
-77.867, -31.298,
-78.812, -32.423,
-79.63, -33.457,
-80.099, -34.091,
-80.975, -35.265,
-81.888, -36.394,
-82.839, -37.492,
-83.828, -38.573,
-84.855, -39.65,
-85.921, -40.739,
-87.027, -41.852,
-88.171, -43.004,
-89.356, -44.208,
-90.582, -45.478,
-91.848, -46.829,
-93.155, -48.274,
-93.824, -49.036,
-94.504, -49.826,
-95.194, -50.647,
-95.895, -51.501,
-96.606, -52.388,
-97.328, -53.311,
-98.064, -54.256,
-98.767, -55.146,
-99.438, -55.983,
-100.08, -56.769,
-101.282, -58.199,
-102.387, -59.461,
-103.411, -60.574,
-104.368, -61.562,
-105.273, -62.445,
-106.141, -63.247,
-106.985, -63.987,
-107.822, -64.69,
-108.666, -65.375,
-109.531, -66.066,
-110.432, -66.784,
-111.385, -67.55,
-112.403, -68.388,
-113.15, -69.102,
-113.866, -69.962,
-114.547, -70.949,
-115.192, -72.045,
-115.797, -73.231,
-116.361, -74.489,
-116.88, -75.8,
-117.352, -77.146,
-117.774, -78.508,
-118.145, -79.868,
-118.41, -80.976,
-118.634, -82.052,
-118.817, -83.085,
-118.981, -84.252,
-119.081, -85.323,
-119.108, -85.816,
-119.104, -86.831,
-118.994, -87.718,
-118.678, -88.356,
-117.657, -88.471,
-116.695, -88.105,
-116.216, -87.744,
-115.504, -86.962,
-115.212, -86.523,
-114.65, -85.563,
-113.977, -84.62,
-113.301, -83.817,
-113.174, -83.679,
-112.437, -82.955,
-111.58, -82.255,
-110.604, -81.617,
-109.51, -81.08,
-108.548, -80.75,
-107.509, -80.528,
-106.961, -80.465,
-105.898, -80.48,
-104.893, -80.742,
-103.999, -81.294,
-103.774, -81.507,
-103.135, -82.395,
-102.727, -83.406,
-102.547, -84.169,
-102.417, -85.259,
-102.396, -86.273,
-102.456, -87.303,
-102.489, -87.607,
-101.497, -87.797,
-100.404, -88.013,
-99.302, -88.239,
-98.301, -88.45,
-97.676, -88.586,
-96.697, -88.806,
-95.71, -89.037,
-94.734, -89.276,
-93.66, -89.556,
-93.53, -89.592,
-92.539, -89.876,
-91.541, -90.199,
-90.552, -90.592,
-90.405, -90.662,
-89.613, -91.359,
-89.332, -92.352,
-89.337, -92.582,
-89.57, -93.636,
-90.003, -94.605,
-90.12, -94.82,
-90.12, -94.82,
-90.819, -95.597,
-91.424, -96.473,
-91.917, -97.108,
-91.301, -97.93,
-90.687, -98.771,
-90.078, -99.626,
-89.809, -100.014,
-89.204, -100.91,
-88.637, -101.797,
-88.273, -102.41,
-87.806, -103.308,
-87.751, -103.432,
-87.528, -104.277,
-87.822, -105.242,
-88.178, -105.648,
-89.039, -106.199,
-90.027, -106.563,
-90.577, -106.707,
-91.611, -106.906,
-92.856, -107.064,
-93.939, -107.15,
-95.159, -107.208,
-96.524, -107.232,
-98.042, -107.221,
-99.144, -107.193,
-100.318, -107.148,
-101.569, -107.083,
-102.899, -106.999,
-104.31, -106.895,
-105.53, -106.797,
-106.717, -106.698,
-107.874, -106.598,
-108.999, -106.496,
-110.093, -106.394,
-111.156, -106.29,
-112.19, -106.185,
-113.194, -106.078,
-115.116, -105.863,
-116.924, -105.643,
-118.623, -105.419,
-120.215, -105.192,
-121.704, -104.96,
-123.094, -104.725,
-124.387, -104.487,
-125.588, -104.245,
-126.699, -104.001,
-127.725, -103.753,
-128.667, -103.503,
-129.737, -103.186,
-130.692, -102.863,
-131.697, -102.47,
-132.688, -102.002,
-133.5, -101.525,
-134.314, -100.89,
-134.993, -100.086,
-135.355, -99.33,
-135.432, -98.248,
-135.179, -97.253,
-134.833, -96.429,
-134.316, -95.439,
-133.769, -94.514,
-133.165, -93.561,
-132.769, -92.957,
-132.398, -93.893,
-132.997, -94.833,
-133.535, -95.731,
-134.04, -96.681,
-134.089, -96.781,
-134.469, -97.724,
-134.634, -98.741,
-134.574, -99.069,
-134.038, -99.991,
-133.224, -100.715,
-133.045, -100.838,
-132.057, -101.4,
-131.072, -101.837,
-130.06, -102.212,
-129.089, -102.523,
-128.447, -102.709,
-127.026, -103.077,
-125.973, -103.32,
-124.832, -103.56,
-123.599, -103.797,
-122.271, -104.031,
-120.844, -104.262,
-119.316, -104.49,
-117.681, -104.714,
-115.938, -104.935,
-114.082, -105.152,
-112.11, -105.364,
-111.08, -105.469,
-110.019, -105.573,
-108.927, -105.675,
-107.805, -105.777,
-106.65, -105.877,
-105.464, -105.976,
-104.245, -106.074,
-102.839, -106.177,
-101.517, -106.261,
-100.274, -106.325,
-99.11, -106.37,
-98.022, -106.398,
-97.007, -106.409,
-95.617, -106.396,
-94.378, -106.35,
-93.281, -106.275,
-92.027, -106.135,
-90.992, -105.955,
-90.765, -105.904,
-89.741, -105.601,
-88.836, -105.123,
-88.73, -105.035,
-88.353, -104.277,
-88.51, -103.754,
-88.968, -102.854,
-88.989, -102.819,
-89.533, -101.919,
-90.106, -101.043,
-90.488, -100.482,
-91.138, -99.557,
-91.735, -98.731,
-92.358, -97.892,
-92.683, -97.464,
-92.356, -96.8,
-91.708, -96.021,
-91.057, -95.132,
-90.48, -94.206,
-90.48, -94.206,
-90.286, -93.174,
-90.16, -92.529,
-90.519, -91.562,
-90.774, -91.399,
-91.72, -91.01,
-92.772, -90.667,
-93.748, -90.386,
-94.801, -90.109,
-95.902, -89.838,
-96.881, -89.609,
-97.854, -89.391,
-98.932, -89.158,
-99.945, -88.947,
-101.075, -88.719,
-102.154, -88.509,
-103.027, -88.345,
-103.027, -88.345,
-103.289, -87.339,
-103.222, -86.323,
-103.249, -85.186,
-103.359, -84.316,
-103.626, -83.313,
-104.115, -82.379,
-104.367, -82.08,
-105.209, -81.503,
-106.213, -81.278,
-106.893, -81.286,
-108.096, -81.483,
-109.197, -81.843,
-110.195, -82.332,
-111.09, -82.917,
-111.883, -83.565,
-112.574, -84.243,
-113.264, -85.044,
-113.873, -85.881,
-114.406, -86.758,
-114.477, -86.896,
-114.487, -86.915,
-115.086, -87.76,
-115.67, -88.362,
-116.548, -88.968,
-117.536, -89.288,
-118.55, -89.249,
-118.96, -89.13,
-119.658, -88.361,
-119.797, -87.9,
-119.927, -86.874,
-119.934, -85.868,
-119.931, -85.785,
-119.86, -84.727,
-119.723, -83.567,
-119.561, -82.535,
-119.356, -81.458,
-119.11, -80.345,
-118.944, -79.665,
-118.57, -78.294,
-118.142, -76.909,
-117.659, -75.531,
-117.124, -74.179,
-116.54, -72.874,
-115.907, -71.636,
-115.228, -70.485,
-114.504, -69.441,
-113.737, -68.524,
-112.93, -67.754,
-111.906, -66.912,
-110.952, -66.144,
-110.051, -65.427,
-109.19, -64.74,
-108.353, -64.06,
-107.525, -63.366,
-106.69, -62.635,
-105.834, -61.845,
-104.942, -60.974,
-103.999, -60,
-102.989, -58.9,
-101.897, -57.653,
-100.708, -56.237,
-100.073, -55.458,
-99.408, -54.629,
-98.711, -53.746,
-97.98, -52.807,
-97.216, -51.829,
-96.469, -50.897,
-95.74, -50.007,
-95.029, -49.159,
-94.334, -48.349,
-93.655, -47.575,
-92.343, -46.126,
-91.088, -44.793,
-89.887, -43.556,
-88.735, -42.396,
-87.628, -41.294,
-86.562, -40.232,
-85.531, -39.19,
-84.532, -38.149,
-83.561, -37.09,
-82.613, -35.993,
-81.684, -34.84,
-80.77, -33.612,
-80.027, -32.623,
-79.151, -31.539,
-78.499, -30.768,
-77.797, -29.962,
-77.051, -29.123,
-76.264, -28.256,
-75.44, -27.361,
-74.584, -26.443,
-73.7, -25.504,
-72.791, -24.547,
-71.863, -23.575,
-70.92, -22.59,
-69.965, -21.596,
-69.003, -20.596,
-68.035, -19.589,
-67.068, -18.581,
-66.107, -17.574,
-65.154, -16.573,
-64.216, -15.579,
-63.295, -14.595,
-62.396, -13.625,
-61.523, -12.671,
-60.679, -11.735,
-59.87, -10.821,
-59.1, -9.932,
-58.371, -9.069,
-57.689, -8.237,
-57.058, -7.438,
-56.482, -6.674,
-55.861, -5.794,
-55.289, -4.915,
-54.762, -4.038,
-54.277, -3.163,
-53.619, -1.856,
-53.033, -0.559,
-52.507, 0.725,
-52.028, 1.995,
-51.582, 3.247,
-51.157, 4.479,
-50.74, 5.688,
-50.601, 6.085,
-50.177, 7.256,
-49.73, 8.397,
-49.248, 9.504,
-48.718, 10.573,
-48.126, 11.599,
-47.459, 12.579,
-46.705, 13.508,
-45.849, 14.383,
-44.879, 15.198,
-43.782, 15.951,
-42.743, 16.627,
-41.721, 17.35,
-40.711, 18.108,
-39.703, 18.89,
-38.691, 19.686,
-37.667, 20.483,
-36.623, 21.272,
-35.551, 22.041,
-34.445, 22.78,
-33.295, 23.476,
-32.095, 24.119,
-30.837, 24.698,
-29.514, 25.202,
-28.117, 25.62,
-26.638, 25.941,
-25.633, 26.093,
-24.407, 26.236,
-23.352, 26.339,
-22.189, 26.437,
-20.925, 26.532,
-19.566, 26.623,
-18.12, 26.711,
-17.11, 26.769,
-16.066, 26.825,
-14.991, 26.88,
-14.442, 26.907,
-13.321, 26.962,
-12.173, 27.015,
-11, 27.068,
-9.804, 27.12,
-8.587, 27.172,
-7.351, 27.223,
-6.098, 27.274,
-4.83, 27.325,
-3.549, 27.376,
-2.258, 27.427,
-0.957, 27.478,
0.35, 27.529,
1.661, 27.58,
2.976, 27.632,
4.29, 27.684,
5.604, 27.737,
6.914, 27.79,
8.218, 27.844,
9.515, 27.899,
10.802, 27.955,
12.078, 28.012,
13.339, 28.07,
14.585, 28.129,
15.813, 28.19,
17.022, 28.251,
18.208, 28.315,
19.37, 28.38,
20.507, 28.446,
21.615, 28.514,
22.693, 28.584,
23.739, 28.656,
24.751, 28.73,
25.964, 28.826,
27.116, 28.925,
28.203, 29.027,
29.221, 29.133,
29.608, 29.177,
30.698, 29.311,
31.818, 29.475,
32.886, 29.671,
33.801, 29.902,
34.933, 30.264,
36.203, 30.683,
37.59, 31.153,
38.57, 31.49,
39.585, 31.842,
40.631, 32.209,
41.7, 32.586,
42.787, 32.972,
43.885, 33.364,
44.987, 33.76,
46.089, 34.157,
47.182, 34.553,
48.262, 34.945,
48.795, 35.139,
49.841, 35.521,
50.858, 35.893,
51.839, 36.254,
53.228, 36.765,
54.501, 37.236,
55.636, 37.656,
56.613, 38.019,
57.631, 38.398,
58.505, 38.725,
58.616, 38.75,
59.793, 38.848,
60.808, 38.933,
62.049, 39.036,
63.459, 39.154,
64.983, 39.281,
66.563, 39.412,
68.143, 39.544,
69.667, 39.671,
71.077, 39.788,
72.318, 39.892,
73.333, 39.976,
74.459, 40.07,
74.511, 40.075,
74.741, 40.026,
75.951, 39.372,
76.994, 38.809,
78.27, 38.119,
79.719, 37.335,
81.285, 36.489,
82.909, 35.611,
84.533, 34.733,
86.099, 33.887,
87.549, 33.103,
88.825, 32.414,
89.868, 31.85,
90.87, 31.308,
91.078, 31.196,
90.662, 31.182,
91.535, 31.835,
92.374, 32.607,
93.127, 33.47,
93.478, 33.963,
93.968, 34.844,
94.303, 35.811,
94.422, 36.857,
94.261, 37.972,
93.891, 38.909,
93.27, 39.881,
92.856, 40.379,
92.856, 40.379,
90.575, 42.921,
90.575, 42.921,
90.985, 43.849,
91.808, 44.661,
92.582, 45.49,
93.264, 46.28,
93.97, 47.169,
94.321, 47.645,
95.005, 48.658,
95.625, 49.722,
96.155, 50.822,
96.565, 51.947,
96.83, 53.081,
96.921, 54.214,
96.81, 55.33,
96.67, 55.878,
96.67, 55.878,
95.705, 56.185,
94.623, 56.264,
94.316, 56.264,
93.199, 56.229,
92.174, 56.173,
91.064, 56.113,
90.015, 56.073,
89.64, 56.065,
88.548, 56.064,
87.422, 56.106,
86.271, 56.206,
85.104, 56.378,
83.929, 56.634,
82.754, 56.989,
81.589, 57.457,
80.443, 58.05,
79.324, 58.783,
78.241, 59.67,
77.165, 60.641,
76.154, 61.534,
75.202, 62.355,
74.308, 63.104,
73.468, 63.787,
72.68, 64.405,
71.586, 65.22,
70.59, 65.91,
69.681, 66.484,
68.587, 67.09,
67.604, 67.538,
67.372, 67.628,
66.282, 67.968,
65.266, 68.158,
64.269, 68.248,
63.233, 68.286,
62.103, 68.318,
61.093, 68.374,
60.823, 68.395,
59.823, 68.426,
58.804, 68.383,
57.654, 68.276,
56.607, 68.137,
55.492, 67.953,
55.261, 67.911,
54.082, 67.673,
52.86, 67.391,
51.859, 67.134,
50.842, 66.849,
49.816, 66.536,
48.785, 66.194,
47.755, 65.825,
46.724, 65.426,
45.709, 65.001,
44.713, 64.549,
43.741, 64.072,
42.799, 63.568,
41.89, 63.039,
41.021, 62.484,
40.196, 61.904,
39.052, 60.988,
38.034, 60.016,
37.16, 58.989,
36.445, 57.908,
36.066, 57.158,
35.466, 56.133,
34.639, 55.203,
33.831, 54.526,
32.905, 53.903,
31.873, 53.332,
30.75, 52.811,
29.545, 52.337,
28.586, 52.006,
27.585, 51.697,
26.547, 51.409,
25.475, 51.141,
24.374, 50.892,
23.249, 50.662,
22.102, 50.449,
20.939, 50.253,
19.763, 50.073,
18.579, 49.908,
16.99, 49.709,
15.401, 49.534,
13.822, 49.381,
12.261, 49.246,
10.729, 49.13,
9.234, 49.029,
7.787, 48.943,
6.397, 48.868,
5.074, 48.803,
3.827, 48.747,
2.666, 48.697,
1.6, 48.652,
0.2, 48.589,
-0.931, 48.525,
-2.114, 48.48,
-3.345, 48.475,
-4.476, 48.488,
-5.724, 48.516,
-6.732, 48.544,
-7.795, 48.579,
-8.911, 48.619,
-9.681, 48.649,
-10.876, 48.696,
-12.111, 48.747,
-13.383, 48.801,
-14.686, 48.856,
-16.017, 48.913,
-17.372, 48.97,
-18.745, 49.026,
-20.134, 49.082,
-21.533, 49.136,
-22.939, 49.187,
-24.346, 49.235,
-25.75, 49.279,
-27.146, 49.318,
-28.53, 49.351,
-29.898, 49.378,
-31.246, 49.398,
-32.568, 49.411,
-33.862, 49.414,
-35.121, 49.409,
-36.343, 49.394,
-37.525, 49.367,
-38.658, 49.33,
-39.737, 49.28,
-40.758, 49.217,
-42.022, 49.113,
-43.167, 48.984,
-44.181, 48.828,
-45.251, 48.593,
-45.437, 48.541,
-46.898, 48.102,
-48.284, 47.666,
-49.592, 47.238,
-50.817, 46.822,
-51.957, 46.422,
-53.006, 46.042,
-53.961, 45.685,
-55.209, 45.202,
-56.223, 44.794,
-57.189, 44.39,
-57.746, 44.146,
-58.067, 44.573,
-57.916, 44.933,
-59.024, 45.569,
-59.927, 46.053,
-61.038, 46.613,
-62.321, 47.211,
-63.253, 47.613,
-64.234, 48.005,
-65.252, 48.376,
-66.297, 48.715,
-67.358, 49.01,
-68.424, 49.251,
-68.955, 49.348,
-68.955, 49.348,
-70.042, 48.703,
-71.47, 48.961,
-72.916, 49.246,
-73.964, 49.466,
-75.134, 49.721,
-76.471, 50.021,
-78.02, 50.375,
-79.826, 50.792,
-80.841, 51.028,
-81.936, 51.283,
-83.119, 51.558,
-84.395, 51.855,
-85.77, 52.176,
-87.249, 52.52,
-88.838, 52.889,
-90.542, 53.286,
-92.368, 53.709,
-94.321, 54.162,
-96.406, 54.644,
-98.631, 55.158,
-99.781, 55.395,
-100.963, 55.583,
-102.174, 55.724,
-103.414, 55.819,
-104.68, 55.871,
-105.971, 55.879,
-107.285, 55.847,
-108.62, 55.775,
-109.974, 55.665,
-111.346, 55.518,
-112.735, 55.336,
-114.137, 55.121,
-115.553, 54.873,
-116.979, 54.595,
-118.415, 54.288,
-119.858, 53.954,
-121.306, 53.594,
-122.759, 53.209,
-124.214, 52.801,
-125.67, 52.372,
-127.125, 51.922,
-128.577, 51.455,
-130.024, 50.97,
-131.465, 50.47,
-132.898, 49.956,
-134.322, 49.43,
-135.734, 48.893,
-137.133, 48.346,
-138.517, 47.792,
-139.884, 47.231,
-141.23, 46.667,
-142.554, 46.101,
-143.856, 45.532,
-145.134, 44.965,
-146.386, 44.399,
-147.609, 43.836,
-148.804, 43.278,
-149.967, 42.726,
-151.097, 42.183,
-152.192, 41.648,
-153.251, 41.125,
-154.272, 40.615,
-155.253, 40.118,
-156.192, 39.637,
-157.087, 39.174,
-158.741, 38.304,
-160.201, 37.521,
-161.452, 36.838,
-162.481, 36.267,
-163.577, 35.648,
-164.13, 35.328,
-165.071, 34.801,
-166.008, 34.261,
-166.876, 33.748,
-167.863, 33.152,
-168.947, 32.48,
-170.107, 31.742,
-171.322, 30.944,
-172.152, 30.383,
-172.996, 29.798,
-173.84, 29.196,
-174.677, 28.58,
-175.502, 27.953,
-176.309, 27.317,
-177.091, 26.673,
-178.205, 25.701,
-179.231, 24.725,
-180.149, 23.755,
-180.938, 22.799,
-181.579, 21.863,
-182.051, 20.957,
-182.051, 20.957,
-184.7, 14.776,
-184.7, 14.776,
-185.784, 14.404,
-187.001, 14.175,
-188.041, 13.957,
-189.214, 13.686,
-190.478, 13.361,
-191.46, 13.081,
-192.449, 12.77,
-193.425, 12.429,
-194.371, 12.058,
-195.412, 11.588,
-196.1, 11.226,
-196.964, 10.685,
-197.754, 10.037,
-198.412, 9.19,
-198.592, 8.752,
-198.636, 7.683,
-198.34, 6.722,
-197.959, 5.969,
-197.357, 5.039,
-196.699, 4.171,
-196.042, 3.384,
-195.305, 2.556,
-194.907, 2.127,
-194.098, 1.277,
-193.202, 0.363,
-192.231, -0.61,
-191.198, -1.637,
-190.48, -2.348,
-189.742, -3.08,
-188.989, -3.83,
-188.223, -4.597,
-187.449, -5.378,
-186.67, -6.174,
-185.889, -6.981,
-185.11, -7.799,
-184.335, -8.625,
-183.61, -9.55,
-183.024, -10.572,
-182.531, -11.682,
-182.083, -12.873,
-181.631, -14.137,
-181.262, -15.127,
-180.844, -16.152,
-180.357, -17.206,
-180.176, -17.564,
-179.535, -18.715,
-178.759, -19.926,
-178.156, -20.768,
-177.477, -21.638,
-176.714, -22.536,
-175.862, -23.463,
-174.912, -24.419,
-173.86, -25.404,
-172.697, -26.419,
-171.416, -27.465,
-170.013, -28.541,
-168.478, -29.648,
-166.806, -30.787,
-165.917, -31.368,
-164.991, -31.957,
-164.055, -32.543,
-163.145, -33.111,
-162.259, -33.66,
-161.398, -34.191,
-159.747, -35.201,
-158.188, -36.145,
-156.717, -37.026,
-155.33, -37.847,
-154.024, -38.611,
-152.794, -39.322,
-151.638, -39.984,
-150.551, -40.599,
-149.53, -41.17,
-148.571, -41.702,
-147.67, -42.198,
-146.419, -42.88,
-146.027, -43.093,
-144.92, -43.694,
-143.904, -44.247,
-142.967, -44.765,
-142.096, -45.258,
-141.017, -45.896,
-140.004, -46.537,
-139.029, -47.207,
-138.063, -47.932,
-137.574, -48.324,
-136.836, -49.011,
-136.141, -49.816,
-135.488, -50.724,
-134.878, -51.718,
-134.307, -52.784,
-133.777, -53.905,
-133.285, -55.065,
-132.831, -56.248,
-132.413, -57.439,
-132.032, -58.621,
-131.738, -59.6,
-131.415, -60.747,
-131.125, -61.849,
-130.866, -62.892,
-130.603, -64.012,
-130.382, -65.003,
-130.152, -66.068,
-129.939, -67.046,
-129.929, -67.088,
-129.704, -68.168,
-129.508, -69.252,
-129.336, -70.274,
-129.152, -71.424,
-128.989, -72.493,
-128.827, -73.624,
-128.667, -74.799,
-128.54, -75.803,
-128.419, -76.817,
-128.307, -77.835,
-128.206, -78.847,
-128.119, -79.845,
-128.034, -81.009,
-127.992, -81.759,
-127.953, -82.829,
-127.945, -83.832,
-127.983, -84.893,
-128.096, -85.931,
-128.16, -86.263,
-128.502, -87.35,
-128.914, -88.274,
-129.422, -89.233,
-130.002, -90.215,
-130.628, -91.207,
-131.277, -92.196,
-131.923, -93.17,
-132.082, -93.41];
var c = [
124.993, 16.553,
126.997, 15.456,
128.936, 14.395,
130.81, 13.371,
132.622, 12.382,
134.372, 11.429,
136.06, 10.509,
137.69, 9.624,
139.26, 8.772,
140.773, 7.952,
142.229, 7.164,
143.63, 6.408,
144.976, 5.682,
146.27, 4.986,
147.511, 4.319,
148.7, 3.681,
149.84, 3.072,
150.931, 2.49,
151.974, 1.935,
152.97, 1.406,
153.921, 0.902,
154.827, 0.424,
156.509, -0.46,
158.025, -1.251,
159.385, -1.955,
160.596, -2.576,
161.148, -2.857];
var d = [
124.993, 16.553,
125.65, 17.738,
127.643, 16.621,
129.57, 15.541,
131.433, 14.497,
133.234, 13.489,
134.972, 12.516,
136.649, 11.577,
138.267, 10.672,
139.826, 9.8,
141.328, 8.961,
142.773, 8.153,
144.162, 7.377,
145.497, 6.632,
146.779, 5.916,
148.009, 5.23,
149.187, 4.573,
150.316, 3.944,
151.395, 3.342,
152.427, 2.768,
153.412, 2.219,
154.351, 1.696,
155.246, 1.199,
156.905, 0.276,
158.399, -0.555,
159.736, -1.298,
160.924, -1.958,
161.466, -2.259,
162.448, -2.805,
163.498, -3.389,
164.521, -3.96,
165.424, -4.466,
166.128, -4.869,
166.742, -5.251,
166.82, -5.327,
166.826, -5.373,
166.793, -5.407,
166.676, -5.407,
165.979, -5.173,
164.99, -4.74,
163.963, -4.255,
163.031, -3.8,
161.914, -3.244,
161.148, -2.857];
var f=[
130.655, 47.377,
130.586, 48.73,
130.586, 48.73,
199.5, 51.586,
130.655, 47.377];
var g=[
120.77, 80.122,
120.16, 81.332,
122.662, 82.582,
125.08, 83.791,
127.417, 84.96,
129.673, 86.09,
131.85, 87.182,
133.95, 88.235,
135.973, 89.252,
137.922, 90.232,
139.797, 91.175,
141.6, 92.084,
143.333, 92.958,
144.997, 93.798,
146.593, 94.605,
148.123, 95.379,
149.587, 96.122,
150.989, 96.833,
152.328, 97.513,
153.607, 98.164,
154.826, 98.785,
155.988, 99.378,
157.093, 99.942,
158.143, 100.479,
159.14, 100.99,
160.084, 101.475,
160.978, 101.934,
162.618, 102.78,
164.073, 103.532,
164.734, 103.875,
165.647, 104.349,
166.724, 104.911,
167.651, 105.396,
168.616, 105.904,
169.521, 106.382,
170.36, 106.826,
171.092, 107.199,
171.199, 107.233,
171.222, 107.227,
171.242, 107.219,
171.242, 107.219,
171.258, 107.205,
171.26, 107.173,
171.193, 107.063,
170.536, 106.536,
169.609, 105.93,
168.688, 105.368,
167.705, 104.787,
166.761, 104.243,
165.664, 103.62,
165.055, 103.278,
163.709, 102.53,
162.182, 101.691,
160.464, 100.756,
159.529, 100.251,
158.542, 99.72,
157.501, 99.162,
156.406, 98.577,
155.254, 97.964,
154.044, 97.322,
152.775, 96.651,
151.445, 95.95,
150.053, 95.219,
148.598, 94.456,
147.078, 93.661,
145.491, 92.834,
143.837, 91.973,
142.114, 91.079,
140.32, 90.15,
138.454, 89.185,
136.515, 88.185,
134.502, 87.148,
132.412, 86.074,
130.244, 84.962,
127.997, 83.812,
125.671, 82.622,
123.262, 81.392,
120.77, 80.122];

const list = [a,b,c,d,f,g];

function goose(t) {
    const scale =.2;
    for(let k=0;k<list.length;++k) {
        let j=0;
        t.penup();
        t.goto(
             scale*list[k][j*2+0],
            -scale*list[k][j*2+1]
            );
        t.pendown();
        for(j=1;j<list[k].length/2;++j) {
            t.goto(
                 scale*list[k][j*2+0],
                -scale*list[k][j*2+1]
                );
        }
        t.penup();
    }
}