{"id":59,"date":"2011-02-18T06:48:25","date_gmt":"2011-02-18T06:48:25","guid":{"rendered":"http:\/\/www.funkboxing.com\/wordpress\/?p=59"},"modified":"2021-01-03T18:19:18","modified_gmt":"2021-01-03T18:19:18","slug":"processing-js-test","status":"publish","type":"post","link":"http:\/\/funkboxing.com\/wordpress\/?p=59","title":{"rendered":"Simple Ragdoll"},"content":{"rendered":"<p>you may recognize this guy from the header- actually they&#8217;re cousins.<br \/>\nthis was some code I wrote\/stole to get started in processing.js.<br \/>\nokay, so I clearly enjoy watching things fall down.<br \/>\n[processing]<br \/>\n\/\/ . 0 0,0<br \/>\n\/\/. . . 123 -1,-1 0,-1 +1,-1<br \/>\n\/\/ . 4 0,-2<br \/>\n\/\/. . 5 7 -1,-3 +1,-3<br \/>\n\/\/. . 6 8 -1,-4 +1,-4<br \/>\n\/\/<br \/>\n\/\/ 0-2head, 2-1armL, 2-3armR, 2-4back,<br \/>\n\/\/ 4-5thighL, 5-6shinL<br \/>\n\/\/ 4-7thighR, 7-8shinR<\/p>\n<p>VerletPoint vPointA = new VerletPoint(100, 100);<br \/>\nVerletPoint[] vPointArr = new VerletPoint[9];<br \/>\nVerletStick[] vStickArr = new VerletStick[8];<\/p>\n<p>int nVP = 9;<br \/>\nint nVS = 8;<\/p>\n<p>int xDIM = 300;<br \/>\nint yDIM = 100;<\/p>\n<p>void setup() {<br \/>\nbackground(255);<br \/>\nfill(255);<br \/>\nstroke(#568984);<br \/>\nsize(xDIM, yDIM);<br \/>\nsmooth();<br \/>\nframeRate(30);<br \/>\nstrokeWeight(3);<\/p>\n<p>vPointArr[0] = new VerletPoint(100, 100); \/\/<br \/>\nvPointArr[1] = new VerletPoint(100-10, 100-10);<br \/>\nvPointArr[2] = new VerletPoint(100, 100-10);<br \/>\nvPointArr[3] = new VerletPoint(100+10, 100-10);<br \/>\nvPointArr[4] = new VerletPoint(100, 100-20);<br \/>\nvPointArr[5] = new VerletPoint(100-10, 100-30);<br \/>\nvPointArr[6] = new VerletPoint(100-10, 100-40);<br \/>\nvPointArr[7] = new VerletPoint(100+10, 100-30);<br \/>\nvPointArr[8] = new VerletPoint(100+10, 100-40);<\/p>\n<p>vStickArr[0] = new VerletStick(vPointArr[0], vPointArr[2]);<br \/>\nvStickArr[1] = new VerletStick(vPointArr[2], vPointArr[1]);<br \/>\nvStickArr[2] = new VerletStick(vPointArr[2], vPointArr[3]);<br \/>\nvStickArr[3] = new VerletStick(vPointArr[2], vPointArr[4]);<br \/>\nvStickArr[4] = new VerletStick(vPointArr[4], vPointArr[5]);<br \/>\nvStickArr[5] = new VerletStick(vPointArr[5], vPointArr[6]);<br \/>\nvStickArr[6] = new VerletStick(vPointArr[4], vPointArr[7]);<br \/>\nvStickArr[7] = new VerletStick(vPointArr[7], vPointArr[8]);<\/p>\n<p>}<\/p>\n<p>void draw() {<br \/>\nif(mousePressed){<br \/>\nvPointArr[0].x = mouseX;<br \/>\nvPointArr[0].y = mouseY;<\/p>\n<p>}else{<br \/>\nvPointA.y += 0.5;<br \/>\n}<br \/>\nvPointA.update();<br \/>\nvPointA.bounds(0, 0, xDIM, yDIM);<\/p>\n<p>for(int p = 0; p &lt; nVP; p++){<br \/>\nvPointArr[p].y += 0.5;<br \/>\nvPointArr[p].update();<br \/>\nvPointArr[p].bounds(0, 0, xDIM, yDIM);<br \/>\n}<\/p>\n<p>background(225);<br \/>\nfor(int s = 0; s &lt; nVS; s++){ vStickArr[s].update(); } line(vPointArr[0].x, vPointArr[0].y, vPointArr[2].x, vPointArr[2].y); line(vPointArr[2].x, vPointArr[2].y, vPointArr[1].x, vPointArr[1].y); line(vPointArr[2].x, vPointArr[2].y, vPointArr[3].x, vPointArr[3].y); line(vPointArr[2].x, vPointArr[2].y, vPointArr[4].x, vPointArr[4].y); line(vPointArr[4].x, vPointArr[4].y, vPointArr[5].x, vPointArr[5].y); line(vPointArr[5].x, vPointArr[5].y, vPointArr[6].x, vPointArr[6].y); line(vPointArr[4].x, vPointArr[4].y, vPointArr[7].x, vPointArr[7].y); line(vPointArr[7].x, vPointArr[7].y, vPointArr[8].x, vPointArr[8].y); } class VerletStick { VerletPoint pointA, pointB; float len; VerletStick(VerletPoint _pointA, VerletPoint _pointB){ pointA = _pointA; pointB = _pointB; len = dist(pointA.x, pointA.y , pointB.x, pointB.y); } void update(){ float dst = dist(pointA.x, pointA.y , pointB.x, pointB.y); float diff = len &#8211; dst; float offsetX = (diff * (pointB.x &#8211; pointA.x) \/ dst) \/ 2; float offsetY = (diff * (pointB.y &#8211; pointA.y) \/ dst) \/ 2; pointA.x -= offsetX; pointA.y -= offsetY; pointB.x += offsetX; pointB.y += offsetY; } void render(){ line(pointA.x, pointA.y , pointB.x, pointB.y); } } class VerletPoint { float x, y, oldX, oldY; VerletPoint(float _x, float _y) { setPosition(_x, _y); } void setPosition(float _x, float _y) { x = oldX = _x; y = oldY = _y; } void update(){ float tempX = x, tempY = y; x += getVx(); y += getVy(); oldX = tempX; oldY = tempY; } void bounds(float left, float top, float right, float bottom){ x = constrain(x, left, right); y = constrain(y, top, bottom); } void setVx(float value){ oldX = x &#8211; value; } float getVx(){ return x &#8211; oldX; } void setVy(float value){ oldY = y &#8211; value; } float getVy(){ return y &#8211; oldY; } void render(){ ellipse(x, y, 10, 10); } } [\/processing]<br \/>\nif you clicked&gt;5 times you do too.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>you may recognize this guy from the header- actually they&#8217;re cousins. this was some code I wrote\/stole to get started in processing.js. okay, so I clearly enjoy watching things fall down. [processing] \/\/ . 0 0,0 \/\/. . . 123 -1,-1 0,-1 +1,-1 \/\/ . 4 0,-2 \/\/. . 5 7 -1,-3 +1,-3 \/\/. . <a href='http:\/\/funkboxing.com\/wordpress\/?p=59' class='excerpt-more'>[&#8230;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5,47],"tags":[19,30],"_links":{"self":[{"href":"http:\/\/funkboxing.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/59"}],"collection":[{"href":"http:\/\/funkboxing.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/funkboxing.com\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/funkboxing.com\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/funkboxing.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=59"}],"version-history":[{"count":7,"href":"http:\/\/funkboxing.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/59\/revisions"}],"predecessor-version":[{"id":1807,"href":"http:\/\/funkboxing.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/59\/revisions\/1807"}],"wp:attachment":[{"href":"http:\/\/funkboxing.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=59"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/funkboxing.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=59"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/funkboxing.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=59"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}