gVector gSatTEME::computeSubPoint(gTime ai_Time) { gVector resultVector(3); // (0) Latitude, (1) Longitude, (2) altitude double theta, r, e2, phi, c; theta = AcTan(m_Position[1], m_Position[0]); // radians resultVector[ LONGITUDE] = fmod((theta - ai_Time.toThetaGMST()), K2PI); //radians r = std::sqrt(Sqr(m_Position[0]) + Sqr(m_Position[1])); e2 = __f*(2 - __f); resultVector[ LATITUDE] = AcTan(m_Position[2],r); /*radians*/ do { phi = resultVector[ LATITUDE]; c = 1/std::sqrt(1 - e2*Sqr(sin(phi))); resultVector[ LATITUDE] = AcTan(m_Position[2] + KEARTHRADIUS*c*e2*sin(phi),r); } while(fabs(resultVector[ LATITUDE] - phi) >= 1E-10); resultVector[ ALTITUDE] = r/cos(resultVector[ LATITUDE]) - KEARTHRADIUS*c;/*kilometers*/ if(resultVector[ LATITUDE] > (KPI/2.0)) resultVector[ LATITUDE] -= K2PI; resultVector[LATITUDE] = resultVector[LATITUDE]/KDEG2RAD; resultVector[LONGITUDE] = resultVector[LONGITUDE]/KDEG2RAD; if(resultVector[LONGITUDE] < -180.0) resultVector[LONGITUDE] +=360; else if(resultVector[LONGITUDE] > 180.0) resultVector[LONGITUDE] -= 360; return resultVector; }
Vector3 Nav::getPosition() { Vector3 resultVector(position.x, position.y, 0); resultVector.x += QRx; resultVector.y += QRy; resultVector.z = position.z; return resultVector; }
void guessLambdaModifiers( std::ostream& o, std::istream& initialAdjustmentParameterIstream, std::istream& targetsIstream, std::istream& metaLogIstream ) { // Parse the initialAdjustmentParameter double initialAdjustmentParameter; initialAdjustmentParameterIstream >> initialAdjustmentParameter; if( initialAdjustmentParameterIstream.fail( ) || initialAdjustmentParameterIstream.good( ) ) { throw InitialAdjustmentParameterParseException( ); } // Parse the targets std::vector< double > targetVector; parseBitrateVector( targetsIstream, targetVector ); if( targetVector.empty( ) || targetsIstream.fail( ) || targetsIstream.good( ) ) throw TargetsParseException( ); // Parse the metalog std::list< MetaLogEntry< std::map< unsigned char, double > > > metaLogEntryList; do { // Parse the Lambda-modifiers MetaLogEntry< std::map< unsigned char, double > > entry; parseLambdaModifierMap( metaLogIstream, entry.lambdaModifiers ); if( !metaLogIstream.good( ) ) throw MetaLogParseException( ); // Skip the ';' if( ';' != metaLogIstream.get( ) ) throw MetaLogParseException( ); if( !metaLogIstream.good( ) ) throw MetaLogParseException( ); // Parse the bitrates parseBitrateVector( metaLogIstream, entry.bitrateVector ); if( metaLogIstream.fail( ) ) throw MetaLogParseException( ); metaLogEntryList.push_back( entry ); if( !metaLogIstream.good( ) ) break; if( metaLogIstream.get( ) != '\n' ) throw MetaLogParseException( ); metaLogIstream.peek( ); } while( metaLogIstream.good( ) ); if( metaLogEntryList.empty( ) ) throw MetaLogParseException( ); // The meta-log should not be empty // Initialize firstIndexVector and check that the sizes and indexes match std::set< unsigned char > firstIndexSet( indexSetFromMap( metaLogEntryList.front( ).lambdaModifiers ) ); if( firstIndexSet.size( ) != targetVector.size( ) ) throw MismatchedIndexesException( ); for( std::list< MetaLogEntry< std::map< unsigned char, double > > >::const_iterator i( metaLogEntryList.begin( ) ); i != metaLogEntryList.end( ); ++i ) { if( indexSetFromMap( i->lambdaModifiers ) != firstIndexSet ) throw MismatchedIndexesException( ); if( i->bitrateVector.size( ) != targetVector.size( ) ) throw MismatchedIndexesException( ); } // Initialize simplifiedMetaLogEntryList std::list< MetaLogEntry< std::vector< double > > > simplifiedMetaLogEntryList; for( std::list< MetaLogEntry< std::map< unsigned char, double > > >::const_iterator i( metaLogEntryList.begin( ) ); i != metaLogEntryList.end( ); ++i ) { simplifiedMetaLogEntryList.push_back( MetaLogEntry< std::vector< double > >( ) ); for( std::map< unsigned char, double >::const_iterator j( i->lambdaModifiers.begin( ) ); j != i->lambdaModifiers.end( ); ++j ) { simplifiedMetaLogEntryList.back( ).lambdaModifiers.push_back( j->second ); } simplifiedMetaLogEntryList.back( ).bitrateVector = i->bitrateVector; } // Run the calculations std::vector< double > resultVector( guessLambdaModifiers( initialAdjustmentParameter, targetVector, simplifiedMetaLogEntryList ) ); // Output the results std::set< unsigned char >::const_iterator indexIter( firstIndexSet.begin( ) ); std::vector< double >::const_iterator resultIter( resultVector.begin( ) ); do { if( indexIter != firstIndexSet.begin( ) ) o << " "; o << "-LM" << ( long )( *indexIter ) << " "; o.setf( std::ostream::fixed, std::ostream::floatfield ); o.precision( 7 ); o << ( *resultIter ); ++indexIter; ++resultIter; } while( indexIter != firstIndexSet.end( ) ); assert( resultIter == resultVector.end( ) ); // The index set and the result vector should be the same size }
std::pair< CombinerVariables::TypesOfChannelGeometry, std::vector< std::vector<double> > > InfinitelyDeepRectangularChannel::getInternalParameters() const { std::vector<double> doubleVector (1,channelWidth); std::vector< std::vector<double> > resultVector (1,doubleVector); return std::pair<CombinerVariables::TypesOfChannelGeometry, std::vector< std::vector<double> > >(this->typeOfChannelGeometry, resultVector); }