P latoni c solid a P l atoni c s olid is a c on v ex r eg u l ar p o l y h ed r o n . th es e are t he t hr e e - dimen si o n al an al o g s o f t h e co n v e x regula r p oly gon s. t h e f ac es, ed g es an d an gl e s are a ll c ong r u e n t . C atal an s olids th e Catal an s olid s a r e a l l c o n v ex . T h ey a r e f ac etran s iti v e b ut not v e r t ex -t r an si t i v e. t w o o f t h e C atal an s olids a r e e dg e-t r a n si t i v e: t h e r h o mb i c do de cahedr on a nd t he r h o mb i c t r i ac o n t a h ed r o n . T h es e are t he d u a ls of t h e t wo q u asi -r eg u l a r A r ch i m e de a n s olid s .
dual i ty Pla ton ic s olids : h exahedron ( c ub e ) - - oc t a h ed r o n i c o sah e dron - - dod e c a he d r o n C a tal an s ol i d : r h o mbi c tria c ont a he d r on -- i c o si d o d ec ah ed r o n
dual pol yhe d r on in ge ometr y, p olyhe dr a a r e associ ate d int o p a ir s c a l l ed dual s , wher e t he v e r t ic es o f one corre s p ond t o t he fac es of the other. The dua l of a po lyhedron w it h e qu iv a l en t v erti ces is one w it h e qui v a l en t faces , a nd of one wi t h eq u iv al e nt e dg e s is a not h er with e qui v a le nt e d ge s . S o t h e regul ar p olyhe dr a — t h e Pla toni c s o lids a r e a r r a n g ed in to dual pa ir s .
i n p ut 2 p o nt s fo r ax e - - - - - - - - - - - - >Function Octahedron(Points)
an o ct ah e dro n is a po ly hed r on w i t h e i g h t f a ce s. a regular o ctah ed r on i s a Pl a ton i c solid w ith six po lyhed r on v er t i c e s , 12 p oly hed ro n edges , a n d ei g h t e q u iva len t equilateral triang u la r f a c es . t he c ub e a nd the o ctahedron f or m a du a l p ai r.
o c tah edron
Octahedron = Null Dim strAxe strAxe = rhino.AddLine(Points(0) , Points(1)) Dim vecAxe1,vecAxe2,vecAxe3 vecAxe1 = rhino.VectorCreate(Points(1),Points(0)) vecAxe2 = rhino.CurveNormal (strAxe) vecAxe3 = rhino.VectorRotate(vecAxe1,90,vecAxe2) Dim ptCenter : ptCenter = rhino.CurveMidPoint(strAxe) Call rhino.DeleteObject(strAxe) Dim dblLength : dblLength = rhino.VectorLength(vecAxe1) vecAxe2 = rhino.VectorUnitize(vecAxe2) vecAxe2 = rhino.VectorScale(vecAxe2 , dblLength/2) vecAxe3 = rhino.VectorUnitize(vecAxe3) vecAxe3 = rhino.VectorScale(vecAxe3 , dblLength/2) ReDim arrPts(5) arrPts(0) = Points(0) arrPts(1) = Points(1) arrPts(2) = rhino.PointAdd(ptCenter , vecAxe2) vecAxe2 = rhino.VectorReverse(vecAxe2) arrPts(3) = rhino.PointAdd(ptCenter , vecAxe2) arrPts(4) = rhino.PointAdd(ptCenter , vecAxe3) vecAxe3 = rhino.VectorReverse(vecAxe3) arrPts(5) = rhino.PointAdd(ptCenter , vecAxe3) ReDim arrSrfs(7) Dim i For i = 0 To 1 arrSrfs(0+i*4) = rhino.AddSrfPt(array(arrPts(i),arrPts(3),arrPts(4))) arrSrfs(1+i*4) = rhino.AddSrfPt(array(arrPts(i),arrPts(2),arrPts(4))) arrSrfs(2+i*4) = rhino.AddSrfPt(array(arrPts(i),arrPts(3),arrPts(5))) arrSrfs(3+i*4) = rhino.AddSrfPt(array(arrPts(i),arrPts(2),arrPts(5))) Next Octahedron = arrSrfs End Function
i n p ut octah edr o n faces - - - - - - - - - - - - >Function Icosahedron(Surfaces)
t h e regul ar ic os a he dr on i s a P l a t o n ic s ol i d. It is a c onv e x r eg u l a r po lyhedron c om p os e d o f t wen t y t ria ngul ar f a c e s , w it h f iv e meet i n g at each of t he t w e lv e v er t i c es. I t h a s 30 e dg e s a nd 1 2 v e r t i c es. t h e Icos ahed r on’s v e r t ic es d i v i d e t h e Octah e dr on e dg e s in t o G o l d en Ra tio s egm e nt s .
ico sah e dron
Icosahedron = Null Dim arrEdges , arrPts() Dim dblRatio : dblRatio = (1+sqr(5))/2 Dim ptStart , ptEnd , vecEdge ReDim arrTriPts(Ubound(Surfaces)) ReDim arrSrfs(19) Dim i, j For i = 0 To Ubound(Surfaces) arrEdges = rhino.DuplicateEdgeCurves(Surfaces(i)) For j = 0 To Ubound(arrEdges) ptStart = rhino.CurveStartPoint(arrEdges(j)) ptEnd = rhino.CurveEndPoint(arrEdges(j)) vecEdge = rhino.VectorCreate(ptEnd,ptStart) vecEdge = rhino.VectorDivide(vecEdge , 1 + dblRatio) ReDim Preserve arrPts(j) arrPts(j) = rhino.PointAdd(ptStart , vecEdge) Next arrTriPts(i) = arrPts arrSrfs(i) = rhino.AddSrfPt(arrPts) Call rhino.DeleteObjects(arrEdges) Next Call rhino.DeleteObjects(Surfaces) arrSrfs(8) = rhino.AddSrfPt(array(arrTriPts(0)(2),arrTriPts(1)(0),arrTriPts(0)(0))) arrSrfs(9) = rhino.AddSrfPt(array(arrTriPts(2)(2),arrTriPts(3)(0),arrTriPts(2)(0))) arrSrfs(10) = rhino.AddSrfPt(array(arrTriPts(4)(2),arrTriPts(5)(0),arrTriPts(4)(0))) arrSrfs(11) = rhino.AddSrfPt(array(arrTriPts(6)(2),arrTriPts(7)(0),arrTriPts(6)(0))) arrSrfs(12) = rhino.AddSrfPt(array(arrTriPts(0)(1),arrTriPts(4)(2),arrTriPts(0)(2))) arrSrfs(13) = rhino.AddSrfPt(array(arrTriPts(1)(1),arrTriPts(5)(2),arrTriPts(1)(2))) arrSrfs(14) = rhino.AddSrfPt(array(arrTriPts(2)(1),arrTriPts(6)(2),arrTriPts(2)(2))) arrSrfs(15) = rhino.AddSrfPt(array(arrTriPts(3)(1),arrTriPts(7)(2),arrTriPts(2)(2))) arrSrfs(16) = rhino.AddSrfPt(array(arrTriPts(0)(0),arrTriPts(2)(1),arrTriPts(0)(1))) arrSrfs(17) = rhino.AddSrfPt(array(arrTriPts(4)(0),arrTriPts(6)(1),arrTriPts(4)(1))) arrSrfs(18) = rhino.AddSrfPt(array(arrTriPts(1)(0),arrTriPts(3)(1),arrTriPts(1)(1))) arrSrfs(19) = rhino.AddSrfPt(array(arrTriPts(5)(0),arrTriPts(7)(1),arrTriPts(5)(1))) Icosahedron = arrSrfs End Function
i n p ut i cos ah e dr on faces - - - - - - - - - - - - >Function Dodecahedron(Surfaces)
t h e re gular do decahedro n. i s a P la t on i c s o l i d. com p o sed o f tw elve r eg u la r p e n t agon a l faces, w ith three m eet i n g a t ea c h ver t ex . it has 20 vertic es a n d t h i r t y 3 0 edges. i t s dual po ly hed r on i s t h e i c o s ah edr on. if o ne were to m a k e ev er y o ne of t h e Plato nic so lid s wi t h ed ges o f th e sam e length, the do d ec a h ed r on w o u ld b e t he largest.
d ode cah e dron
Dodecahedron = Null Dim arrCenter ReDim arrPts(Ubound(Surfaces)) Dim i For i = 0 To Ubound(Surfaces) arrCenter = rhino.SurfaceAreaCentroid(Surfaces(i)) arrPts(i) = arrCenter(0) Next Call rhino.DeleteObjects(Surfaces) ReDim arrSrfs(11) arrSrfs(0) = Pentagon(arrPts(0),arrPts(8),arrPts(1),arrPts(13),arrPts(12)) arrSrfs(1) = Pentagon(arrPts(1),arrPts(13),arrPts(5),arrPts(19),arrPts(18)) arrSrfs(2) = Pentagon(arrPts(18),arrPts(1),arrPts(8),arrPts(9),arrPts(3)) arrSrfs(3) = Pentagon(arrPts(2),arrPts(9),arrPts(3),arrPts(15),arrPts(14)) arrSrfs(4) = Pentagon(arrPts(2),arrPts(14),arrPts(6),arrPts(17),arrPts(16)) arrSrfs(5) = Pentagon(arrPts(6),arrPts(14),arrPts(15),arrPts(7),arrPts(11)) arrSrfs(6) = Pentagon(arrPts(15),arrPts(3),arrPts(18),arrPts(19),arrPts(7)) arrSrfs(7) = Pentagon(arrPts(7),arrPts(19),arrPts(5),arrPts(10),arrPts(11)) arrSrfs(8) = Pentagon(arrPts(0),arrPts(8),arrPts(9),arrPts(2),arrPts(16)) arrSrfs(9) = Pentagon(arrPts(0),arrPts(16),arrPts(17),arrPts(4),arrPts(12)) arrSrfs(10) = Pentagon(arrPts(4),arrPts(17),arrPts(6),arrPts(11),arrPts(10)) arrSrfs(11) = Pentagon(arrPts(4),arrPts(10),arrPts(5),arrPts(13),arrPts(12)) Dodecahedron = arrSrfs End Function Function Pentagon(Point1,Point2,Point3,Point4,Point5) Pentagon = Null Dim strPL strPL = rhino.AddPolyline(array(Point1,Point2,Point3,Point4,Point5,Point1)) Dim arrSrfs : arrSrfs = rhino.AddPlanarSrf(array(strPL)) Call rhino.DeleteObject(strPL) Pentagon = arrSrfs(0) End Function
i n p ut d od e cah e dr on faces - - - - - - - - - - - - >Function RhombicTricontahedron(Surfaces)
t he rh om b i c triaco ntahed ron i s a c on v e x polyh e dro n w ith 30 rho m bi c f a c es . t he rat i o of the lo ng d iago na l t o t h e sh or t di a gonal o f each face i s ex a c t ly e q u al t o t h e go lden ratio , A r h om bu s so o b t a i n e d is called a go ld en r h om b u s . t h e r h ombic triaco ntah ed r on i s o n e of t h e nine ed ge-trans i t i v e c on v ex p o l yh e dr a, the o thers being t h e f i v e Pl a ton i c solid s, the cubo ctah ed r on , t h e i c os idodecahed ro n, and the r h om bi c dod eca h e dro n.
rh omb i c triacont a he dr on
Dim dblLength1,dblLength2,arrBorder , arrVertice arrBorder = Rhino.DuplicateSurfaceBorder(Surfaces(0)) arrVertice = rhino.PolylineVertices(arrBorder(0)) dblLength1 = rhino.Distance(arrVertice(0),arrVertice(1)) dblLength2 = rhino.Distance(arrVertice(0),arrVertice(2)) Call rhino.DeleteObjects(arrBorder) Dim i,j,k,l : l = 0 Dim arrSSX , strCrv ,ptMid,vecDir1,vecDir2,arrCenter1 Dim arrCenter2,arrNeighborGroups(),pt1,pt2,pt3,pt4 ReDim arrSrfs(29) For i = 0 To Ubound(Surfaces) For j = i + 1 To Ubound(Surfaces) arrSSX = rhino.SurfaceSurfaceIntersection(Surfaces(i),Surfaces(j), ,True) If isArray(arrSSX) Then ptMid = rhino.CurveMidPoint(arrSSX(0,1)) pt1 = rhino.CurveStartPoint(arrSSX(0,1)) pt2 = rhino.CurveEndPoint(arrSSX(0,1)) vecDir1 = rhino.VectorCreate(pt2 , pt1) vecDir1 = rhino.VectorUnitize(vecDir1) vecDir1 = rhino.VectorScale(vecDir1,dblLength1/2) pt1 = rhino.PointAdd(ptMid,vecDir1) vecDir1 = rhino.VectorReverse(vecDir1) pt2 = rhino.PointAdd(ptMid,vecDir1) arrCenter1 = rhino.SurfaceAreaCentroid(Surfaces(i)) arrCenter2 = rhino.SurfaceAreaCentroid(Surfaces(j)) vecDir2 = rhino.VectorCreate(arrCenter1(0) , arrCenter2(0)) vecDir2 = rhino.VectorUnitize(vecDir2) vecDir2 = rhino.VectorScale(vecDir2,dblLength2/2) pt3 = rhino.PointAdd(ptMid,vecDir2) vecDir2 = rhino.VectorReverse(vecDir2) pt4 = rhino.PointAdd(ptMid,vecDir2) For k = 0 To Ubound(arrSSX) Call rhino.DeleteObject(arrSSX(k,1)) Next arrSrfs(l) = rhino.AddSrfPt(array(pt1,pt3,pt2,pt4)) l = l + 1 End If Next Next Call rhino.DeleteObjects(Surfaces) End Function
rh o m bic tria c ont a he dr on f r a me g e n e r ated by se lf - s i m il arly r e p lic a t ion.
i t er at i o n = 0
iter atio n = 1
r ep l i cate for e a c h 1 2 v e r t ex s cal e facto r : 1 / ( 1 + p hi)
i co s ahedron f r a c t a ls
bo o l ean
i t er at i o n = 2
b o o l ea n
c o n sta n t poros it y : 8 0 % c urve degre e : 4
gr ad ed po r o sity : 9 cur ve d egr ee : 4 gr ad ate facto r po i facto r po in t gen er
9 0 - 20 % 11 in t : 10 ra ti o n : random
i t er at i o n = 0
iter atio n = 1
r ep l i cate for e a c h 2 0 v e r t ex Scal e facto r : 1 / ( 2 + p hi )
d o d e cahed r on f r a c t a ls
bo o l ean
i t er at i o n = 2
b o o l ea n
c o n sta n t poros it y : 8 0 % c urve degre e : 4
gr ad ed po r o sity : 9 cur ve d egr ee : 4 gr ad ate facto r po i facto r po in t gen er
9 0 - 20 % 11 in t : 10 ra ti o n : random
i t er at i o n = 0
iter atio n = 1
r ep l i cate for e a c h 1 2 a c u t e v er t ex Scal e facto r : 1 / ( 1 + p hi )
r ho m bic tra ic ont a he dr on f r ac t a l s
bo o l ean
i t er at i o n = 2
b o o l ea n
c o n sta n t poros it y : 8 0 % c urve degre e : 4
gr ad ed po r o sity : 9 cur ve d egr ee : 4 gr ad ate facto r po i facto r po in t gen er
9 0 - 20 % 11 in t : 10 ra ti o n : random
#007 \ Self-Similarity Replicate design : taichi sunayama - 08.08.19.