point p[] = new point[66]; double ix[] = new double[p.length]; double iy[] = new double[p.length]; double v1x[] = new double[p.length]; double v1y[] = new double[p.length]; double v2x[] = new double[p.length]; double v2y[] = new double[p.length]; int cur; double dist, dire; double n0x[] = {22, 27, 45, 80, 139, 192, 228, 249, 256, 251, 234, 198, 139, 84, 48, 28, 22, 63, 67, 80, 103, 139, 175, 199, 211, 215, 211, 199, 175, 139, 103, 80, 67, 63}; double n0y[] = {179, 246, 301, 337, 350, 337, 300, 245, 179, 113, 58, 21, 7, 21, 58, 113, 179, 179, 115, 66, 34, 23, 35, 68, 118, 179, 241, 290, 323, 335, 323, 290, 241, 179}; double n0vs[] = {22,179,22,203,24,225,30,267,36,285,53,316,65,328,95,346,115,350,159,350,177,346,206,328,218,315,237,284,244,266,254,224,256,202,256,156,254,133,248,92,242,73,225,42,213,30,183,12,163,7,117,7,99,12,69,30,57,42,39,73,32,92,24,133,22,156,22,179,63,179,63,155,64,134,69,96,74,79,86,52,93,41,113,27,125,23,153,23,165,27,185,43,193,54,205,82,209,99,214,137,215,157,215,201,214,222,209,260,205,276,193,304,185,315,165,331,153,335,125,335,113,331,93,315,86,304,74,276,69,260,64,222,63,201,63,179}; double n1x[] = {120, 122, 121, 118, 129, 141, 153, 165, 162, 161, 161, 161, 165, 161, 102, 46, 46, 61, 120}; double n1y[] = {39, 216, 282, 344, 343, 343, 343, 344, 282, 217, 133, 68, 3, 0, 27, 52, 56, 72, 39}; double n1vs[] = {120,39,120,39,122,216,122,239,121,269,120,303,119,323,122,343,125,343,133,343,137,343,145,343,149,343,157,343,161,343,163,324,162,303,161,261,161,239,161,217,161,133,161,111,161,89,162,46,163,25,165,3,161,0,143,9,124,18,84,36,65,45,46,52,46,56,52,60,57,65,61,72,120,39,120,39}; double n2x[] = {32, 50, 53, 59, 70, 89, 117, 156, 173, 170, 162, 144, 115, 70, 10, 10, 64, 118, 171, 225, 223, 225, 176, 112, 65, 84, 108, 134, 156, 183, 203, 215, 219, 211, 191, 161, 124, 70, 32}; double n2y[] = {57, 82, 81, 64, 46, 32, 26, 44, 98, 130, 160, 192, 230, 277, 338, 344, 343, 343, 343, 343, 327, 308, 311, 312, 312, 288, 262, 236, 214, 184, 156, 127, 95, 56, 28, 12, 7, 19, 57}; double n2vs[] = {32,57,32,57,50,82,50,82,53,81,54,76,56,70,61,57,65,51,75,40,81,36,97,28,106,26,132,26,145,32,167,56,173,74,173,110,172,120,169,140,166,150,157,170,151,181,136,204,127,216,103,244,88,260,54,295,33,315,10,338,10,344,28,343,46,343,82,343,100,343,136,343,153,343,189,343,207,343,223,337,223,332,223,322,223,316,211,309,194,310,157,312,136,312,112,312,65,312,70,306,76,297,92,279,100,271,117,253,125,245,142,228,149,221,166,204,175,194,191,175,198,165,208,147,212,137,217,117,219,107,219,80,216,67,206,45,199,35,182,21,172,15,149,9,137,7,103,7,85,11,55,28,43,40,32,57}; double n3x[] = {40, 51, 55, 75, 111, 130, 147, 159, 164, 162, 153, 136, 108, 85, 86, 86, 86, 85, 96, 108, 136, 158, 172, 178, 173, 157, 131, 98, 75, 56, 41, 30, 27, 25, 21, 53, 97, 149, 189, 215, 224, 216, 195, 168, 141, 141, 164, 185, 202, 208, 201, 180, 150, 113, 67, 40}; double n3y[] = {37, 64, 65, 35, 23, 27, 38, 57, 85, 111, 135, 154, 161, 159, 164, 170, 175, 181, 178, 177, 181, 194, 217, 251, 286, 312, 329, 335, 332, 324, 313, 302, 304, 320, 334, 345, 350, 343, 321, 288, 245, 208, 185, 172, 167, 165, 155, 138, 114, 82, 48, 25, 12, 7, 17, 37}; double n3vs[] = {40,37,40,37,51,64,51,64,55,63,58,53,65,44,85,27,97,23,117,23,124,24,136,29,142,33,152,43,156,49,162,64,164,74,164,93,163,102,160,120,157,128,149,143,143,149,129,159,119,161,99,161,92,160,85,161,86,163,86,166,86,168,86,171,86,173,86,177,85,178,88,179,92,179,100,177,104,177,118,177,127,178,145,184,152,188,164,200,169,207,176,226,178,238,178,264,176,275,169,296,164,305,150,319,141,325,121,333,110,335,90,335,82,334,68,330,62,327,50,320,45,317,37,309,33,305,30,302,27,304,27,309,26,314,24,327,22,331,30,338,41,342,65,348,79,350,116,350,133,348,164,338,178,330,200,312,209,301,221,275,224,261,224,230,221,218,210,199,203,191,187,179,178,175,158,170,149,168,141,167,141,165,148,163,156,159,172,151,179,145,192,132,197,123,206,104,208,94,208,69,206,57,196,39,189,31,171,19,161,15,138,9,126,7,94,7,79,10,55,24,46,30,40,37}; double n4x[] = {11, 11, 43, 88, 134, 167, 167, 166, 163, 185, 207, 205, 204, 204, 232, 253, 251, 253, 232, 204, 204, 205, 208, 191, 175, 144, 103, 57, 11, 167, 167, 51, 74, 107, 140, 166, 167}; double n4y[] = {244, 253, 252, 251, 250, 250, 271, 311, 344, 343, 344, 311, 271, 250, 251, 253, 247, 220, 223, 224, 169, 84, 10, 12, 10, 56, 115, 180, 244, 56, 224, 224, 187, 140, 93, 56, 56}; double n4vs[] = {11,244,11,244,11,253,18,253,29,252,57,252,72,251,104,251,119,250,148,250,159,250,167,250,167,271,167,284,167,297,165,324,164,335,170,343,177,343,193,343,200,343,206,336,206,325,204,298,204,284,204,271,204,250,214,250,223,250,240,251,247,252,251,246,251,241,251,232,251,227,247,221,240,222,223,224,214,224,204,224,204,169,204,140,204,112,206,57,207,32,202,11,197,12,187,12,181,11,167,23,156,38,131,74,118,94,88,136,73,157,41,202,26,223,11,244,167,56,167,56,167,224,167,224,51,224,56,214,64,202,84,172,95,157,118,124,129,109,150,78,159,66,166,56,167,56,167,56}; double n5x[] = {79, 86, 116, 154, 192, 222, 221, 222, 225, 222, 195, 152, 91, 63, 59, 62, 63, 62, 58, 63, 81, 115, 141, 163, 179, 185, 178, 161, 137, 108, 87, 67, 49, 37, 34, 31, 26, 26, 31, 106, 157, 196, 222, 231, 224, 205, 174, 135, 100, 79}; double n5y[] = {156, 42, 42, 43, 45, 49, 40, 26, 12, 10, 11, 11, 10, 7, 10, 49, 93, 136, 177, 181, 171, 164, 168, 182, 207, 243, 284, 313, 330, 335, 333, 326, 314, 298, 298, 312, 327, 331, 312, 350, 342, 318, 282, 237, 201,171, 150, 143, 147, 156}; double n5vs[] = {79,156,79,156,86,42,93,42,103,42,128,43,141,43,167,44,180,45,204,46,214,47,221,48,221,45,221,35,221,31,222,21,223,16,225,12,222,10,216,10,207,11,182,11,168,11,126,11,106,11,78,9,69,8,63,7,59,10,60,21,61,35,62,64,63,79,63,107,62,121,61,150,60,164,58,177,63,181,66,179,72,175,89,166,101,164,124,164,132,166,149,171,156,176,169,188,175,197,183,217,185,229,185,258,182,272,174,295,168,305,154,320,146,326,128,333,118,335,101,335,94,334,80,331,73,329,60,323,54,319,44,309,40,304,37,298,34,298,33,302,32,307,29,318,28,323,26,327,26,331,37,302,32,307,77,349,91,350,125,350,142,347,172,336,185,328,207,308,216,296,228,268,231,253,231,225,228,213,219,190,213,180,196,162,186,156,162,146,149,143,120,143,108,144,92,149,85,152,79,156}; double n6x[] = {209, 202, 193, 181, 117, 70, 42, 32, 41, 65, 101, 142, 188, 223, 245, 253, 243, 217, 185, 155, 125, 103, 86, 74, 73, 76, 84, 98, 118, 146, 181, 195, 207, 209,209, 205, 192, 171, 143, 116, 95, 81, 76, 82, 96, 118, 146, 193, 209}; double n6y[] = {24, 8, 7, 7, 22, 64, 129, 207, 274, 318, 342, 350, 342, 319, 284, 238, 191, 162, 148, 144, 148, 160, 175, 192, 192, 158, 121, 84, 53, 31, 23, 24, 26, 24, 248, 283, 311, 328, 335, 328, 311, 283, 248, 214, 187, 169, 163, 187, 248}; double n6vs[] = {209,24,209,24,202,8,199,7,196,7,190,7,186,7,157,6,135,11,98,32,83,46,58,83,48,104,35,153,32,179,32,233,35,256,47,292,55,307,75,329,87,338,114,347,128,350,159,350,174,347,202,337,213,329,233,309,240,298,250,270,253,255,253,219,250,203,236,179,227,169,207,155,196,150,173,145,163,144,144,144,134,145,117,151,109,155,96,164,91,169,81,181,77,186,74,192,73,192,73,182,74,171,77,146,80,134,87,108,92,96,103,73,110,62,126,44,135,36,156,25,168,23,186,23,191,23,199,24,203,25,207,26,209,24,209,24,209,248,209,261,208,273,202,295,197,303,186,318,179,324,163,333,153,335,133,335,124,333,108,324,101,318,89,303,84,294,78,273,76,261,76,236,78,224,85,203,90,194,102,179,110,173,127,165,136,163,167,163,183,171,204,202,209,223,209,248}; double n7x[] = {253, 253, 229, 202, 178, 139, 107, 77, 40, 42, 40, 148, 214, 181, 136, 86, 37, 55, 74, 161, 253}; double n7y[] = {22, 14, 15, 15, 15, 15, 14, 13, 10, 32, 55, 51, 50, 108, 183, 265, 344, 343, 344, 182, 22}; double n7vs[] = {253,22,253,22,253,14,244,14,236,14,221,15,212,15,202,15,178,15,165,15,152,15,125,14,115,14,98,14,88,13,66,12,54,11,41,17,42,24,42,41,41,48,83,52,119,51,177,50,199,50,205,65,194,85,167,131,152,156,120,210,103,237,69,294,53,320,43,343,49,343,62,343,69,343,101,291,130,237,192,127,223,74,253,22}; double n8x[] = {28, 37, 60, 96, 140, 183, 218, 242, 251, 243, 224, 200, 179, 179, 221, 235, 229, 212, 183, 140, 101, 72, 53, 46, 51, 64, 82, 101, 101, 45, 28, 207, 202, 189, 168, 140, 112, 90, 77, 72, 77, 90, 112, 140, 168, 189, 202, 207, 194, 191, 181, 165, 140, 116, 99, 90, 87, 90, 99, 116, 140, 165, 181, 191, 194}; double n8y[] = {254, 296, 326, 344, 350, 343, 322, 288, 242, 204, 179, 164, 158, 154, 125, 81, 53, 30, 13, 7, 14, 31, 56, 87, 113, 134, 148, 156, 159, 198, 254, 251, 285, 311, 329, 335, 329, 311, 285, 251, 217, 191, 173, 167, 173, 191, 217, 251, 87, 111, 132, 146, 151, 146, 132, 111, 87, 63, 42, 28, 23, 28, 42, 63, 87}; double n8vs[] = {28,254,28,270,30,284,42,308,50,318,70,334,82,341,109,348,124,350,155,350,169,348,196,338,208,331,228,312,236,301,248,274,251,259,251,227,248,214,238,194,231,185,216,172,208,167,192,161,185,159,179,158,179,154,197,148,211,139,230,112,235,97,235,71,233,62,225,44,220,36,204,23,195,18,171,9,156,7,125,7,113,9,90,18,80,24,64,38,57,47,48,66,46,76,46,96,48,105,54,121,59,128,69,139,75,144,88,152,95,154,101,156,101,159,75,168,56,181,34,215,28,234,28,254,207,251,207,263,205,275,199,295,195,304,183,319,176,325,159,333,150,335,129,335,120,333,103,325,96,319,84,304,80,295,74,275,72,263,72,239,74,228,80,207,84,198,96,183,103,178,120,169,129,167,150,167,159,169,176,178,183,183,195,198,199,207,205,228,207,239,207,251,194,87,194,95,193,104,189,119,186,126,177,138,171,142,158,149,150,151,131,151,123,149,109,142,104,138,95,126,92,119,88,104,87,95,87,78,88,70,92,55,95,48,104,37,109,32,123,25,131,23,150,23,158,25,171,32,177,37,186,48,189,55,193,70,194,78,194,87}; double n9x[] = {53, 51, 57, 61, 77, 100, 162, 208, 237, 247, 238, 213, 178, 136, 90, 55, 33, 25, 51, 121, 171, 202, 203, 197, 180, 149, 103, 76, 53, 201, 196, 183, 161, 130, 85, 69, 87, 135, 183, 201}; double n9y[] = {315, 316, 330, 343, 348, 350, 335, 293, 229, 151, 84, 40, 15, 7, 15, 38, 72, 114, 188, 214, 201, 167, 167, 227, 281, 320, 335, 330, 315, 101, 136, 166, 187, 195, 176, 114, 47, 23, 45, 101}; double n9vs[] = {53,315,53,315,51,316,53,320,55,324,59,335,60,340,65,345,70,346,84,349,92,350,123,350,144,345,180,325,196,311,221,275,230,254,244,205,247,179,247,125,244,103,232,66,224,51,203,28,192,20,165,10,150,7,119,7,103,10,76,21,64,28,45,47,38,59,28,85,25,99,25,146,34,171,68,206,91,214,141,214,158,210,184,192,194,181,202,167,203,167,203,187,201,207,193,247,188,265,171,297,161,310,136,330,121,335,93,335,85,333,68,326,60,321,53,315,201,101,201,113,199,125,193,147,189,157,177,175,169,182,152,192,142,195,111,195,96,189,74,164,69,143,69,86,75,64,99,31,115,23,155,23,171,30,195,59,201,78,201,101}; int noline1; int noline2; double lColh, lCols, lColb, ilColb; double oColh, oCols, oColb, ioColb; boolean mouseP; Color col; //sample [setup, 600, 600]{ setBackColor(0, 0, 0); for(int i = 0; i < p.length; i ++){ p[i] = point(monitorWidth/2., monitorHeight/2.); ix[i] = p[i].x; iy[i] = p[i].y; } noline1 = 16; noline2 = 100; numchange(n0x, n0y, n0vs); lColh = 0.3; lCols = 0.99; lColb = 0.0; ilColb = lColb; oColh = 0.7; oCols = 0.99; oColb = 0.99; ioColb = oColb; mouseP = false; mouseX = monitorWidth; mouseY = monitorHeight; } [paint]{ clearAll(); setColor(255, 255, 255); col = Color.getHSBColor((float)lColh, (float)lCols, (float)lColb); setColor(col); for(int i = 0; i < cur-1; i ++){ if(i != noline1 && i != noline2){ drawBezierCurve(p[i].x, p[i].y, p[i].x + v2x[i], p[i].y + v2y[i], p[i+1].x + v1x[i+1], p[i+1].y + v1y[i+1], p[i+1].x, p[i+1].y); } } if(noline1 == 100 && noline2 == 100){ drawHalfCurve(p[cur-1].x, p[cur-1].y, p[0].x, p[0].y); } if(noline1 != 100 && noline2 == 100){ drawHalfCurve(p[noline1+1].x, p[noline1+1].y, p[cur-1].x, p[cur-1].y); drawHalfCurve(p[noline1].x, p[noline1].y, p[0].x, p[0].y); } if(noline2 != 100){ drawHalfCurve(p[0].x, p[0].y, p[noline1].x, p[noline1].y); drawHalfCurve(p[noline1+1].x, p[noline1+1].y, p[noline2].x, p[noline2].y); drawHalfCurve(p[noline2+1].x, p[noline2+1].y, p[cur-1].x, p[cur-1].y); } col = Color.getHSBColor((float)oColh, (float)oCols, (float)oColb); setColor(col); for(int i = 0; i < cur-1; i++){ drawOval(p[i].x-1, p[i].y-1, 2, 2); } } [always]{ for(int i = 0; i < p.length; i ++){ dist = p[i].distanceTo(ix[i], iy[i]); dire = p[i].directionTo(ix[i], iy[i]); p[i].push(dist/10., dire); if(mouseP == false){ dist = mouse.distanceTo(p[i]); dire = mouse.directionTo(p[i]); dist = 100. - dist; if(dist < 0.) dist = 0.; p[i].push(dist, dire); }else{ dist = p[i].distanceTo(mouse); dire = p[i].directionTo(mouse); p[i].push(dist/3., dire); } } lColb = lColb + (ilColb - lColb)/20.; oColb = oColb + (ioColb - oColb)/20.; } [interval, 7, 10]{ ilColb = 0.0; ioColb = 0.99; } [interval, 3.5, 10]{ ilColb = 0.99; ioColb = 0.0; } [interval, 0, 100]{ noline1 = 16; noline2 = 100; numchange(n0x, n0y, n0vs); } [interval, 10, 100]{ noline1 = 100; noline2 = 100; numchange(n1x, n1y, n1vs); } [interval, 20, 100]{ noline1 = 100; noline2 = 100; numchange(n2x, n2y, n2vs); } [interval, 30, 100]{ noline1 = 100; noline2 = 100; numchange(n3x, n3y, n3vs); } [interval, 40, 100]{ noline1 = 28; noline2 = 100; numchange(n4x, n4y, n4vs); } [interval, 50, 100]{ noline1 = 100; noline2 = 100; numchange(n5x, n5y, n5vs); } [interval, 60, 100]{ noline1 = 33; noline2 = 100; numchange(n6x, n6y, n6vs); } [interval, 70, 100]{ noline1 = 100; noline2 = 100; numchange(n7x, n7y, n7vs); } [interval, 80, 100]{ noline1 = 30; noline2 = 47; numchange(n8x, n8y, n8vs); } [interval, 90, 100]{ noline1 = 28; noline2 = 100; numchange(n9x, n9y, n9vs); } [mouseEnter]{ } [mouseExit]{ } [mousePressed]{ mouseP = true; } [mouseReleased]{ mouseP = false; } void drawHalfCurve(double xx, double yy, double xxx, double yyy){ drawBezierCurve(xx, yy, (xx + xxx)/2., (yy + yyy) / 2., (xxx + xx)/2., (yy + yyy)/2., xxx, yyy); } void numchange(double nnx[], double nny[], double nnvs[]){ cur = 0; for(int i = 0; i < nnx.length; i++){ ix[i] = nnx[i]+170; iy[i] = nny[i]+120; cur++; } for(int i = 0; i < cur; i ++){ v1x[i] = nnvs[i*4]-nnx[i]; v1y[i] = nnvs[i*4+1]-nny[i]; v2x[i] = nnvs[i*4+2]-nnx[i]; v2y[i] = nnvs[i*4+3]-nny[i]; } for(int i = cur; i < p.length; i++){ ix[i] = nnx[cur-1]+170; iy[i] = nny[cur-1]+120; v1x[i] = v1x[cur-1]; v1y[i] = v1y[cur-1]; v2x[i] = v2x[cur-1]; v2y[i] = v2y[cur-1]; } }