Sha256: c5c82bcec0b6cf23e4dfa9eb5237fce1125e60ec0001b270382fb7795900babf

Contents?: true

Size: 1.73 KB

Versions: 7

Compression:

Stored size: 1.73 KB

Contents

class Icosahedron
  include Processing::Proxy   # mixin Processing::Proxy
  attr_reader :r 
  
  def initialize(radius)
    @r = radius
  end
  
  ##
  # Draw an icosahedron defined by a radius r.
  #
  def draw
    # Calculate the vertex data for an icosahedron inscribed by a sphere radius 'r'.
    # Use 4 Golden Ratio rectangles as the basis.
    phi = (1.0 + Math.sqrt(5.0)) / 2.0
    h = r / Math.sqrt(1.0 + phi * phi)
    v =
      [
    Vec3D.new(0, -h, h * phi), Vec3D.new(0, -h, -h * phi), Vec3D.new(0, h, -h * phi), Vec3D.new(0, h, h * phi),
    Vec3D.new(h, -h * phi, 0), Vec3D.new(h, h * phi, 0), Vec3D.new(-h, h * phi, 0), Vec3D.new(-h, -h * phi, 0),
    Vec3D.new(-h * phi, 0, h), Vec3D.new(-h * phi, 0, -h), Vec3D.new(h * phi, 0, -h), Vec3D.new(h * phi, 0, h)
    ]
    
    begin_shape(TRIANGLES)
      
      draw_triangle(v[0], v[7],v[4])
      draw_triangle(v[0], v[4], v[11])
      draw_triangle(v[0], v[11], v[3])
      draw_triangle(v[0], v[3], v[8])
      draw_triangle(v[0], v[8], v[7])
      
      draw_triangle(v[1], v[4], v[7])
      draw_triangle(v[1], v[10], v[4])
      draw_triangle(v[10], v[11], v[4])
      draw_triangle(v[11], v[5], v[10])
      draw_triangle(v[5], v[3], v[11])
      draw_triangle(v[3], v[6], v[5])
      draw_triangle(v[6], v[8], v[3])
      draw_triangle(v[8], v[9], v[6])
      draw_triangle(v[9], v[7], v[8])
      draw_triangle(v[7], v[1], v[9])
      
      draw_triangle(v[2], v[1], v[9])
      draw_triangle(v[2], v[10], v[1])
      draw_triangle(v[2], v[5], v[10])
      draw_triangle(v[2], v[6], v[5])
      draw_triangle(v[2], v[9], v[6])
      
    end_shape
  end
  
  def draw_triangle(p1, p2, p3)
    
    vertex(p1.x, p1.y, p1.z)
    vertex(p2.x, p2.y, p2.z)
    vertex(p3.x, p3.y, p3.z)
    
  end
  
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
ruby-processing-2.6.3 samples/processing_app/basics/form/library/icosahedron/icosahedron.rb
ruby-processing-2.6.2 samples/processing_app/basics/form/library/icosahedron/icosahedron.rb
ruby-processing-2.6.1 samples/processing_app/basics/form/library/icosahedron/icosahedron.rb
ruby-processing-2.6.0 samples/processing_app/basics/form/library/icosahedron/icosahedron.rb
ruby-processing-2.5.1 samples/processing_app/basics/form/library/icosahedron/icosahedron.rb
ruby-processing-2.5.0 samples/processing_app/basics/form/library/icosahedron/icosahedron.rb
ruby-processing-2.4.4 samples/processing_app/basics/form/library/icosahedron/icosahedron.rb