Developer: RhinoScript
Summary: Demonstrates one way of creating a Icosahedron.
Rhino does not have a command that will create an Icosahedron. But, you can write a script that will, using RhinoScript.
The following sample script will create a regular Icosahedron composed of twenty triangular faces, with five meeting at each of the twelve vertices.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Icosahedron.rvb -- September 2009 ' If this code works, it was written by Dale Fugier. ' If not, I don't know who wrote it. ' Works with Rhino 4.0. Option Explicit ' Creates a icosahedron ' Vertices: 12 ' Edges: 30 ' Faces: 20 ' Edges per face: 3 ' Edges per vertex: 5 ' Sin of angle at edge: 2 / 3 ' Surface area: 5 * sqrt(3) * edgelength^2 ' Volume: 5 * (3 + sqrt(5)) / 12 * edgelength^3 ' Circumscribed radius: sqrt(10 + 2 * sqrt(5)) / 4 * edgelength ' Inscribed radius: sqrt(42 + 18 * sqrt(5)) / 12 * edgelength ' Coordinates: a and b, where: ' a = 1 / 2 and b = 1 / (2 * phi) ' phi is the golden ratio = (1 + sqrt(5)) / 2 Sub Icosahedron() ' Declare local variables Dim radius, center Dim sqr5, phi, ratio, a, b Dim v(11), s(19) ' Prompt for center point center = Rhino.GetPoint("Center of icosahedral") If IsNull(center) Then Exit Sub ' Prompt for radius radius = Rhino.GetDistance(center, 1.0, "Radius") If IsNull(radius) Then Exit Sub ' This will make the script run faster Call Rhino.EnableRedraw(False) ' Phi - the square root of 5 plus 1 divided by 2 sqr5 = Sqr(5.0) phi = (1.0 + Sqr5) * 0.5 ' Golden ratio - the ratio of edgelength to radius ratio = Sqr(10.0 + (2.0 * sqr5)) / (4.0 * phi) a = (radius / ratio) * 0.5 b = (radius / ratio) / (2.0 * phi) ' Define the icosahedron's 12 vertices v(0) = Rhino.PointAdd(center, Array( 0, b, -a)) v(1) = Rhino.PointAdd(center, Array( b, a, 0)) v(2) = Rhino.PointAdd(center, Array(-b, a, 0)) v(3) = Rhino.PointAdd(center, Array( 0, b, a)) v(4) = Rhino.PointAdd(center, Array( 0, -b, a)) v(5) = Rhino.PointAdd(center, Array(-a, 0, b)) v(6) = Rhino.PointAdd(center, Array( 0, -b, -a)) v(7) = Rhino.PointAdd(center, Array( a, 0, -b)) v(8) = Rhino.PointAdd(center, Array( a, 0, b)) v(9) = Rhino.PointAdd(center, Array(-a, 0, -b)) v(10) = Rhino.PointAdd(center, Array( b, -a, 0)) v(11) = Rhino.PointAdd(center, Array(-b, -a, 0)) ' Create the icosahedron's 20 triangular faces s(0) = Rhino.AddSrfPt(Array(v(0), v(1), v(2))) s(1) = Rhino.AddSrfPt(Array(v(3), v(2), v(1))) s(2) = Rhino.AddSrfPt(Array(v(3), v(4), v(5))) s(3) = Rhino.AddSrfPt(Array(v(3), v(8), v(4))) s(4) = Rhino.AddSrfPt(Array(v(0), v(6), v(7))) s(5) = Rhino.AddSrfPt(Array(v(0), v(9), v(6))) s(6) = Rhino.AddSrfPt(Array(v(4), v(10), v(11))) s(7) = Rhino.AddSrfPt(Array(v(6), v(11), v(10))) s(8) = Rhino.AddSrfPt(Array(v(2), v(5), v(9))) s(9) = Rhino.AddSrfPt(Array(v(11), v(9), v(5))) s(10) = Rhino.AddSrfPt(Array(v(1), v(7), v(8))) s(11) = Rhino.AddSrfPt(Array(v(10), v(8), v(7))) s(12) = Rhino.AddSrfPt(Array(v(3), v(5), v(2))) s(13) = Rhino.AddSrfPt(Array(v(3), v(1), v(8))) s(14) = Rhino.AddSrfPt(Array(v(0), v(2), v(9))) s(15) = Rhino.AddSrfPt(Array(v(0), v(7), v(1))) s(16) = Rhino.AddSrfPt(Array(v(6), v(9), v(11))) s(17) = Rhino.AddSrfPt(Array(v(6), v(10), v(7))) s(18) = Rhino.AddSrfPt(Array(v(4), v(11), v(5))) s(19) = Rhino.AddSrfPt(Array(v(4), v(8), v(10))) ' Join all of the faces Rhino.UnselectAllObjects() Call Rhino.SelectObjects(s) Call Rhino.Command("_Join", False) Rhino.UnselectAllObjects() ' Don't forget to do this Call Rhino.EnableRedraw(True) End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Rhino.AddStartupScript Rhino.LastLoadedScriptFile Rhino.AddAlias "Icosahedron", "_NoEcho _-RunScript (Icosahedron)"