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();
}
Example #2
0
/**
* 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;
}
Example #3
0
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;
}