1
+ # Using fully qualified java names instead of 'java_import'
1
2
class Icosahedron
2
- attr_reader :app , :r
3
- TRIANGLES = Java ::ProcessingCore ::PConstants . TRIANGLES
3
+ attr_reader :app , :radius , :renderer
4
4
def initialize ( app , radius )
5
- @app , @r = app , radius
5
+ @app = app
6
+ @radius = radius
7
+ @renderer = Java ::MonkstoneVecmath ::GfxRender . new ( app . g )
6
8
end
7
-
8
- ##
9
+
9
10
# Draw an icosahedron defined by a radius r.
10
- #
11
11
def draw
12
12
# Calculate the vertex data for an icosahedron inscribed by a sphere radius 'r'.
13
13
# Use 4 Golden Ratio rectangles as the basis.
14
14
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 )
16
16
v =
17
17
[
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 ] )
44
43
app . end_shape
45
44
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 )
51
50
end
52
-
53
- end
51
+ end
0 commit comments