1+ # Example of replacing Processing::Proxy with extend Forwardable
2+ # And using Vec3D :to_vertex function
13class Icosahedron
2- include Processing ::Proxy # mixin Processing::Proxy
3- attr_reader :r
4-
5- def initialize ( radius )
4+ extend Forwardable # replacing Processing::Proxy mixin
5+ def_delegators ( :@app , :vertex , :begin_shape , :end_shape )
6+ attr_reader :r , :app , :renderer
7+
8+ def initialize ( app , radius )
69 @r = radius
10+ @app = app
11+ @renderer = AppRender . new ( app )
712 end
8-
13+
914 ##
1015 # Draw an icosahedron defined by a radius r.
1116 #
1217 def draw
13- # Calculate the vertex data for an icosahedron inscribed by a sphere radius 'r'.
18+ # Calculate vertex data for an icosahedron inscribed by a sphere radius 'r'.
1419 # Use 4 Golden Ratio rectangles as the basis.
1520 phi = ( 1.0 + Math . sqrt ( 5.0 ) ) / 2.0
1621 h = r / Math . sqrt ( 1.0 + phi * phi )
1722 v =
18- [
19- Vec3D . new ( 0 , -h , h * phi ) , Vec3D . new ( 0 , -h , -h * phi ) , Vec3D . new ( 0 , h , -h * phi ) , Vec3D . new ( 0 , h , h * phi ) ,
20- Vec3D . new ( h , -h * phi , 0 ) , Vec3D . new ( h , h * phi , 0 ) , Vec3D . new ( -h , h * phi , 0 ) , Vec3D . new ( -h , -h * phi , 0 ) ,
21- Vec3D . new ( -h * phi , 0 , h ) , Vec3D . new ( -h * phi , 0 , -h ) , Vec3D . new ( h * phi , 0 , -h ) , Vec3D . new ( h * phi , 0 , h )
23+ [
24+ Vec3D . new ( 0 , -h , h * phi ) , Vec3D . new ( 0 , -h , -h * phi ) ,
25+ Vec3D . new ( 0 , h , -h * phi ) , Vec3D . new ( 0 , h , h * phi ) ,
26+ Vec3D . new ( h , -h * phi , 0 ) , Vec3D . new ( h , h * phi , 0 ) ,
27+ Vec3D . new ( -h , h * phi , 0 ) , Vec3D . new ( -h , -h * phi , 0 ) ,
28+ Vec3D . new ( -h * phi , 0 , h ) , Vec3D . new ( -h * phi , 0 , -h ) ,
29+ Vec3D . new ( h * phi , 0 , -h ) , Vec3D . new ( h * phi , 0 , h )
2230 ]
23-
24- begin_shape ( TRIANGLES )
25-
26- draw_triangle ( v [ 0 ] , v [ 7 ] , v [ 4 ] )
27- draw_triangle ( v [ 0 ] , v [ 4 ] , v [ 11 ] )
28- draw_triangle ( v [ 0 ] , v [ 11 ] , v [ 3 ] )
29- draw_triangle ( v [ 0 ] , v [ 3 ] , v [ 8 ] )
30- draw_triangle ( v [ 0 ] , v [ 8 ] , v [ 7 ] )
31-
32- draw_triangle ( v [ 1 ] , v [ 4 ] , v [ 7 ] )
33- draw_triangle ( v [ 1 ] , v [ 10 ] , v [ 4 ] )
34- draw_triangle ( v [ 10 ] , v [ 11 ] , v [ 4 ] )
35- draw_triangle ( v [ 11 ] , v [ 5 ] , v [ 10 ] )
36- draw_triangle ( v [ 5 ] , v [ 3 ] , v [ 11 ] )
37- draw_triangle ( v [ 3 ] , v [ 6 ] , v [ 5 ] )
38- draw_triangle ( v [ 6 ] , v [ 8 ] , v [ 3 ] )
39- draw_triangle ( v [ 8 ] , v [ 9 ] , v [ 6 ] )
40- draw_triangle ( v [ 9 ] , v [ 7 ] , v [ 8 ] )
41- draw_triangle ( v [ 7 ] , v [ 1 ] , v [ 9 ] )
42-
43- draw_triangle ( v [ 2 ] , v [ 1 ] , v [ 9 ] )
44- draw_triangle ( v [ 2 ] , v [ 10 ] , v [ 1 ] )
45- draw_triangle ( v [ 2 ] , v [ 5 ] , v [ 10 ] )
46- draw_triangle ( v [ 2 ] , v [ 6 ] , v [ 5 ] )
47- draw_triangle ( v [ 2 ] , v [ 9 ] , v [ 6 ] )
48-
31+
32+ begin_shape ( Java ::ProcessingCore ::PConstants ::TRIANGLES )
33+ draw_triangle ( v [ 0 ] , v [ 7 ] , v [ 4 ] )
34+ draw_triangle ( v [ 0 ] , v [ 4 ] , v [ 11 ] )
35+ draw_triangle ( v [ 0 ] , v [ 11 ] , v [ 3 ] )
36+ draw_triangle ( v [ 0 ] , v [ 3 ] , v [ 8 ] )
37+ draw_triangle ( v [ 0 ] , v [ 8 ] , v [ 7 ] )
38+ draw_triangle ( v [ 1 ] , v [ 4 ] , v [ 7 ] )
39+ draw_triangle ( v [ 1 ] , v [ 10 ] , v [ 4 ] )
40+ draw_triangle ( v [ 10 ] , v [ 11 ] , v [ 4 ] )
41+ draw_triangle ( v [ 11 ] , v [ 5 ] , v [ 10 ] )
42+ draw_triangle ( v [ 5 ] , v [ 3 ] , v [ 11 ] )
43+ draw_triangle ( v [ 3 ] , v [ 6 ] , v [ 5 ] )
44+ draw_triangle ( v [ 6 ] , v [ 8 ] , v [ 3 ] )
45+ draw_triangle ( v [ 8 ] , v [ 9 ] , v [ 6 ] )
46+ draw_triangle ( v [ 9 ] , v [ 7 ] , v [ 8 ] )
47+ draw_triangle ( v [ 7 ] , v [ 1 ] , v [ 9 ] )
48+ draw_triangle ( v [ 2 ] , v [ 1 ] , v [ 9 ] )
49+ draw_triangle ( v [ 2 ] , v [ 10 ] , v [ 1 ] )
50+ draw_triangle ( v [ 2 ] , v [ 5 ] , v [ 10 ] )
51+ draw_triangle ( v [ 2 ] , v [ 6 ] , v [ 5 ] )
52+ draw_triangle ( v [ 2 ] , v [ 9 ] , v [ 6 ] )
4953 end_shape
5054 end
51-
55+
5256 def draw_triangle ( p1 , p2 , p3 )
53-
54- vertex ( p1 . x , p1 . y , p1 . z )
55- vertex ( p2 . x , p2 . y , p2 . z )
56- vertex ( p3 . x , p3 . y , p3 . z )
57-
57+ p1 . to_vertex ( renderer )
58+ p2 . to_vertex ( renderer )
59+ p3 . to_vertex ( renderer )
5860 end
59-
60- end
61+ end
0 commit comments