001/* 002 * Renderer Models. The MIT License. 003 * Copyright (c) 2022 rlkraft@pnw.edu 004 * See LICENSE for details. 005*/ 006 007package renderer.models_L; 008 009import renderer.scene.*; 010import renderer.scene.primitives.*; 011 012/** 013 Create a wireframe model of a icosidodecahedron 014 with its center at the origin, having edge length 015 <pre>{@code 016 4/(1+sqrt(5)) = 1.2361, 017 }</pre> 018 and with its vertices on a sphere of radius 019 <pre>{@code 020 4/(1+sqrt(5)) * sin(2Pi/5) = 1.1756. 021 }</pre> 022<p> 023 See <a href="https://en.wikipedia.org/wiki/Icosidodecahedron" target="_top"> 024 https://en.wikipedia.org/wiki/Icosidodecahedron</a> 025 026 @see Tetrahedron 027 @see Cube 028 @see Octahedron 029 @see Dodecahedron 030 @see Icosahedron 031*/ 032public class Icosidodecahedron extends Model 033{ 034 /** 035 Create a icosidodecahedron with its center at 036 the origin, having edge length 037 <pre>{@code 038 4/(1+sqrt(5)) = 1.2361, 039 }</pre> 040 and with its vertices on a sphere of radius 041 <pre>{@code 042 4/(1+sqrt(5)) * sin(2Pi/5) = 1.1756. 043 }</pre> 044 */ 045 public Icosidodecahedron() 046 { 047 super("Icosidodecahedron"); 048 049 // Create the icosidodecahedron's geometry. 050 // It has 30 vertices and 60 edges. 051 //https://en.wikipedia.org/wiki/Icosidodecahedron#Cartesian_coordinates 052 //http://www.georgehart.com/virtual-polyhedra/vrml/icosidodecahedron.wrl 053 final double t = (1 + Math.sqrt(5))/2; // golden ratio 054 final double r = t - 1; // (-1 + Math.sqrt(5))/2; 055 addVertex(new Vertex( 0, 0, 1.051462), 056 new Vertex( r, 0, 0.8506508), 057 new Vertex( 0.2763932, 0.5527864, 0.8506508), 058 new Vertex(-r, 0, 0.8506508), 059 new Vertex(-0.2763932, -0.5527864, 0.8506508), 060 new Vertex( 1, 0, 0.3249197), 061 new Vertex( 0.7236068, -0.5527864, 0.5257311), 062 new Vertex(-0.1708204, 0.8944272, 0.5257311), 063 new Vertex( 0.4472136, 0.8944272, 0.3249197), 064 new Vertex(-1, 0, 0.3249197), 065 new Vertex(-0.7236068, 0.5527864, 0.5257311), 066 new Vertex( 0.1708204, -0.8944272, 0.5257311), 067 new Vertex(-0.4472136, -0.8944272, 0.3249197), 068 new Vertex( 1, 0, -0.3249197), 069 new Vertex( 0.8944272, 0.5527864, 0), 070 new Vertex( 0.5527864, -0.8944272, 0), 071 new Vertex(-0.5527864, 0.8944272, 0), 072 new Vertex( 0.4472136, 0.8944272, -0.3249197), 073 new Vertex(-1, 0, -0.3249197), 074 new Vertex(-0.8944272, -0.5527864, 0), 075 new Vertex(-0.4472136, -0.8944272, -0.3249197), 076 new Vertex( r, 0, -0.8506508), 077 new Vertex( 0.7236068, -0.5527864, -0.5257311), 078 new Vertex( 0.1708204, -0.8944272, -0.5257311), 079 new Vertex(-0.7236068, 0.5527864, -0.5257311), 080 new Vertex(-0.1708204, 0.8944272, -0.5257311), 081 new Vertex( 0.2763932, 0.5527864, -0.8506508), 082 new Vertex(-r, 0, -0.8506508), 083 new Vertex(-0.2763932, -0.5527864, -0.8506508), 084 new Vertex( 0, 0, -1.051462)); 085 086 // Create 60 line segments (as 12 pentagon faces). 087 addPrimitive(new LineSegment( 0, 2), 088 new LineSegment( 2, 7), 089 new LineSegment( 7, 10), 090 new LineSegment(10, 3), 091 new LineSegment( 3, 0), 092 093 new LineSegment( 0, 4), 094 new LineSegment( 4, 11), 095 new LineSegment(11, 6), 096 new LineSegment( 6, 1), 097 new LineSegment( 1, 0), 098 099 new LineSegment( 1, 5), 100 new LineSegment( 5, 14), 101 new LineSegment(14, 8), 102 new LineSegment( 8, 2), 103 new LineSegment( 2, 1), 104 105 new LineSegment( 3, 9), 106 new LineSegment( 9, 19), 107 new LineSegment(19, 12), 108 new LineSegment(12, 4), 109 new LineSegment( 4, 3), 110 111 new LineSegment( 5, 6), 112 new LineSegment( 6, 15), 113 new LineSegment(15, 22), 114 new LineSegment(22, 13), 115 new LineSegment(13, 5), 116 117 new LineSegment( 7, 8), 118 new LineSegment( 8, 17), 119 new LineSegment(17, 25), 120 new LineSegment(25, 16), 121 new LineSegment(16, 7), 122 123 new LineSegment( 9, 10), 124 new LineSegment(10, 16), 125 new LineSegment(16, 24), 126 new LineSegment(24, 18), 127 new LineSegment(18, 9), 128 129 new LineSegment(11, 12), 130 new LineSegment(12, 20), 131 new LineSegment(20, 23), 132 new LineSegment(23, 15), 133 new LineSegment(15, 11), 134 135 new LineSegment(13, 21), 136 new LineSegment(21, 26), 137 new LineSegment(26, 17), 138 new LineSegment(17, 14), 139 new LineSegment(14, 13), 140 141 new LineSegment(18, 27), 142 new LineSegment(27, 28), 143 new LineSegment(28, 20), 144 new LineSegment(20, 19), 145 new LineSegment(19, 18), 146 147 new LineSegment(21, 22), 148 new LineSegment(22, 23), 149 new LineSegment(23, 28), 150 new LineSegment(28, 29), 151 new LineSegment(29, 21), 152 153 new LineSegment(24, 25), 154 new LineSegment(25, 26), 155 new LineSegment(26, 29), 156 new LineSegment(29, 27), 157 new LineSegment(27, 24)); 158 } 159}//Icosidodecahedron