1+ # Using fully qualified java names instead of 'java_import'
12class Icosahedron
2- attr_reader :app , :r
3- TRIANGLES = Java ::ProcessingCore ::PConstants . TRIANGLES
3+ attr_reader :app , :radius , :renderer
44 def initialize ( app , radius )
5- @app , @r = app , radius
5+ @app = app
6+ @radius = radius
7+ @renderer = Java ::MonkstoneVecmath ::GfxRender . new ( app . g )
68 end
7-
8- ##
9+
910 # Draw an icosahedron defined by a radius r.
10- #
1111 def draw
1212 # Calculate the vertex data for an icosahedron inscribed by a sphere radius 'r'.
1313 # Use 4 Golden Ratio rectangles as the basis.
1414 phi = ( 1.0 + Math . sqrt ( 5.0 ) ) / 2.0
15- h = r / Math . sqrt ( 1.0 + phi * phi )
15+ h = radius / Math . sqrt ( 1.0 + phi * phi )
1616 v =
1717 [
18- Vec3D . new ( 0 , -h , h * phi ) , Vec3D . new ( 0 , -h , -h * phi ) , Vec3D . new ( 0 , h , -h * phi ) , Vec3D . new ( 0 , h , h * phi ) ,
19- Vec3D . new ( h , -h * phi , 0 ) , Vec3D . new ( h , h * phi , 0 ) , Vec3D . new ( -h , h * phi , 0 ) , Vec3D . new ( -h , -h * phi , 0 ) ,
20- Vec3D . new ( -h * phi , 0 , h ) , Vec3D . new ( -h * phi , 0 , -h ) , Vec3D . new ( h * phi , 0 , -h ) , Vec3D . new ( h * phi , 0 , h )
21- ]
22-
23- app . begin_shape ( TRIANGLES )
24- draw_triangle ( v [ 0 ] , v [ 7 ] , v [ 4 ] )
25- draw_triangle ( v [ 0 ] , v [ 4 ] , v [ 11 ] )
26- draw_triangle ( v [ 0 ] , v [ 11 ] , v [ 3 ] )
27- draw_triangle ( v [ 0 ] , v [ 3 ] , v [ 8 ] )
28- draw_triangle ( v [ 0 ] , v [ 8 ] , v [ 7 ] )
29- draw_triangle ( v [ 1 ] , v [ 4 ] , v [ 7 ] )
30- draw_triangle ( v [ 1 ] , v [ 10 ] , v [ 4 ] )
31- draw_triangle ( v [ 10 ] , v [ 11 ] , v [ 4 ] )
32- draw_triangle ( v [ 11 ] , v [ 5 ] , v [ 10 ] )
33- draw_triangle ( v [ 5 ] , v [ 3 ] , v [ 11 ] )
34- draw_triangle ( v [ 3 ] , v [ 6 ] , v [ 5 ] )
35- draw_triangle ( v [ 6 ] , v [ 8 ] , v [ 3 ] )
36- draw_triangle ( v [ 8 ] , v [ 9 ] , v [ 6 ] )
37- draw_triangle ( v [ 9 ] , v [ 7 ] , v [ 8 ] )
38- draw_triangle ( v [ 7 ] , v [ 1 ] , v [ 9 ] )
39- draw_triangle ( v [ 2 ] , v [ 1 ] , v [ 9 ] )
40- draw_triangle ( v [ 2 ] , v [ 10 ] , v [ 1 ] )
41- draw_triangle ( v [ 2 ] , v [ 5 ] , v [ 10 ] )
42- draw_triangle ( v [ 2 ] , v [ 6 ] , v [ 5 ] )
43- draw_triangle ( v [ 2 ] , v [ 9 ] , v [ 6 ] )
18+ Vec3D . new ( 0 , -h , h * phi ) , Vec3D . new ( 0 , -h , -h * phi ) , Vec3D . new ( 0 , h , -h * phi ) , Vec3D . new ( 0 , h , h * phi ) ,
19+ Vec3D . new ( h , -h * phi , 0 ) , Vec3D . new ( h , h * phi , 0 ) , Vec3D . new ( -h , h * phi , 0 ) , Vec3D . new ( -h , -h * phi , 0 ) ,
20+ Vec3D . new ( -h * phi , 0 , h ) , Vec3D . new ( -h * phi , 0 , -h ) , Vec3D . new ( h * phi , 0 , -h ) , Vec3D . new ( h * phi , 0 , h )
21+ ]
22+ app . begin_shape ( Java ::ProcessingCore ::PConstants . TRIANGLES )
23+ draw_triangle ( v [ 0 ] , v [ 7 ] , v [ 4 ] )
24+ draw_triangle ( v [ 0 ] , v [ 4 ] , v [ 11 ] )
25+ draw_triangle ( v [ 0 ] , v [ 11 ] , v [ 3 ] )
26+ draw_triangle ( v [ 0 ] , v [ 3 ] , v [ 8 ] )
27+ draw_triangle ( v [ 0 ] , v [ 8 ] , v [ 7 ] )
28+ draw_triangle ( v [ 1 ] , v [ 4 ] , v [ 7 ] )
29+ draw_triangle ( v [ 1 ] , v [ 10 ] , v [ 4 ] )
30+ draw_triangle ( v [ 10 ] , v [ 11 ] , v [ 4 ] )
31+ draw_triangle ( v [ 11 ] , v [ 5 ] , v [ 10 ] )
32+ draw_triangle ( v [ 5 ] , v [ 3 ] , v [ 11 ] )
33+ draw_triangle ( v [ 3 ] , v [ 6 ] , v [ 5 ] )
34+ draw_triangle ( v [ 6 ] , v [ 8 ] , v [ 3 ] )
35+ draw_triangle ( v [ 8 ] , v [ 9 ] , v [ 6 ] )
36+ draw_triangle ( v [ 9 ] , v [ 7 ] , v [ 8 ] )
37+ draw_triangle ( v [ 7 ] , v [ 1 ] , v [ 9 ] )
38+ draw_triangle ( v [ 2 ] , v [ 1 ] , v [ 9 ] )
39+ draw_triangle ( v [ 2 ] , v [ 10 ] , v [ 1 ] )
40+ draw_triangle ( v [ 2 ] , v [ 5 ] , v [ 10 ] )
41+ draw_triangle ( v [ 2 ] , v [ 6 ] , v [ 5 ] )
42+ draw_triangle ( v [ 2 ] , v [ 9 ] , v [ 6 ] )
4443 app . end_shape
4544 end
46-
47- def draw_triangle ( p1 , p2 , p3 )
48- app . vertex ( p1 . x , p1 . y , p1 . z )
49- app . vertex ( p2 . x , p2 . y , p2 . z )
50- app . vertex ( p3 . x , p3 . y , p3 . z )
45+
46+ def draw_triangle ( pt1 , pt2 , pt3 )
47+ pt1 . to_vertex ( renderer )
48+ pt2 . to_vertex ( renderer )
49+ pt3 . to_vertex ( renderer )
5150 end
52-
53- end
51+ end
0 commit comments