Example #1
0
def getConeSurfaceArea( r, h ):
    if not isinstance( r, RPNMeasurement ):
        return getConeSurfaceArea( RPNMeasurement( real( r ), 'meter' ), h )

    if r.getDimensions( ) != { 'length' : 1 }:
        raise ValueError( '\'cone_area\' argument 1 must be a length' )

    if not isinstance( h, RPNMeasurement ):
        return getConeSurfaceArea( r, RPNMeasurement( real( h ), 'meter' ) )

    if h.getDimensions( ) != { 'length' : 1 }:
        raise ValueError( '\'cone_area\' argument 2 must be a length' )

    hypotenuse = getRoot( add( getPower( r, 2 ), getPower( h, 2 ) ), 2 )

    return getProduct( [ pi, r, add( r, hypotenuse ) ] )
Example #2
0
def getDodecahedronSurfaceArea( n ):
    if not isinstance( n, RPNMeasurement ):
        return getDodecahedronSurfaceArea( RPNMeasurement( real( n ), 'meter' ) )

    if n.getDimensions( ) != { 'length' : 1 }:
        raise ValueError( '\'dodecahedron_area\' argument must be a length' )

    area = getProduct( [ 3, getRoot( add( 25, fmul( 10, sqrt( 5 ) ) ), 2 ), getPower( n, 2 ) ] )
    return area.convert( 'meter^2' )
Example #3
0
def getTriangleArea( a, b, c ):
    if not isinstance( a, RPNMeasurement ):
        return getTriangleArea( RPNMeasurement( real( a ), 'meter' ), b, c )

    if a.getDimensions( ) != { 'length' : 1 }:
        raise ValueError( '\'triangle_area\' argument 1 must be a length' )

    if not isinstance( b, RPNMeasurement ):
        return getTriangleArea( a, RPNMeasurement( real( b ), 'meter' ), c )

    if b.getDimensions( ) != { 'length' : 1 }:
        raise ValueError( '\'triangle_area\' argument 2 must be a length' )

    if not isinstance( c, RPNMeasurement ):
        return getTriangleArea( a, b, RPNMeasurement( real( c ), 'meter' ) )

    if b.getDimensions( ) != { 'length' : 1 }:
        raise ValueError( '\'triangle_area\' argument 3 must be a length' )

    if add( a, b ).isNotLarger( c ) or add( b, c ).isNotLarger( a ) or add( a, c ).isNotLarger( b ):
        raise ValueError( 'invalid triangle, the sum of any two sides must be longer than the third side' )

    s = divide( getSum( [ a, b, c ] ), 2 )   # semi-perimeter
    return getRoot( getProduct( [ s, subtract( s, a ), subtract( s, b ), subtract( s, c ) ] ), 2 )
Example #4
0
File: rpnList.py Project: flawr/rpn
def getSum( n ):
    if isinstance( n, RPNGenerator ):
        return getSum( list( n ) )
    elif isinstance( n[ 0 ], ( list, RPNGenerator ) ):
        return [ getSum( arg ) for arg in n ]

    result = None

    for i in n:
        if result is None:
            result = i
        else:
            result = add( result, i )

    return result
Example #5
0
def getPrismSurfaceArea( n, k, h ):
    if real( n ) < 3:
        raise ValueError( 'the number of sides of the prism cannot be less than 3,' )

    if not isinstance( k, RPNMeasurement ):
        return getPrismSurfaceArea( n, RPNMeasurement( real( k ), 'meter' ), h )

    if not isinstance( h, RPNMeasurement ):
        return getPrismSurfaceArea( n, k, RPNMeasurement( real( h ), 'meter' ) )

    if k.getDimensions( ) != { 'length' : 1 }:
        raise ValueError( '\'prism_area\' argument 2 must be a length' )

    if h.getDimensions( ) != { 'length' : 1 }:
        raise ValueError( '\'prism_area\' argument 3 must be a length' )

    result = add( getProduct( [ fdiv( n, 2 ), getPower( k, 2 ), cot( fdiv( pi, n ) ) ] ),
                  getProduct( [ n, k, h ] ) )
    return result.convert( 'meter^2' )