fork download
  1. import static java.lang.Math.*;
  2.  
  3. /* 基本クラス */
  4. class Turtle {
  5. protected double x, y, angle;
  6. protected boolean drawing = true;
  7.  
  8. public Turtle(double x0, double y0, double a0) {
  9. x = x0; y = y0; angle = a0;
  10. }
  11.  
  12. public void penDown() {
  13. drawing = true;
  14. }
  15.  
  16. public void penUp() {
  17. drawing = false;
  18. }
  19.  
  20. /* 現在の位置を表す文字列を返す */
  21. protected String showPos() {
  22. return String.format("{ \"x\": %.2f, \"y\": %.2f }", x, y);
  23. }
  24.  
  25. /* 三角関数を使って座標を計算する */
  26. protected void move(double len) {
  27. x += len * cos(angle * PI / 180);
  28. y += len * sin(angle * PI / 180);
  29. }
  30.  
  31. /* 移動 */
  32. public void forward(double len) {
  33. String p1 = showPos();
  34. move(len);
  35. String p2 = showPos();
  36. if (drawing) {
  37. System.out.printf("{ \"from\": %s, \"to\": %s }%n", p1, p2);
  38. }
  39. }
  40.  
  41. /* 回転 */
  42. public void turn(double a) {
  43. angle += a;
  44. }
  45.  
  46. /* 一辺の長さが len の正三角形を描く */
  47. public void triangle(double len) {
  48. forward(len); turn(120); forward(len); turn(120); forward(len); turn(120);
  49. }
  50. }
  51.  
  52. /* 色付きのカメ */
  53. class ColorTurtle extends Turtle {
  54. /* 色は 0 から 360 の数値で表す */
  55. protected double color;
  56.  
  57. public ColorTurtle(double x, double y, double a, double c0) {
  58. super(x, y, a);
  59. color = c0;
  60. }
  61.  
  62. private static double range360(double h0) {
  63. double h = h0;
  64. while (h >= 360) h -= 360;
  65. while (h < 0) h += 360;
  66. return h;
  67. }
  68.  
  69. /* 色を表す文字列を返す */
  70. private String showColor() {
  71. double h = range360(color);
  72. int h1 = (int)floor(h) / 60;
  73. double f = h / 60 - h1;
  74. double r = 0, g = 0, b = 0;
  75. switch (h1) {
  76. case 0: r = 1; g = f; b = 0; break;
  77. case 1: r = 1 - f; g = 1; b = 0; break;
  78. case 2: r = 0; g = 1; b = f; break;
  79. case 3: r = 0; g = 1 - f; b = 1; break;
  80. case 4: r = f; g = 0; b = 1; break;
  81. case 5: r = 1; g = 0; b = 1 - f; break;
  82. }
  83.  
  84. return String.format("#%02x%02x%02x", (int)(255 * r), (int)(255 * g), (int)(255 * b));
  85. }
  86.  
  87. public void rotateColor(double angle) {
  88. color += angle;
  89. }
  90.  
  91. @Override
  92. public void forward(double len) {
  93. String p1 = showPos();
  94. move(len);
  95. String p2 = showPos();
  96. String c = showColor();
  97. if (drawing) {
  98. System.out.printf("{ \"color\": \"%s\", \"from\": %s, \"to\": %s }%n", c, p1, p2);
  99. }
  100. }
  101. }
  102.  
  103. class HalfTurtle extends Turtle {
  104. public HalfTurtle(double x, double y, double a) {
  105. super(x, y, a);
  106. }
  107.  
  108. @Override
  109. public void turn(double a) {
  110. super.turn(a / 2);
  111. }
  112. }
  113.  
  114. /* へそ曲がりのカメ … 指示と反対に回転する */
  115. class PerverseTurtle extends Turtle {
  116. public PerverseTurtle(double x, double y, double a) {
  117. super(x, y, a);
  118. }
  119.  
  120. @Override
  121. public void turn(double a) {
  122. super.turn(-a);
  123. }
  124. }
  125.  
  126. /* 酔っ払いのカメ … 少しフラフラする */
  127. class DrunkTurtle extends Turtle {
  128. public DrunkTurtle(double x, double y, double a) {
  129. super(x, y, a);
  130. }
  131.  
  132. @Override
  133. public void forward(double len) {
  134. String p1 = showPos();
  135. move(len);
  136. /* 乱数で位置を少しずらす */
  137. x += len * (random() * 0.1 - 0.05);
  138. y += len * (random() * 0.1 - 0.05);
  139. String p2 = showPos();
  140. if (drawing) {
  141. System.out.printf("{ \"from\": %s, \"to\": %s }%n", p1, p2);
  142. }
  143. }
  144. }
  145.  
  146. /* ジグザグカメ … まっすぐではなくジグザグに進む */
  147. class ZigZagTurtle extends Turtle {
  148. public ZigZagTurtle(double x, double y, double a) {
  149. super(x, y, a);
  150. }
  151.  
  152. @Override
  153. public void forward(double len) {
  154. double d = len / 4;
  155. turn(60);
  156. super.forward(d);
  157. turn(-120);
  158. super.forward(2 * d);
  159. turn(120);
  160. super.forward(2 * d);
  161. turn(-120);
  162. super.forward(2 * d);
  163. turn(120);
  164. super.forward(d);
  165. turn(-60);
  166. }
  167. }
  168.  
  169. /* 虹カメ … 少しずつ色が変わる */
  170. class RainbowTurtle extends ColorTurtle {
  171. private double rest = 0.0;
  172.  
  173. public RainbowTurtle(double x, double y, double a, double c) {
  174. super(x, y, a, c);
  175. }
  176.  
  177. @Override
  178. public void forward(double len0) {
  179. double len = len0;
  180.  
  181. if (rest > 0) {
  182. if (len >= rest) {
  183. super.forward(rest);
  184. rotateColor(12);
  185. len -= rest;
  186. rest = 0;
  187. } else {
  188. super.forward(len);
  189. rest -= len;
  190. /* rest != 0 */
  191. return;
  192. }
  193. }
  194. /* rest == 0.0 */
  195. while (len >= 10) {
  196. super.forward(10);
  197. rotateColor(12);
  198. len -= 10;
  199. }
  200.  
  201. if (len > 0) {
  202. super.forward(len);
  203. rest = 10 - len;
  204. }
  205. }
  206. }
  207.  
  208. public class Main {
  209. public static void main(String[] args) {
  210. int i;
  211. /* ジグザグカメ・酔っ払いカメ・虹カメの 3 つを生成する */
  212. Turtle[] turtles = {
  213. new ZigZagTurtle(100, 500, 0),
  214. new DrunkTurtle(250, 500, 0),
  215. new RainbowTurtle(400, 500, 0, 0)
  216. };
  217.  
  218. /* それぞれのカメが正三角形の飾りがついた五芒星を描く */
  219. for (i = 0; i < 5; i++) {
  220. for (Turtle turtle: turtles) {
  221. turtle.forward(100);
  222. turtle.triangle(10);
  223. turtle.turn(144);
  224. }
  225. }
  226. }
  227. }
  228.  
Success #stdin #stdout 0.19s 2184192KB
stdin
Standard input is empty
stdout
{ "from": { "x": 100.00, "y": 500.00 }, "to": { "x": 112.50, "y": 521.65 } }
{ "from": { "x": 112.50, "y": 521.65 }, "to": { "x": 137.50, "y": 478.35 } }
{ "from": { "x": 137.50, "y": 478.35 }, "to": { "x": 162.50, "y": 521.65 } }
{ "from": { "x": 162.50, "y": 521.65 }, "to": { "x": 187.50, "y": 478.35 } }
{ "from": { "x": 187.50, "y": 478.35 }, "to": { "x": 200.00, "y": 500.00 } }
{ "from": { "x": 200.00, "y": 500.00 }, "to": { "x": 201.25, "y": 502.17 } }
{ "from": { "x": 201.25, "y": 502.17 }, "to": { "x": 203.75, "y": 497.83 } }
{ "from": { "x": 203.75, "y": 497.83 }, "to": { "x": 206.25, "y": 502.17 } }
{ "from": { "x": 206.25, "y": 502.17 }, "to": { "x": 208.75, "y": 497.83 } }
{ "from": { "x": 208.75, "y": 497.83 }, "to": { "x": 210.00, "y": 500.00 } }
{ "from": { "x": 210.00, "y": 500.00 }, "to": { "x": 207.50, "y": 500.00 } }
{ "from": { "x": 207.50, "y": 500.00 }, "to": { "x": 210.00, "y": 504.33 } }
{ "from": { "x": 210.00, "y": 504.33 }, "to": { "x": 205.00, "y": 504.33 } }
{ "from": { "x": 205.00, "y": 504.33 }, "to": { "x": 207.50, "y": 508.66 } }
{ "from": { "x": 207.50, "y": 508.66 }, "to": { "x": 205.00, "y": 508.66 } }
{ "from": { "x": 205.00, "y": 508.66 }, "to": { "x": 206.25, "y": 506.50 } }
{ "from": { "x": 206.25, "y": 506.50 }, "to": { "x": 201.25, "y": 506.50 } }
{ "from": { "x": 201.25, "y": 506.50 }, "to": { "x": 203.75, "y": 502.17 } }
{ "from": { "x": 203.75, "y": 502.17 }, "to": { "x": 198.75, "y": 502.17 } }
{ "from": { "x": 198.75, "y": 502.17 }, "to": { "x": 200.00, "y": 500.00 } }
{ "from": { "x": 250.00, "y": 500.00 }, "to": { "x": 351.66, "y": 500.61 } }
{ "from": { "x": 351.66, "y": 500.61 }, "to": { "x": 361.23, "y": 501.03 } }
{ "from": { "x": 361.23, "y": 501.03 }, "to": { "x": 355.98, "y": 510.01 } }
{ "from": { "x": 355.98, "y": 510.01 }, "to": { "x": 350.77, "y": 501.73 } }
{ "color": "#ff0000", "from": { "x": 400.00, "y": 500.00 },  "to": { "x": 410.00, "y": 500.00 } }
{ "color": "#ff3300", "from": { "x": 410.00, "y": 500.00 },  "to": { "x": 420.00, "y": 500.00 } }
{ "color": "#ff6600", "from": { "x": 420.00, "y": 500.00 },  "to": { "x": 430.00, "y": 500.00 } }
{ "color": "#ff9900", "from": { "x": 430.00, "y": 500.00 },  "to": { "x": 440.00, "y": 500.00 } }
{ "color": "#ffcc00", "from": { "x": 440.00, "y": 500.00 },  "to": { "x": 450.00, "y": 500.00 } }
{ "color": "#ffff00", "from": { "x": 450.00, "y": 500.00 },  "to": { "x": 460.00, "y": 500.00 } }
{ "color": "#ccff00", "from": { "x": 460.00, "y": 500.00 },  "to": { "x": 470.00, "y": 500.00 } }
{ "color": "#99ff00", "from": { "x": 470.00, "y": 500.00 },  "to": { "x": 480.00, "y": 500.00 } }
{ "color": "#65ff00", "from": { "x": 480.00, "y": 500.00 },  "to": { "x": 490.00, "y": 500.00 } }
{ "color": "#32ff00", "from": { "x": 490.00, "y": 500.00 },  "to": { "x": 500.00, "y": 500.00 } }
{ "color": "#00ff00", "from": { "x": 500.00, "y": 500.00 },  "to": { "x": 510.00, "y": 500.00 } }
{ "color": "#00ff33", "from": { "x": 510.00, "y": 500.00 },  "to": { "x": 505.00, "y": 508.66 } }
{ "color": "#00ff65", "from": { "x": 505.00, "y": 508.66 },  "to": { "x": 500.00, "y": 500.00 } }
{ "from": { "x": 200.00, "y": 500.00 }, "to": { "x": 177.16, "y": 489.83 } }
{ "from": { "x": 177.16, "y": 489.83 }, "to": { "x": 182.39, "y": 539.56 } }
{ "from": { "x": 182.39, "y": 539.56 }, "to": { "x": 136.71, "y": 519.22 } }
{ "from": { "x": 136.71, "y": 519.22 }, "to": { "x": 141.94, "y": 568.95 } }
{ "from": { "x": 141.94, "y": 568.95 }, "to": { "x": 119.10, "y": 558.78 } }
{ "from": { "x": 119.10, "y": 558.78 }, "to": { "x": 116.81, "y": 557.76 } }
{ "from": { "x": 116.81, "y": 557.76 }, "to": { "x": 117.34, "y": 562.73 } }
{ "from": { "x": 117.34, "y": 562.73 }, "to": { "x": 112.77, "y": 560.70 } }
{ "from": { "x": 112.77, "y": 560.70 }, "to": { "x": 113.29, "y": 565.67 } }
{ "from": { "x": 113.29, "y": 565.67 }, "to": { "x": 111.01, "y": 564.66 } }
{ "from": { "x": 111.01, "y": 564.66 }, "to": { "x": 113.03, "y": 563.19 } }
{ "from": { "x": 113.03, "y": 563.19 }, "to": { "x": 108.46, "y": 561.15 } }
{ "from": { "x": 108.46, "y": 561.15 }, "to": { "x": 112.51, "y": 558.21 } }
{ "from": { "x": 112.51, "y": 558.21 }, "to": { "x": 107.94, "y": 556.18 } }
{ "from": { "x": 107.94, "y": 556.18 }, "to": { "x": 109.96, "y": 554.71 } }
{ "from": { "x": 109.96, "y": 554.71 }, "to": { "x": 110.22, "y": 557.20 } }
{ "from": { "x": 110.22, "y": 557.20 }, "to": { "x": 114.27, "y": 554.26 } }
{ "from": { "x": 114.27, "y": 554.26 }, "to": { "x": 114.79, "y": 559.23 } }
{ "from": { "x": 114.79, "y": 559.23 }, "to": { "x": 118.84, "y": 556.29 } }
{ "from": { "x": 118.84, "y": 556.29 }, "to": { "x": 119.10, "y": 558.78 } }
{ "from": { "x": 350.77, "y": 501.73 }, "to": { "x": 270.38, "y": 565.43 } }
{ "from": { "x": 270.38, "y": 565.43 }, "to": { "x": 262.04, "y": 571.05 } }
{ "from": { "x": 262.04, "y": 571.05 }, "to": { "x": 260.88, "y": 561.11 } }
{ "from": { "x": 260.88, "y": 561.11 }, "to": { "x": 270.35, "y": 565.00 } }
{ "color": "#00ff99", "from": { "x": 500.00, "y": 500.00 },  "to": { "x": 491.91, "y": 505.88 } }
{ "color": "#00ffcb", "from": { "x": 491.91, "y": 505.88 },  "to": { "x": 483.82, "y": 511.76 } }
{ "color": "#00ffff", "from": { "x": 483.82, "y": 511.76 },  "to": { "x": 475.73, "y": 517.63 } }
{ "color": "#00cbff", "from": { "x": 475.73, "y": 517.63 },  "to": { "x": 467.64, "y": 523.51 } }
{ "color": "#0099ff", "from": { "x": 467.64, "y": 523.51 },  "to": { "x": 459.55, "y": 529.39 } }
{ "color": "#0065ff", "from": { "x": 459.55, "y": 529.39 },  "to": { "x": 451.46, "y": 535.27 } }
{ "color": "#0033ff", "from": { "x": 451.46, "y": 535.27 },  "to": { "x": 443.37, "y": 541.14 } }
{ "color": "#0000ff", "from": { "x": 443.37, "y": 541.14 },  "to": { "x": 435.28, "y": 547.02 } }
{ "color": "#3300ff", "from": { "x": 435.28, "y": 547.02 },  "to": { "x": 427.19, "y": 552.90 } }
{ "color": "#6600ff", "from": { "x": 427.19, "y": 552.90 },  "to": { "x": 419.10, "y": 558.78 } }
{ "color": "#9800ff", "from": { "x": 419.10, "y": 558.78 },  "to": { "x": 411.01, "y": 564.66 } }
{ "color": "#cb00ff", "from": { "x": 411.01, "y": 564.66 },  "to": { "x": 409.96, "y": 554.71 } }
{ "color": "#ff00ff", "from": { "x": 409.96, "y": 554.71 },  "to": { "x": 419.10, "y": 558.78 } }
{ "from": { "x": 119.10, "y": 558.78 }, "to": { "x": 143.55, "y": 553.58 } }
{ "from": { "x": 143.55, "y": 553.58 }, "to": { "x": 110.10, "y": 516.42 } }
{ "from": { "x": 110.10, "y": 516.42 }, "to": { "x": 159.00, "y": 506.03 } }
{ "from": { "x": 159.00, "y": 506.03 }, "to": { "x": 125.55, "y": 468.87 } }
{ "from": { "x": 125.55, "y": 468.87 }, "to": { "x": 150.00, "y": 463.67 } }
{ "from": { "x": 150.00, "y": 463.67 }, "to": { "x": 152.45, "y": 463.15 } }
{ "from": { "x": 152.45, "y": 463.15 }, "to": { "x": 149.10, "y": 459.44 } }
{ "from": { "x": 149.10, "y": 459.44 }, "to": { "x": 153.99, "y": 458.40 } }
{ "from": { "x": 153.99, "y": 458.40 }, "to": { "x": 150.64, "y": 454.68 } }
{ "from": { "x": 150.64, "y": 454.68 }, "to": { "x": 153.09, "y": 454.16 } }
{ "from": { "x": 153.09, "y": 454.16 }, "to": { "x": 152.32, "y": 456.54 } }
{ "from": { "x": 152.32, "y": 456.54 }, "to": { "x": 157.21, "y": 455.50 } }
{ "from": { "x": 157.21, "y": 455.50 }, "to": { "x": 155.66, "y": 460.26 } }
{ "from": { "x": 155.66, "y": 460.26 }, "to": { "x": 160.55, "y": 459.22 } }
{ "from": { "x": 160.55, "y": 459.22 }, "to": { "x": 159.78, "y": 461.59 } }
{ "from": { "x": 159.78, "y": 461.59 }, "to": { "x": 158.11, "y": 459.74 } }
{ "from": { "x": 158.11, "y": 459.74 }, "to": { "x": 156.56, "y": 464.49 } }
{ "from": { "x": 156.56, "y": 464.49 }, "to": { "x": 153.22, "y": 460.78 } }
{ "from": { "x": 153.22, "y": 460.78 }, "to": { "x": 151.67, "y": 465.53 } }
{ "from": { "x": 151.67, "y": 465.53 }, "to": { "x": 150.00, "y": 463.67 } }
{ "from": { "x": 270.35, "y": 565.00 }, "to": { "x": 300.61, "y": 468.28 } }
{ "from": { "x": 300.61, "y": 468.28 }, "to": { "x": 303.60, "y": 458.57 } }
{ "from": { "x": 303.60, "y": 458.57 }, "to": { "x": 310.35, "y": 466.50 } }
{ "from": { "x": 310.35, "y": 466.50 }, "to": { "x": 300.34, "y": 468.58 } }
{ "color": "#ff00cb", "from": { "x": 419.10, "y": 558.78 },  "to": { "x": 422.19, "y": 549.27 } }
{ "color": "#ff0098", "from": { "x": 422.19, "y": 549.27 },  "to": { "x": 425.28, "y": 539.76 } }
{ "color": "#ff0066", "from": { "x": 425.28, "y": 539.76 },  "to": { "x": 428.37, "y": 530.25 } }
{ "color": "#ff0033", "from": { "x": 428.37, "y": 530.25 },  "to": { "x": 431.46, "y": 520.74 } }
{ "color": "#ff0000", "from": { "x": 431.46, "y": 520.74 },  "to": { "x": 434.55, "y": 511.23 } }
{ "color": "#ff3300", "from": { "x": 434.55, "y": 511.23 },  "to": { "x": 437.64, "y": 501.72 } }
{ "color": "#ff6600", "from": { "x": 437.64, "y": 501.72 },  "to": { "x": 440.73, "y": 492.20 } }
{ "color": "#ff9900", "from": { "x": 440.73, "y": 492.20 },  "to": { "x": 443.82, "y": 482.69 } }
{ "color": "#ffcc00", "from": { "x": 443.82, "y": 482.69 },  "to": { "x": 446.91, "y": 473.18 } }
{ "color": "#ffff00", "from": { "x": 446.91, "y": 473.18 },  "to": { "x": 450.00, "y": 463.67 } }
{ "color": "#ccff00", "from": { "x": 450.00, "y": 463.67 },  "to": { "x": 453.09, "y": 454.16 } }
{ "color": "#99ff00", "from": { "x": 453.09, "y": 454.16 },  "to": { "x": 459.78, "y": 461.59 } }
{ "color": "#65ff00", "from": { "x": 459.78, "y": 461.59 },  "to": { "x": 450.00, "y": 463.67 } }
{ "from": { "x": 150.00, "y": 463.67 }, "to": { "x": 133.27, "y": 482.25 } }
{ "from": { "x": 133.27, "y": 482.25 }, "to": { "x": 182.18, "y": 492.65 } }
{ "from": { "x": 182.18, "y": 492.65 }, "to": { "x": 148.72, "y": 529.80 } }
{ "from": { "x": 148.72, "y": 529.80 }, "to": { "x": 197.63, "y": 540.20 } }
{ "from": { "x": 197.63, "y": 540.20 }, "to": { "x": 180.90, "y": 558.78 } }
{ "from": { "x": 180.90, "y": 558.78 }, "to": { "x": 179.23, "y": 560.64 } }
{ "from": { "x": 179.23, "y": 560.64 }, "to": { "x": 184.12, "y": 561.68 } }
{ "from": { "x": 184.12, "y": 561.68 }, "to": { "x": 180.77, "y": 565.39 } }
{ "from": { "x": 180.77, "y": 565.39 }, "to": { "x": 185.66, "y": 566.43 } }
{ "from": { "x": 185.66, "y": 566.43 }, "to": { "x": 183.99, "y": 568.29 } }
{ "from": { "x": 183.99, "y": 568.29 }, "to": { "x": 183.22, "y": 565.91 } }
{ "from": { "x": 183.22, "y": 565.91 }, "to": { "x": 179.87, "y": 569.63 } }
{ "from": { "x": 179.87, "y": 569.63 }, "to": { "x": 178.33, "y": 564.87 } }
{ "from": { "x": 178.33, "y": 564.87 }, "to": { "x": 174.98, "y": 568.59 } }
{ "from": { "x": 174.98, "y": 568.59 }, "to": { "x": 174.21, "y": 566.21 } }
{ "from": { "x": 174.21, "y": 566.21 }, "to": { "x": 176.66, "y": 566.73 } }
{ "from": { "x": 176.66, "y": 566.73 }, "to": { "x": 175.11, "y": 561.97 } }
{ "from": { "x": 175.11, "y": 561.97 }, "to": { "x": 180.00, "y": 563.01 } }
{ "from": { "x": 180.00, "y": 563.01 }, "to": { "x": 178.46, "y": 558.26 } }
{ "from": { "x": 178.46, "y": 558.26 }, "to": { "x": 180.90, "y": 558.78 } }
{ "from": { "x": 300.34, "y": 468.58 }, "to": { "x": 330.29, "y": 560.70 } }
{ "from": { "x": 330.29, "y": 560.70 }, "to": { "x": 333.16, "y": 569.86 } }
{ "from": { "x": 333.16, "y": 569.86 }, "to": { "x": 323.24, "y": 567.52 } }
{ "from": { "x": 323.24, "y": 567.52 }, "to": { "x": 329.79, "y": 560.33 } }
{ "color": "#32ff00", "from": { "x": 450.00, "y": 463.67 },  "to": { "x": 453.09, "y": 473.18 } }
{ "color": "#00ff00", "from": { "x": 453.09, "y": 473.18 },  "to": { "x": 456.18, "y": 482.69 } }
{ "color": "#00ff33", "from": { "x": 456.18, "y": 482.69 },  "to": { "x": 459.27, "y": 492.20 } }
{ "color": "#00ff65", "from": { "x": 459.27, "y": 492.20 },  "to": { "x": 462.36, "y": 501.72 } }
{ "color": "#00ff99", "from": { "x": 462.36, "y": 501.72 },  "to": { "x": 465.45, "y": 511.23 } }
{ "color": "#00ffcb", "from": { "x": 465.45, "y": 511.23 },  "to": { "x": 468.54, "y": 520.74 } }
{ "color": "#00ffff", "from": { "x": 468.54, "y": 520.74 },  "to": { "x": 471.63, "y": 530.25 } }
{ "color": "#00cbff", "from": { "x": 471.63, "y": 530.25 },  "to": { "x": 474.72, "y": 539.76 } }
{ "color": "#0099ff", "from": { "x": 474.72, "y": 539.76 },  "to": { "x": 477.81, "y": 549.27 } }
{ "color": "#0065ff", "from": { "x": 477.81, "y": 549.27 },  "to": { "x": 480.90, "y": 558.78 } }
{ "color": "#0033ff", "from": { "x": 480.90, "y": 558.78 },  "to": { "x": 483.99, "y": 568.29 } }
{ "color": "#0000ff", "from": { "x": 483.99, "y": 568.29 },  "to": { "x": 474.21, "y": 566.21 } }
{ "color": "#3300ff", "from": { "x": 474.21, "y": 566.21 },  "to": { "x": 480.90, "y": 558.78 } }
{ "from": { "x": 180.90, "y": 558.78 }, "to": { "x": 183.51, "y": 533.92 } }
{ "from": { "x": 183.51, "y": 533.92 }, "to": { "x": 137.84, "y": 554.25 } }
{ "from": { "x": 137.84, "y": 554.25 }, "to": { "x": 143.06, "y": 504.53 } }
{ "from": { "x": 143.06, "y": 504.53 }, "to": { "x": 97.39, "y": 524.86 } }
{ "from": { "x": 97.39, "y": 524.86 }, "to": { "x": 100.00, "y": 500.00 } }
{ "from": { "x": 100.00, "y": 500.00 }, "to": { "x": 100.26, "y": 497.51 } }
{ "from": { "x": 100.26, "y": 497.51 }, "to": { "x": 95.69, "y": 499.55 } }
{ "from": { "x": 95.69, "y": 499.55 }, "to": { "x": 96.22, "y": 494.57 } }
{ "from": { "x": 96.22, "y": 494.57 }, "to": { "x": 91.65, "y": 496.61 } }
{ "from": { "x": 91.65, "y": 496.61 }, "to": { "x": 91.91, "y": 494.12 } }
{ "from": { "x": 91.91, "y": 494.12 }, "to": { "x": 93.93, "y": 495.59 } }
{ "from": { "x": 93.93, "y": 495.59 }, "to": { "x": 94.46, "y": 490.62 } }
{ "from": { "x": 94.46, "y": 490.62 }, "to": { "x": 98.50, "y": 493.56 } }
{ "from": { "x": 98.50, "y": 493.56 }, "to": { "x": 99.02, "y": 488.59 } }
{ "from": { "x": 99.02, "y": 488.59 }, "to": { "x": 101.05, "y": 490.05 } }
{ "from": { "x": 101.05, "y": 490.05 }, "to": { "x": 98.76, "y": 491.07 } }
{ "from": { "x": 98.76, "y": 491.07 }, "to": { "x": 102.81, "y": 494.01 } }
{ "from": { "x": 102.81, "y": 494.01 }, "to": { "x": 98.24, "y": 496.04 } }
{ "from": { "x": 98.24, "y": 496.04 }, "to": { "x": 102.28, "y": 498.98 } }
{ "from": { "x": 102.28, "y": 498.98 }, "to": { "x": 100.00, "y": 500.00 } }
{ "from": { "x": 329.79, "y": 560.33 }, "to": { "x": 247.08, "y": 506.39 } }
{ "from": { "x": 247.08, "y": 506.39 }, "to": { "x": 238.66, "y": 500.64 } }
{ "from": { "x": 238.66, "y": 500.64 }, "to": { "x": 248.27, "y": 496.72 } }
{ "from": { "x": 248.27, "y": 496.72 }, "to": { "x": 247.00, "y": 506.33 } }
{ "color": "#6600ff", "from": { "x": 480.90, "y": 558.78 },  "to": { "x": 472.81, "y": 552.90 } }
{ "color": "#9800ff", "from": { "x": 472.81, "y": 552.90 },  "to": { "x": 464.72, "y": 547.02 } }
{ "color": "#cb00ff", "from": { "x": 464.72, "y": 547.02 },  "to": { "x": 456.63, "y": 541.14 } }
{ "color": "#ff00ff", "from": { "x": 456.63, "y": 541.14 },  "to": { "x": 448.54, "y": 535.27 } }
{ "color": "#ff00cb", "from": { "x": 448.54, "y": 535.27 },  "to": { "x": 440.45, "y": 529.39 } }
{ "color": "#ff0098", "from": { "x": 440.45, "y": 529.39 },  "to": { "x": 432.36, "y": 523.51 } }
{ "color": "#ff0066", "from": { "x": 432.36, "y": 523.51 },  "to": { "x": 424.27, "y": 517.63 } }
{ "color": "#ff0033", "from": { "x": 424.27, "y": 517.63 },  "to": { "x": 416.18, "y": 511.76 } }
{ "color": "#ff0000", "from": { "x": 416.18, "y": 511.76 },  "to": { "x": 408.09, "y": 505.88 } }
{ "color": "#ff3300", "from": { "x": 408.09, "y": 505.88 },  "to": { "x": 400.00, "y": 500.00 } }
{ "color": "#ff6600", "from": { "x": 400.00, "y": 500.00 },  "to": { "x": 391.91, "y": 494.12 } }
{ "color": "#ff9900", "from": { "x": 391.91, "y": 494.12 },  "to": { "x": 401.05, "y": 490.05 } }
{ "color": "#ffcc00", "from": { "x": 401.05, "y": 490.05 },  "to": { "x": 400.00, "y": 500.00 } }