class CrystalScad::Extras::Triangle

This currently can solve triangels knowing 1 side and 2 angels

Attributes

a[RW]
alpha[RW]
b[RW]
beta[RW]
c[RW]
gamma[RW]

Public Class Methods

new(args={}) click to toggle source
# File lib/crystalscad/Extras.rb, line 7
def initialize(args={})
        @alpha = args[:alpha]
        @beta = args[:beta]
        @gamma = args[:gamma]
        @a = args[:a]
        @b = args[:b]
        @c = args[:c]        
        solve
end

Public Instance Methods

solve() click to toggle source
# File lib/crystalscad/Extras.rb, line 17
def solve
        # see if we have two angles, so we know the third one
        if @alpha == nil and @beta != nil and @gamma != nil
                @alpha = 180 - @beta - @gamma
        elsif @alpha != nil and @beta == nil and @gamma != nil
                @beta = 180 - @alpha - @gamma 
        elsif @alpha != nil and @beta != nil and @gamma == nil                       
                @gamma = 180 - @alpha - @beta
        end                  

        if @alpha != nil and @beta != nil and @gamma != nil
                
                if @a == nil
                        if @b != nil
                                @a = (@b / Math::sin(radians(@beta))) * Math::sin(radians(@alpha))        
                        elsif @c != nil
                                @a = (@c / Math::sin(radians(@gamma))) * Math::sin(radians(@alpha))       
                        end
                end

                if @b == nil
                        if @a != nil
                                @b = (@a / Math::sin(radians(@alpha))) * Math::sin(radians(@beta))        
                        elsif @c != nil
                                @b = (@c / Math::sin(radians(@gamma))) * Math::sin(radians(@beta))        
                        end
                end

                if @c == nil
                        if @a != nil
                                @c = (@a / Math::sin(radians(@alpha))) * Math::sin(radians(@gamma))       
                        elsif @b != nil
                                @c = (@b / Math::sin(radians(@beta))) * Math::sin(radians(@gamma))        
                        end
                end                                 
        
        end                  


end