eymiha_math3 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/gem_package.rb +33 -0
- data/lib/envelope3.rb +96 -0
- data/lib/eymiha_math3.rb +105 -0
- data/lib/point3.rb +276 -0
- data/lib/point3c.rb +123 -0
- data/lib/point3s.rb +128 -0
- data/lib/quaternion.rb +242 -0
- data/rakefile.rb +2 -0
- data/test/tc_envelope3.rb +70 -0
- data/test/tc_point3.rb +221 -0
- data/test/tc_point3c.rb +98 -0
- data/test/tc_point3s.rb +101 -0
- data/test/tc_quaternion.rb +148 -0
- metadata +75 -0
    
        data/test/tc_point3c.rb
    ADDED
    
    | @@ -0,0 +1,98 @@ | |
| 1 | 
            +
            require 'test/unit'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'point3c'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class TC_Point3c < Test::Unit::TestCase
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              understands ThreeDimensions
         | 
| 8 | 
            +
              
         | 
| 9 | 
            +
              def test_initialize_and_equality
         | 
| 10 | 
            +
                p3c = Point3c.new
         | 
| 11 | 
            +
                assert((p3c.c_radius == 0)&&(p3c.theta == 0)&&(p3c.z == 0))
         | 
| 12 | 
            +
                p3c = Point3c.new 1,2,3
         | 
| 13 | 
            +
                assert((p3c.c_radius == 1)&&(p3c.theta == 2)&&(p3c.z == 3))
         | 
| 14 | 
            +
                p3a = Point3c.new 1,2,3
         | 
| 15 | 
            +
                assert(p3c == p3a)
         | 
| 16 | 
            +
                assert(p3c =~ p3a)
         | 
| 17 | 
            +
                assert(p3c.approximately_equals?((point3c 1.005, 1.991, 3),0.01))
         | 
| 18 | 
            +
                p3a = Point3c.new 3,2,1
         | 
| 19 | 
            +
                assert(p3c != p3a)
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
              
         | 
| 22 | 
            +
              def test_Object_point3c
         | 
| 23 | 
            +
                p3c = point3c
         | 
| 24 | 
            +
                assert(p3c == origin)
         | 
| 25 | 
            +
                p3c = point3c 1,2,3
         | 
| 26 | 
            +
                assert((p3c.c_radius == 1)&&(p3c.theta == 2)&&(p3c.z == 3))
         | 
| 27 | 
            +
                p3a = Point3c.new 1,2,3
         | 
| 28 | 
            +
                assert((p3a.c_radius == 1)&&(p3a.theta == 2)&&(p3a.z == 3))
         | 
| 29 | 
            +
                assert(p3c == p3a)
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
              
         | 
| 32 | 
            +
              def test_accessors
         | 
| 33 | 
            +
                p3c = point3c
         | 
| 34 | 
            +
                assert(p3c.point3c_like?)
         | 
| 35 | 
            +
                assert((p3c.c_radius == 0)&&(p3c.theta == 0)&&(p3c.z == 0))
         | 
| 36 | 
            +
                p3c.c_radius = 1
         | 
| 37 | 
            +
                p3c.theta = 2
         | 
| 38 | 
            +
                p3c.z = 3
         | 
| 39 | 
            +
                assert((p3c.c_radius == 1)&&(p3c.theta == 2)&&(p3c.z == 3))
         | 
| 40 | 
            +
                p3c.c_radius, p3c.theta, p3c.z =  2, 4, 6
         | 
| 41 | 
            +
                assert((p3c.c_radius == 2)&&(p3c.theta == 4)&&(p3c.z == 6))
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
              
         | 
| 44 | 
            +
               def test_origin
         | 
| 45 | 
            +
                 p3c = point3c 0, 0, 0
         | 
| 46 | 
            +
                 assert(p3c == origin)
         | 
| 47 | 
            +
                 assert(origin == p3c)
         | 
| 48 | 
            +
                 p3c = point3c 0, 1, 0
         | 
| 49 | 
            +
                 assert(p3c == origin)
         | 
| 50 | 
            +
                 assert(origin == p3c)
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
              
         | 
| 53 | 
            +
              def test_set
         | 
| 54 | 
            +
                p3c = point3c
         | 
| 55 | 
            +
                p3c.set 1, 2, 3
         | 
| 56 | 
            +
                assert((p3c.c_radius == 1)&&(p3c.theta == 2)&&(p3c.z == 3))
         | 
| 57 | 
            +
                p3a = point3c p3c
         | 
| 58 | 
            +
                assert((p3a.c_radius == 1)&&(p3a.theta == 2)&&(p3a.z == 3))
         | 
| 59 | 
            +
                p3b = point3c
         | 
| 60 | 
            +
                assert_raise(TypeError) { p3b.set "bad" }
         | 
| 61 | 
            +
                assert_raise(TypeError) { point3c "bad" }
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              def test_copy
         | 
| 65 | 
            +
                p3c = point3c 1, 2, 3
         | 
| 66 | 
            +
                p3a = p3c.point3c
         | 
| 67 | 
            +
                assert(p3c == p3a)
         | 
| 68 | 
            +
              end
         | 
| 69 | 
            +
              
         | 
| 70 | 
            +
              def test_cartesian_and_spherical
         | 
| 71 | 
            +
                p3c = point3c 1, 2, 3
         | 
| 72 | 
            +
                assert(p3c.x =~ -0.416146836547142)
         | 
| 73 | 
            +
                assert(p3c.y =~ 0.909297426825682)
         | 
| 74 | 
            +
                assert(p3c.s_radius =~ 3.16227766016838)
         | 
| 75 | 
            +
                assert(p3c.phi =~ 0.321750554396642)
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
             
         | 
| 78 | 
            +
              def test_point3
         | 
| 79 | 
            +
                p3c = point3c 1, 2, 3
         | 
| 80 | 
            +
                p3 = p3c.point3
         | 
| 81 | 
            +
                assert(p3.x =~ -0.416146836547142)
         | 
| 82 | 
            +
                assert(p3.y =~ 0.909297426825682)
         | 
| 83 | 
            +
                assert(p3.z =~ 3)
         | 
| 84 | 
            +
                p3a = p3.point3c
         | 
| 85 | 
            +
                assert(p3c =~ p3a)
         | 
| 86 | 
            +
              end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
              def test_point3s
         | 
| 89 | 
            +
                p3c = point3c 1, 2, 3
         | 
| 90 | 
            +
                p3s = p3c.point3s
         | 
| 91 | 
            +
                assert(p3s.s_radius =~ 3.16227766016838)
         | 
| 92 | 
            +
                assert(p3s.theta =~ p3c.theta)
         | 
| 93 | 
            +
                assert(p3s.phi =~ 0.321750554396642)
         | 
| 94 | 
            +
                p3a = p3s.point3c
         | 
| 95 | 
            +
                assert(p3c =~ p3a)
         | 
| 96 | 
            +
              end
         | 
| 97 | 
            +
             | 
| 98 | 
            +
            end
         | 
    
        data/test/tc_point3s.rb
    ADDED
    
    | @@ -0,0 +1,101 @@ | |
| 1 | 
            +
            require 'test/unit'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'point3s'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class TC_Point3s < Test::Unit::TestCase
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              understands ThreeDimensions
         | 
| 8 | 
            +
              
         | 
| 9 | 
            +
              def test_initialize_and_equality
         | 
| 10 | 
            +
                p3s = Point3s.new
         | 
| 11 | 
            +
                assert((p3s.s_radius == 0)&&(p3s.theta == 0)&&(p3s.phi == 0))
         | 
| 12 | 
            +
                p3s = Point3s.new 1,2,3
         | 
| 13 | 
            +
                assert((p3s.s_radius == 1)&&(p3s.theta == 2)&&(p3s.phi == 3))
         | 
| 14 | 
            +
                p3a = Point3s.new 1,2,3
         | 
| 15 | 
            +
                assert(p3s == p3a)
         | 
| 16 | 
            +
                assert(p3s =~ p3a)
         | 
| 17 | 
            +
                assert(p3s.approximately_equals?((point3s 1.005, 1.991, 3),0.01))
         | 
| 18 | 
            +
                p3a = Point3s.new 3,2,1
         | 
| 19 | 
            +
                assert(p3s != p3a)
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
              
         | 
| 22 | 
            +
              def test_Object_point3s
         | 
| 23 | 
            +
                p3s = point3s
         | 
| 24 | 
            +
                assert(p3s == origin)
         | 
| 25 | 
            +
                p3s = point3s 1,2,3
         | 
| 26 | 
            +
                assert((p3s.s_radius == 1)&&(p3s.theta == 2)&&(p3s.phi == 3))
         | 
| 27 | 
            +
                p3a = Point3s.new 1,2,3
         | 
| 28 | 
            +
                assert((p3a.s_radius == 1)&&(p3a.theta == 2)&&(p3a.phi == 3))
         | 
| 29 | 
            +
                assert(p3s == p3a)
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
              
         | 
| 32 | 
            +
              def test_accessors
         | 
| 33 | 
            +
                p3s = point3s
         | 
| 34 | 
            +
                assert(p3s.point3s_like?)
         | 
| 35 | 
            +
                assert((p3s.s_radius == 0)&&(p3s.theta == 0)&&(p3s.phi == 0))
         | 
| 36 | 
            +
                p3s.s_radius = 1
         | 
| 37 | 
            +
                p3s.theta = 2
         | 
| 38 | 
            +
                p3s.phi = 3
         | 
| 39 | 
            +
                assert((p3s.s_radius == 1)&&(p3s.theta == 2)&&(p3s.phi == 3))
         | 
| 40 | 
            +
                p3s.s_radius, p3s.theta, p3s.phi =  2, 4, 6
         | 
| 41 | 
            +
                assert((p3s.s_radius == 2)&&(p3s.theta == 4)&&(p3s.phi == pi))
         | 
| 42 | 
            +
                p3s.s_radius, p3s.theta, p3s.phi =  -2, -4, -6
         | 
| 43 | 
            +
                assert((p3s.s_radius == -2)&&(p3s.theta =~ 2.28318530717959)&&
         | 
| 44 | 
            +
                       (p3s.phi == 0))
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
              
         | 
| 47 | 
            +
               def test_origin
         | 
| 48 | 
            +
                 p3s = point3s 0, 0, 0
         | 
| 49 | 
            +
                 assert(p3s == origin)
         | 
| 50 | 
            +
                 assert(origin == p3s)
         | 
| 51 | 
            +
                 p3s = point3s 0, 1, 2
         | 
| 52 | 
            +
                 assert(p3s == origin)
         | 
| 53 | 
            +
                 assert(origin == p3s)
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
              
         | 
| 56 | 
            +
              def test_set
         | 
| 57 | 
            +
                p3s = point3s
         | 
| 58 | 
            +
                p3s.set 1, 2, 3
         | 
| 59 | 
            +
                assert((p3s.s_radius == 1)&&(p3s.theta == 2)&&(p3s.phi == 3))
         | 
| 60 | 
            +
                p3a = point3s p3s
         | 
| 61 | 
            +
                assert((p3a.s_radius == 1)&&(p3a.theta == 2)&&(p3a.phi == 3))
         | 
| 62 | 
            +
                p3b = point3s
         | 
| 63 | 
            +
                assert_raise(TypeError) { p3b.set "bad" }
         | 
| 64 | 
            +
                assert_raise(TypeError) { point3s "bad" }
         | 
| 65 | 
            +
              end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
              def test_copy
         | 
| 68 | 
            +
                p3s = point3s 1, 2, 3
         | 
| 69 | 
            +
                p3a = p3s.point3s
         | 
| 70 | 
            +
                assert(p3s == p3a)
         | 
| 71 | 
            +
              end
         | 
| 72 | 
            +
              
         | 
| 73 | 
            +
              def test_cartesian_and_cylindrical
         | 
| 74 | 
            +
                p3s = point3s 1, 2, 3
         | 
| 75 | 
            +
                assert(p3s.x =~ -0.058726644927621)
         | 
| 76 | 
            +
                assert(p3s.y =~ 0.128320060202457)
         | 
| 77 | 
            +
                assert(p3s.z =~ -0.989992496600445)
         | 
| 78 | 
            +
                assert(p3s.c_radius =~ 0.141120008059867)
         | 
| 79 | 
            +
              end
         | 
| 80 | 
            +
             
         | 
| 81 | 
            +
              def test_point3
         | 
| 82 | 
            +
                p3s = point3s 1, 2, 3
         | 
| 83 | 
            +
                p3 = p3s.point3
         | 
| 84 | 
            +
                assert(p3.x =~ -0.058726644927621)
         | 
| 85 | 
            +
                assert(p3.y =~ 0.128320060202457)
         | 
| 86 | 
            +
                assert(p3.z =~ -0.989992496600445)
         | 
| 87 | 
            +
                p3a = p3.point3s
         | 
| 88 | 
            +
                assert(p3s =~ p3a)
         | 
| 89 | 
            +
              end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
              def test_point3c
         | 
| 92 | 
            +
                p3s = point3s 1, 2, 3
         | 
| 93 | 
            +
                p3c = p3s.point3c
         | 
| 94 | 
            +
                assert(p3c.c_radius =~ 0.141120008059867)
         | 
| 95 | 
            +
                assert(p3c.theta =~ p3s.theta)
         | 
| 96 | 
            +
                assert(p3c.z =~ -0.989992496600445)
         | 
| 97 | 
            +
                p3a = p3c.point3s
         | 
| 98 | 
            +
                assert(p3s =~ p3a)
         | 
| 99 | 
            +
              end
         | 
| 100 | 
            +
             | 
| 101 | 
            +
            end
         | 
| @@ -0,0 +1,148 @@ | |
| 1 | 
            +
            require 'test/unit'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'quaternion'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            class TC_Quaternion < Test::Unit::TestCase
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              understands ThreeDimensions
         | 
| 8 | 
            +
              
         | 
| 9 | 
            +
              def test_initialize_and_equality
         | 
| 10 | 
            +
                q = Quaternion.new
         | 
| 11 | 
            +
                assert((q.axis == origin)&&(q.real == 0))
         | 
| 12 | 
            +
                qa = Quaternion.new(origin,0)
         | 
| 13 | 
            +
                assert(q == qa)
         | 
| 14 | 
            +
                p3 = point3 1,2,3
         | 
| 15 | 
            +
                qb = Quaternion.new p3,4
         | 
| 16 | 
            +
                assert(qb.axis == p3)
         | 
| 17 | 
            +
                assert(qb.real == 4)
         | 
| 18 | 
            +
                assert(q != qb)
         | 
| 19 | 
            +
                qc = quaternion p3,4
         | 
| 20 | 
            +
                assert(qc.axis == p3)
         | 
| 21 | 
            +
                assert(qc.real == 4)
         | 
| 22 | 
            +
                assert(q != qb)
         | 
| 23 | 
            +
                assert(qb == qc)
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              def test_accessors
         | 
| 27 | 
            +
                p3 = point3 1,2,3
         | 
| 28 | 
            +
                q = quaternion p3,4
         | 
| 29 | 
            +
                q.axis.scale! 2
         | 
| 30 | 
            +
                q.real -= 3
         | 
| 31 | 
            +
                assert(q.axis == point3(2,4,6))
         | 
| 32 | 
            +
                assert(q.real == 1)
         | 
| 33 | 
            +
                qb = quaternion q
         | 
| 34 | 
            +
                assert(q == qb)
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              def test_axis_angle
         | 
| 38 | 
            +
                p3 = point3 1,2,3
         | 
| 39 | 
            +
                q = Quaternion.from_axis_angle(p3,pi/8)
         | 
| 40 | 
            +
                assert(q.axis.x =~ 0.195090322016128)
         | 
| 41 | 
            +
                assert(q.axis.y =~ 0.390180644032256)
         | 
| 42 | 
            +
                assert(q.axis.z =~ 0.585270966048385)
         | 
| 43 | 
            +
                assert(q.real =~ 0.98078528040323)
         | 
| 44 | 
            +
                qb = q.to_axis_angle
         | 
| 45 | 
            +
                assert(qb.axis =~ p3)
         | 
| 46 | 
            +
                assert(qb.real =~ pi/8)
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
              def test_add
         | 
| 50 | 
            +
                p3a,ra = point3(1,2,3),4
         | 
| 51 | 
            +
                p3b,rb = point3(4,-6,0),-3
         | 
| 52 | 
            +
                qa = quaternion p3a,ra
         | 
| 53 | 
            +
                qb = quaternion p3b,rb
         | 
| 54 | 
            +
                p3c,rc = p3a+p3b,ra+rb
         | 
| 55 | 
            +
                qc = qa+qb
         | 
| 56 | 
            +
                assert(qc.axis =~ p3c)
         | 
| 57 | 
            +
                assert(qc.real =~ rc)
         | 
| 58 | 
            +
                qa.add! qb
         | 
| 59 | 
            +
                assert(qa =~ qc)
         | 
| 60 | 
            +
              end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
              def test_subtract
         | 
| 63 | 
            +
                p3a,ra = point3(1,2,3),4
         | 
| 64 | 
            +
                p3b,rb = point3(4,-6,0),-3
         | 
| 65 | 
            +
                qa = quaternion p3a,ra
         | 
| 66 | 
            +
                qb = quaternion p3b,rb
         | 
| 67 | 
            +
                p3c,rc = p3a-p3b,ra-rb
         | 
| 68 | 
            +
                qc = qa-qb
         | 
| 69 | 
            +
                assert(qc.axis =~ p3c)
         | 
| 70 | 
            +
                assert(qc.real =~ rc)
         | 
| 71 | 
            +
                qa.subtract! qb
         | 
| 72 | 
            +
                assert(qa =~ qc)
         | 
| 73 | 
            +
              end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
              def test_multiply
         | 
| 76 | 
            +
                p3a,ra = point3(1,2,3),4
         | 
| 77 | 
            +
                p3b,rb = point3(4,-6,0),-3
         | 
| 78 | 
            +
                qa = quaternion p3a,ra
         | 
| 79 | 
            +
                qb = quaternion p3b,rb
         | 
| 80 | 
            +
                p3c,rc = point3(-1,30,-23),-4
         | 
| 81 | 
            +
                qc = qa*qb
         | 
| 82 | 
            +
                assert(qc.axis =~ p3c)
         | 
| 83 | 
            +
                assert(qc.real =~ rc)
         | 
| 84 | 
            +
                qa.multiply! qb
         | 
| 85 | 
            +
                assert(qa =~ qc)
         | 
| 86 | 
            +
              end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
              def test_scale
         | 
| 89 | 
            +
                p3a,ra = point3(1,2,3),4
         | 
| 90 | 
            +
                qa = quaternion p3a,ra
         | 
| 91 | 
            +
                p3c,rc = p3a.scale(5.5),ra*5.5
         | 
| 92 | 
            +
                qc = qa.scale(5.5)
         | 
| 93 | 
            +
                assert(qc.axis =~ p3c)
         | 
| 94 | 
            +
                assert(qc.real =~ rc)
         | 
| 95 | 
            +
                qa.scale! 5.5
         | 
| 96 | 
            +
                assert(qa =~ qc)
         | 
| 97 | 
            +
              end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
              def test_conjugate
         | 
| 100 | 
            +
                p3a,ra = point3(1,2,3),4
         | 
| 101 | 
            +
                qa = quaternion p3a,ra
         | 
| 102 | 
            +
                p3c,rc = point3(-1,-2,-3),ra
         | 
| 103 | 
            +
                qc = qa.conjugate
         | 
| 104 | 
            +
                assert(qc.axis =~ p3c)
         | 
| 105 | 
            +
                assert(qc.real =~ rc)
         | 
| 106 | 
            +
                qa.conjugate!
         | 
| 107 | 
            +
                assert(qa =~ qc)
         | 
| 108 | 
            +
              end
         | 
| 109 | 
            +
             | 
| 110 | 
            +
              def test_norm
         | 
| 111 | 
            +
                p3a,ra = point3(1,2,3),4
         | 
| 112 | 
            +
                qa = quaternion p3a,ra
         | 
| 113 | 
            +
                assert(qa.norm =~ 19.7416573867739)
         | 
| 114 | 
            +
              end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
              def test_abs
         | 
| 117 | 
            +
                p3a,ra = point3(1,2,3),4
         | 
| 118 | 
            +
                qa = quaternion p3a,ra
         | 
| 119 | 
            +
                assert(qa.abs =~ 4.44315849219606)
         | 
| 120 | 
            +
              end
         | 
| 121 | 
            +
             | 
| 122 | 
            +
              def test_inverse
         | 
| 123 | 
            +
                p3a,ra = point3(1,2,3),4
         | 
| 124 | 
            +
                qa = quaternion p3a,ra
         | 
| 125 | 
            +
                q = qa.inverse
         | 
| 126 | 
            +
                assert(q.axis.x =~ (-0.0506543083191159))
         | 
| 127 | 
            +
                assert(q.axis.y =~ (-0.101308616638232))
         | 
| 128 | 
            +
                assert(q.axis.z =~ (-0.151962924957348))
         | 
| 129 | 
            +
                assert(q.real =~ 0.202617233276464)
         | 
| 130 | 
            +
                qa.inverse!
         | 
| 131 | 
            +
                assert(q =~ qa)
         | 
| 132 | 
            +
              end
         | 
| 133 | 
            +
             | 
| 134 | 
            +
              def test_divide
         | 
| 135 | 
            +
                p3a,ra = point3(1,2,3),4
         | 
| 136 | 
            +
                qa = quaternion p3a,ra
         | 
| 137 | 
            +
                p3b,rb = point3(10,0,-10),0
         | 
| 138 | 
            +
                qb = quaternion p3b,rb
         | 
| 139 | 
            +
                qc = qa.divide qb
         | 
| 140 | 
            +
                assert(qc.axis.x =~ 2.41421356237309)
         | 
| 141 | 
            +
                assert(qc.axis.y =~ (-2.82842712474619))
         | 
| 142 | 
            +
                assert(qc.axis.z =~ 0.414213562373095)
         | 
| 143 | 
            +
                assert(qc.real =~ -1.41421356237309)
         | 
| 144 | 
            +
                qa.divide! qb
         | 
| 145 | 
            +
                assert(qa =~ qc)
         | 
| 146 | 
            +
              end
         | 
| 147 | 
            +
             | 
| 148 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,75 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification 
         | 
| 2 | 
            +
            rubygems_version: 0.9.0
         | 
| 3 | 
            +
            specification_version: 1
         | 
| 4 | 
            +
            name: eymiha_math3
         | 
| 5 | 
            +
            version: !ruby/object:Gem::Version 
         | 
| 6 | 
            +
              version: 0.1.0
         | 
| 7 | 
            +
            date: 2007-05-22 00:00:00 -04:00
         | 
| 8 | 
            +
            summary: Emiyha - basic 3D math extensions
         | 
| 9 | 
            +
            require_paths: 
         | 
| 10 | 
            +
            - lib
         | 
| 11 | 
            +
            email: dave@eymiha.com
         | 
| 12 | 
            +
            homepage: http://www.eymiha.com
         | 
| 13 | 
            +
            rubyforge_project: cori
         | 
| 14 | 
            +
            description: 
         | 
| 15 | 
            +
            autorequire: eymiha_math3
         | 
| 16 | 
            +
            default_executable: 
         | 
| 17 | 
            +
            bindir: bin
         | 
| 18 | 
            +
            has_rdoc: true
         | 
| 19 | 
            +
            required_ruby_version: !ruby/object:Gem::Version::Requirement 
         | 
| 20 | 
            +
              requirements: 
         | 
| 21 | 
            +
              - - ">"
         | 
| 22 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 23 | 
            +
                  version: 0.0.0
         | 
| 24 | 
            +
              version: 
         | 
| 25 | 
            +
            platform: ruby
         | 
| 26 | 
            +
            signing_key: 
         | 
| 27 | 
            +
            cert_chain: 
         | 
| 28 | 
            +
            post_install_message: 
         | 
| 29 | 
            +
            authors: 
         | 
| 30 | 
            +
            - Dave Anderson
         | 
| 31 | 
            +
            files: 
         | 
| 32 | 
            +
            - gem_package.rb
         | 
| 33 | 
            +
            - rakefile.rb
         | 
| 34 | 
            +
            - lib/envelope3.rb
         | 
| 35 | 
            +
            - lib/eymiha_math3.rb
         | 
| 36 | 
            +
            - lib/point3.rb
         | 
| 37 | 
            +
            - lib/point3c.rb
         | 
| 38 | 
            +
            - lib/point3s.rb
         | 
| 39 | 
            +
            - lib/quaternion.rb
         | 
| 40 | 
            +
            - test/tc_envelope3.rb
         | 
| 41 | 
            +
            - test/tc_point3.rb
         | 
| 42 | 
            +
            - test/tc_point3c.rb
         | 
| 43 | 
            +
            - test/tc_point3s.rb
         | 
| 44 | 
            +
            - test/tc_quaternion.rb
         | 
| 45 | 
            +
            test_files: []
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            rdoc_options: 
         | 
| 48 | 
            +
            - --all
         | 
| 49 | 
            +
            extra_rdoc_files: []
         | 
| 50 | 
            +
             | 
| 51 | 
            +
            executables: []
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            extensions: []
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            requirements: []
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            dependencies: 
         | 
| 58 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 59 | 
            +
              name: eymiha
         | 
| 60 | 
            +
              version_requirement: 
         | 
| 61 | 
            +
              version_requirements: !ruby/object:Gem::Version::Requirement 
         | 
| 62 | 
            +
                requirements: 
         | 
| 63 | 
            +
                - - ">="
         | 
| 64 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 65 | 
            +
                    version: 0.1.0
         | 
| 66 | 
            +
                version: 
         | 
| 67 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 68 | 
            +
              name: eymiha_math
         | 
| 69 | 
            +
              version_requirement: 
         | 
| 70 | 
            +
              version_requirements: !ruby/object:Gem::Version::Requirement 
         | 
| 71 | 
            +
                requirements: 
         | 
| 72 | 
            +
                - - ">="
         | 
| 73 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 74 | 
            +
                    version: 0.1.0
         | 
| 75 | 
            +
                version: 
         |