From b7154d15a0fb30e2875a7a020ab79b08b87aa2b4 Mon Sep 17 00:00:00 2001 From: Alexandre B A Villares Date: Mon, 8 Jan 2018 14:26:25 -0200 Subject: [PATCH] first step! --- s180107/platonicSolidsClass.pde | 69 +++++++++------------ s180108/PlatonicSolids$py.class | Bin 0 -> 9773 bytes s180108/PlatonicSolids.py | 106 ++++++++++++++++++++++++++++++++ s180108/s180108.pyde | 42 +++++++++++++ 4 files changed, 178 insertions(+), 39 deletions(-) create mode 100644 s180108/PlatonicSolids$py.class create mode 100644 s180108/PlatonicSolids.py create mode 100644 s180108/s180108.pyde diff --git a/s180107/platonicSolidsClass.pde b/s180107/platonicSolidsClass.pde index 2a1f27c2..283d27bc 100644 --- a/s180107/platonicSolidsClass.pde +++ b/s180107/platonicSolidsClass.pde @@ -30,7 +30,6 @@ PlatonicSolid PlatonicFactory(int type, color c) { } class Icosahedron extends PlatonicSolid { // icosahedron - float x, y, z; float radius; PVector topPoint; PVector[] topPent = new PVector[5]; @@ -44,13 +43,10 @@ class Icosahedron extends PlatonicSolid { // constructor Icosahedron(float radius) { this.radius = radius; - c = dist(cos(0)*radius, sin(0)*radius, cos(radians(72))*radius, sin(radians(72))*radius); b = radius; a = (float)(Math.sqrt(((c*c)-(b*b)))); - triHt = (float)(Math.sqrt((c*c)-((c/2)*(c/2)))); - for (int i=0; i&9GuAT~5y+?LD6lDWJQ>mFX0*9VP`nuaag z@`j#@7xkjiF~6p@d-$}z?MAZLA?WZrkRkF33KfiECY?0|`CB{Z_e3c`!3g;&BuK3t z7otW%(Y1p^#R_~u(6qDbPadTviZ)V&#tCZbOy&yuHY1hKWy3T<&^U*pWwD@0A~Bdt zl`=*m5hhhoIFZQ0bN)67h7K4-{wio;>&ET+EQu)7f+}k!V>WXi6>q#&n?=qPc>OsBJSN9ipSbQg;u6p38@6KFk1RrX5kzOb*&4 ztso$iNC-N}!Vi9U3ByI2nw)`YPN4AcU3e4aVIwnH%=vcU$H7@AP7L5TT z&*M7161dXd5v8THEP^CjjwDSCmJqz9wT9aX?*&y^3sG7@9c=Xpa?<*dF~fZlhx<*K zGzId*vU7b_b5c)l9doL4={%k)5nPGV%l~08l5t%orx$tf8n4l^6^WRn z6el8z(3SsBR=rHJnxB+>#0^GHhB8Ko zE{V{kTp`AnvO{`uN8H$1GO|f9zI+USI_Hm3d7^X~UCv>93sy!kH`HxpkzsGM_|l6- z`&gH$8-htxOmn#-?gJ!>XB0qRgE}cz<>0KCAX@vqX?*?XnBBK|IX+fehO7Eff za!G$580pGojVOJ9YkY*R5p-C0Mla^F>0~^YNv8@eL&G7u78Tti8mn_D1NqiMA8MrQ z=z2lh$MAj(-|Inp=qm|j*69yNXeQlgt}D4Mh3TXCmc)^xXtW$7xkHJvxceCIF0FJ6 zb7u^sv+-^E5EkZbs7Z-TF-jjdv*HtSTsD`z$jIk7M}4jHw?^rc^eG;F2ey)3M!slV z7^cryGnm;NrO%lNp9jfkz7vn(Fx`d6MPa%JmKoVpWzzjf+tnLSi?0pS7cfJ{KutWr zh8R1ebe{=xf0S-Esr?crHN6VcLzom!A)I_fC`9SYoUeX*Bua;wy&uJNQWf+l;|KOdELX6+fnI^S&3`*@XpSH@0m=}$-KDf%7^DHxf4K@&IDWH}P~ zS$d8W`TLd^j^NW3e%6UqEL`|1qiyiwbSWW<+SJUtFESV>sF5>ce&Bw zh3zq2r|0pcvP6GOKjHZNG>VNxF4mui=~*NdZ^0$(z`sN~Vw=ifIs6*wnheuRc=Uzo zcX;Sw`UBc=hFykC88c7mys-rDsZp4`+h8xH5Y7-?Sx-du{+Hvh$zb zdHCfxqI-6;A^^~Ju`>#oA*N@H*qU6jG>DzO5bMt8l12e%;el9Thfz#!YuDRT`f#kU zc=@8mi?4g~Uv-3!k~v?GQXrQzFJ@?k7dyXG%bcpr`LQkC|7^wliVQo(?_~A^`>^7qf1j}*7kX@(&ynypE7-=I(r0j5*#3$I|L`8=~Q4MYHN_l z-=l?qc!1{h`tPIGUZ18eC{ue|nHI3ZCj*maC8HED@|fYHlU;VwM=JXVhpsM8dq;10|cb4TP0ZK9d6nnwn^h9$T>W_ zN&6{fI=^cVU9TyPoMJ0AWrFM?15_c8qX!d5vsa^5*pf-4k5GS^ww5WqBA^AJ0yaLI z@j57=QdFLSG4aLCb#ow5rXi?9+#ANQy`ZzO!r$zF^!0N!Wn$Gjjwy@go)?q>x=g!Z z0Qieo(U^phljs5%XPf9q87vQ^Of4}tR*9KXo%&FSDbvOF#3napz}?(njUFsFY;u*G zt(r2mYT$q7=3ew{fJOS|u6Cr=TR9BAC5Vp?YV`^Z z(v=8lv)^wkcUwv>B-7oXN~D6SU}@Bay~;vx!d`7D0qdxK4YK-erb(zhT%w)(ENOR?VDxT9I(?vTz-oJ69Rh_%k(SE-Sb?tO#(~ z@ylv;rd;iNfLf+c-$2i3$~-ylv$8gF-K^Bcz3M)gDJ!Y1xw}SFh6Xu}*^YL=aQ>RZ z<(nKP->ThP9o_9&O%qW=Mo;c&aNFQ$u(0>geVU?q!Pnxl#tq0C3rSPJBv?1OIS8k) ztnKdXl(_*qoUs)4oR*?GWlUm>$Z)9l;(iQZLZQ zI;`Wac35SgT^ebhOH(!QI0piR%4w!>*s>9Kp=di+PJ7X#AIW2`{yr$rw0LyCv%?lkdH#gr`TQp^* z>{qi%2A{B3{wnTara};l+_l0RwrC2@WSGg3JFBI_Oly1b*`&EN(gByI>cJWZjLozo zP&OOVI7frc%IJnF_Bte7rAf-Wx@2h(meM}r&G(NLwSTVju*X^;O5O*x%gMkU+>l`W+K zDZ5#YbTAqBGSd#@L3_K!0b|GBVY@pZjs|x?91T@(dq!bf3)aT86gHNnsAAyu;I*WC zrP@IUj_Iz%vXI`$TxUBlTm(uGm&P4yci}@_u}!fDIS6v2IU3xcj)p27=Sl3*3Dhu2 zQ*hz15-4O8L}F(2C@#a9&##V17s7V3(^fa9m0RDi$k_RdLU;)dLdgOXG6|`oCirj&WGrb zK1dRhg7iZMAlo2m$acs|c>{VLzu-JVLFZ)$Hz59*?^!Qx!!=%7-$Pzn|0SN<(FkGz zX7fMb)i<=vOWSy%m$qrQmll^X{HktV#^@#76!|x-7Z&WNXBON=Kk)hPqvto_C!`mA zKHolk7s7X#LL>CEyXZx`QSr-0zoYT7fD)BMed;gbZGQDv@wR|^MZ7Jj?vA&G)ZfJ0 z!s>71ZAwu6Jw8L~AMqJh|BTN@^)L90sDHy}lX`U=liw7S_yLKJU;i-q4Spr)#0PYM zp@Tdw#KXdjqp1%oGv(l*WAKA_!bkqC5PwCec&^}^fX=^^{TJ#r`O7YMnrJIh=`b2jiO252Wk03rYig57Oq}5B2*Jih>2oSrTtOd)A^>p zbU|DDv^#h%qDAIIvOf#&yq$k{jxG*p0FB zgZX~$(a=_}VNtz?W9v0Eh=nkwLCh1pyl3G5$HI@FVpgY^E#~mcsp2RxmtP8E-oF8F Cpet+u literal 0 HcmV?d00001 diff --git a/s180108/PlatonicSolids.py b/s180108/PlatonicSolids.py new file mode 100644 index 00000000..3e8ae10a --- /dev/null +++ b/s180108/PlatonicSolids.py @@ -0,0 +1,106 @@ +class Icosahedron(): + + def __init__(self, radius): + topPent = [PVector()] * 5 # PVector[5] + bottomPent = [PVector()] * 5 # PVector[5] + angle = 0 + c = dist(cos(0) * radius, + sin(0) * radius, + cos(radians(72)) * radius, + sin(radians(72)) * radius) + b = radius + a = sqrt(((c * c) - (b * b))) + triHt = sqrt((c * c) - ((c / 2) * (c / 2))) + for i in range(5): + topPent[i] = PVector(cos(angle) * radius, + sin(angle) * radius, + triHt / 2.0) + angle += radians(72) + topPoint = PVector(0, 0, triHt / 2.0 + a) + angle = 72.0 / 2.0 + for i in range(5): + bottomPent[i] = PVector(cos(angle) * radius, + sin(angle) * radius, + -triHt / 2.0) + angle += radians(72) + bottomPoint = PVector(0, 0, -(triHt / 2.0 + a)) + self.topPent, self.bottomPent = topPent, bottomPent + self.topPoind, self.bottomPoint = topPoint, bottomPoint + + # draws icosahedron + def create(self): + topPent, bottomPent = self.topPent, self.bottomPent + topPoint, bottomPoint = self.topPoind, self.bottomPoint + for i in range(5): + # icosahedron top + beginShape() + if (i < 5 - 1): + vertex(topPent[i].x, topPent[i].y, topPent[i].z) + vertex(topPoint.x, topPoint.y, topPoint.z) + vertex( + topPent[i + 1].x, topPent[i + 1].y, topPent[i + 1].z) + else: + vertex(topPent[i].x, topPent[i].y, topPent[i].z) + vertex(topPoint.x, topPoint.y, topPoint.z) + vertex(topPent[0].x, topPent[0].y, topPent[0].z) + + endShape(CLOSE) + + # icosahedron bottom + beginShape() + if (i < len(bottomPent) - 1): + vertex(bottomPent[i].x, bottomPent[i].y, bottomPent[i].z) + vertex(bottomPoint.x, bottomPoint.y, bottomPoint.z) + vertex( + bottomPent[i + 1].x, bottomPent[i + 1].y, bottomPent[i + 1].z) + else: + vertex(bottomPent[i].x, bottomPent[i].y, bottomPent[i].z) + vertex(bottomPoint.x, bottomPoint.y, bottomPoint.z) + vertex(bottomPent[0].x, bottomPent[0].y, bottomPent[0].z) + + endShape(CLOSE) + + # icosahedron body + for i in range(5): + if i < 3: + beginShape() + vertex(topPent[i].x, topPent[i].y, topPent[i].z) + vertex( + bottomPent[i + 1].x, bottomPent[i + 1].y, bottomPent[i + 1].z) + vertex( + bottomPent[i + 2].x, bottomPent[i + 2].y, bottomPent[i + 2].z) + endShape(CLOSE) + + beginShape() + vertex( + bottomPent[i + 2].x, bottomPent[i + 2].y, bottomPent[i + 2].z) + vertex(topPent[i].x, topPent[i].y, topPent[i].z) + vertex( + topPent[i + 1].x, topPent[i + 1].y, topPent[i + 1].z) + endShape(CLOSE) + elif i == 3: + beginShape() + vertex(topPent[i].x, topPent[i].y, topPent[i].z) + vertex( + bottomPent[i + 1].x, bottomPent[i + 1].y, bottomPent[i + 1].z) + vertex(bottomPent[0].x, bottomPent[0].y, bottomPent[0].z) + endShape(CLOSE) + + beginShape() + vertex(bottomPent[0].x, bottomPent[0].y, bottomPent[0].z) + vertex(topPent[i].x, topPent[i].y, topPent[i].z) + vertex( + topPent[i + 1].x, topPent[i + 1].y, topPent[i + 1].z) + endShape(CLOSE) + elif i == 4: + beginShape() + vertex(topPent[i].x, topPent[i].y, topPent[i].z) + vertex(bottomPent[0].x, bottomPent[0].y, bottomPent[0].z) + vertex(bottomPent[1].x, bottomPent[1].y, bottomPent[1].z) + endShape(CLOSE) + + beginShape() + vertex(bottomPent[1].x, bottomPent[1].y, bottomPent[1].z) + vertex(topPent[i].x, topPent[i].y, topPent[i].z) + vertex(topPent[0].x, topPent[0].y, topPent[0].z) + endShape(CLOSE) \ No newline at end of file diff --git a/s180108/s180108.pyde b/s180108/s180108.pyde new file mode 100644 index 00000000..8cc5f9e4 --- /dev/null +++ b/s180108/s180108.pyde @@ -0,0 +1,42 @@ +from PlatonicSolids import * + +NUM_COLS, NUM_ROWS = 5, 5 +NUM_CELLS = NUM_COLS * NUM_ROWS +solids = [] +r_x = 0 +r_y = 0 + +def setup(): + global CELL_SIZE + size(500, 500, P3D) + CELL_SIZE = width / NUM_COLS + strokeWeight(5) + noFill() + colorMode(HSB) + for i in range(NUM_CELLS): + s = Icosahedron(CELL_SIZE / 2.5) + c = color(random(256), 200, 200, 128) # random HSB translucent colors + solids.append((s, c)) # (solid, color) + +def draw(): + global r_x, r_y + # translate(-width/2, -height/2) # may need to use with PeasyCam + r_x += 0.02 # x rotation speed + r_y += 0.01 # y rotation speed + background(255) # clear frame with white + # lights() # use this with filled faces + for i in range(NUM_CELLS): + x, y = x_y_from_i(i, NUM_COLS, NUM_ROWS) + cx, cy = CELL_SIZE / 2 + x * CELL_SIZE, CELL_SIZE / 2 + y * CELL_SIZE + with pushMatrix(): + d = dist(mouseX, mouseY, cx, cy) + translate(cx, cy) + if d < 80: + rotateX(r_y) + rotateY(r_x) + stroke(solids[i][1]) + solids[i][0].create() + # if (frameCouNUM_CELLS < 200): saveFrame("###.tga") + +def x_y_from_i(i, max_x, max_y): + return i % max_x, (i / max_x) % max_y