string StarWrapperBase::getInfoString(const Navigator *nav) const { const Vec3d j2000_pos = getObsJ2000Pos(nav); double dec_j2000, ra_j2000; rect_to_sphe(&ra_j2000,&dec_j2000,j2000_pos); const Vec3d equatorial_pos = nav->j2000_to_earth_equ(j2000_pos); double dec_equ, ra_equ; rect_to_sphe(&ra_equ,&dec_equ,equatorial_pos); stringstream oss; oss.setf(ios::fixed, ios::floatfield); oss.precision(2); oss << "Magnitude: " << get_mag(nav) << " B-V: " << getBV() << endl; oss << "J2000" << " " << "RA/DE: " << Utility::printAngleHMS(ra_j2000,true) << " / " << Utility::printAngleDMS(dec_j2000,true) << endl; oss << "Equ of date" << " " << "RA/DE: " << Utility::printAngleHMS(ra_equ) << " / " << Utility::printAngleDMS(dec_equ) << endl; // calculate alt az double az,alt; rect_to_sphe(&az,&alt,nav->earth_equ_to_local(equatorial_pos)); az = 3*M_PI - az; // N is zero, E is 90 degrees if(az > M_PI*2) az -= M_PI*2; oss << "Alt/Az: " << Utility::printAngleDMS(alt) << " / " << Utility::printAngleDMS(az) << endl; return oss.str(); }
/** * CCoin::gravitate * @date Modified May 15, 2006 */ bool CCoin::gravitate(void) { // if it isn't active it needs to try and gravitate to the player if (!isActive()) { if (m_fGravDist < FLT_MAX) { if (m_poPlayer == NULL) { // kill the coin if it's trying to go to a player that doesn't exist CObjectManager::getInstance().removeObject((CObject*)this); return false; } // store the elapsed time float fElapsedTime; // update at 60fps if(!m_oTimer.tick(&fElapsedTime)) return false; D3DXVECTOR3 vPlayerPos = ((CPlayer*)(m_poPlayer))->getPickupSphere().centerPt; setPosition(D3DXVECTOR3( vPlayerPos.x + (m_fGravDist * cos(m_fAngle)), vPlayerPos.y, vPlayerPos.z + (m_fGravDist * sin(m_fAngle)))); (m_fAngle < 0.0f) ? m_fAngle -= 5.0f * fElapsedTime : m_fAngle += 5.0f * fElapsedTime; setBV(getPosition(), getBV().fRadius); m_fGravDist -= 50.0f * fElapsedTime; return false; } else { // all this see if the closest player is close enough for his gravity to effect this coin float fDist = FLT_MAX, fShortest = FLT_MAX; CObjectManager::ObjectList loPlayers; CObjectManager::getInstance().getObjects(OBJ_PLAYER, &loPlayers); CObjectManager::ObjectList::iterator oPlayerIter = loPlayers.begin(); while (oPlayerIter != loPlayers.end()) { fDist = computeDistanceSquared(((CActor*)(*oPlayerIter))->getPosition(), getPosition()); if (fDist > MAX_PLAYER_GRAV_DIST) { oPlayerIter++; continue; } if (fDist < fShortest) { fShortest = fDist; m_poPlayer = ((CActor*)(*oPlayerIter)); } oPlayerIter++; } if (m_poPlayer == NULL) return false; // set the values for circling m_fGravDist = fastSqrtf(fShortest); // get the initial angle D3DXVECTOR3 vPlayerToCoin; D3DXVec3Subtract(&vPlayerToCoin, &getPosition(), &m_poPlayer->getPosition()); D3DXVec3Normalize(NULL, &vPlayerToCoin, &vPlayerToCoin); // calculate the initial angle m_fAngle = D3DXVec3Dot(&vPlayerToCoin, &D3DXVECTOR3(1.0f,0.0f,0.0f)); m_fAngle = acos(m_fAngle); // positive or negative if (D3DXVec3Dot(&vPlayerToCoin, &D3DXVECTOR3(0.0f,0.0f,1.0f)) < 0.0f) m_fAngle *= -1.0f; } return false; } return true; }
QString StarWrapperBase::getInfoString(const StelCore *core, const InfoStringGroup& flags) const { QString str; QTextStream oss(&str); if (flags&Magnitude) { oss << q_("Magnitude: <b>%1</b> (B-V: %2)").arg(QString::number(getVMagnitude(core, false), 'f', 2), QString::number(getBV(), 'f', 2)) << "<br>"; if (core->getSkyDrawer()->getFlagHasAtmosphere()) { oss << q_("Apparent Magnitude: <b>%1</b> (by extinction)").arg(QString::number(getVMagnitude(core, true), 'f', 2)) << "<br>"; } } oss << getPositionInfoString(core, flags); StelObject::postProcessInfoString(str, flags); return str; }