//Imprime os nos da arvore.
void Horizontal(NoRN* raiz, int nivel) {
    int l = nivel;

    if (raiz == NULL) {
		while (l--) printf("\t");
		printf("NULL(1)\n");
		return;
	}

    Horizontal(raiz->filho_dir, nivel + 1);
    while (l--) printf("\t");
    printf(" %d(%d)\n", raiz->valor, raiz->cor);
    Horizontal(raiz->filho_esq, nivel + 1);
}
//Mostra uma arvore, juntamente do fator de balanceamento da mesma
void MostrarArvore(ArvoreRN arvore) 
{
//	system("clear || cls");
	printf("-------------Arvore Rubro-Negra-------------\n\n");
	printf("Obs: Cada no vem acompanhado de sua cor dentro de uma tupla.\n0 -> Vermelho\n1 -> Preto\n\n");
	printf("Se o numero de nos pretos por caminho for 0, entao a arvore se encontra desbalanceada.\n\n");
	printf("Numero de nos Pretos por caminho: %d\n",ContaNosPretos(arvore.raiz, 0));
	Horizontal(arvore.raiz, 0);
	fflush(stdin);
	getchar();
}
Exemplo n.º 3
0
//Calls the calculation functions, and compares them for the largest.
unsigned long long Largest(std::vector<std::vector<int>> grid ){
    int gwidth = grid[0].size();
    int glength = grid.size();
    unsigned long long largest = 0;

    for(int a = 0; a < gwidth; ++a){
        for(int b = 0; b < glength; ++b){
            largest = std::max(largest,Horizontal(a,b,grid));
            largest = std::max(largest,Vertical(a,b,grid));
            largest = std::max(largest,ForDiag(a,b,grid));
            largest = std::max(largest,BackDiag(a,b,grid));

        }
    }
    return largest;
}
Horizontal 
EquatorialToHorizontal( const Equatorial & equatorial,
                        Angle localSiderealTime, Angle geographicLatitude )
{
    Angle hourAngle = localSiderealTime - equatorial.RightAscension();
    double sinHA = hourAngle.Sin( );
    double cosHA = hourAngle.Cos( );
    double sinDec = equatorial.Declination().Sin( );
    double cosDec = equatorial.Declination().Cos( );
    double tanDec = (cosDec == 0.)  ?  infinity  :  sinDec / cosDec;
    double sinLat = geographicLatitude.Sin( );
    double cosLat = geographicLatitude.Cos( );
    Angle az = ArcTan( sinHA,  cosHA * sinLat  -  tanDec * cosLat );
    az += Angle( M_PI );
    az.NormalizePositive( );
    Angle alt = ArcSin( sinDec * sinLat  +  cosHA * cosDec * cosLat );
    return Horizontal( az, alt, equatorial.Distance() );
}
Exemplo n.º 5
0
void TwoAxisValuatorModule::ModuleProcessSlider(InputManager::VirtualInputId SliderId, double MovedAmount)
{
	if (IsButtonPressed(0))
	{
		if (0 != m_Slide.GetSelectedObjectId())
		{
			Wm5::Vector3d ToObject = m_Slide.GetSelectedObject().GetPosition() - Wm5::Vector3d(camera.x, camera.y, camera.z); ToObject.Normalize();

			Wm5::Vector3d Horizontal(Wm5::Vector3d::ZERO), Vertical(Wm5::Vector3d::ZERO);
			Horizontal.X() += Wm5::Mathd::Cos(camera.rh * Wm5::Mathd::DEG_TO_RAD);
			Horizontal.Y() += -Wm5::Mathd::Sin(camera.rh * Wm5::Mathd::DEG_TO_RAD);
			Vertical.X() += Wm5::Mathd::Sin(camera.rh * Wm5::Mathd::DEG_TO_RAD) * Wm5::Mathd::Sin(camera.rv * Wm5::Mathd::DEG_TO_RAD);
			Vertical.Y() += Wm5::Mathd::Cos(camera.rh * Wm5::Mathd::DEG_TO_RAD) * Wm5::Mathd::Sin(camera.rv * Wm5::Mathd::DEG_TO_RAD);
			Vertical.Z() += -Wm5::Mathd::Cos(camera.rv * Wm5::Mathd::DEG_TO_RAD);

			Horizontal = Vertical.Cross(ToObject);
			Vertical = ToObject.Cross(Horizontal);

			if (0 == SliderId)
			{
				Wm5::Quaterniond RotateBy = Wm5::Quaterniond(Vertical, -0.008 * MovedAmount);
				m_Slide.GetSelectedObject().ModifyRotation() = RotateBy * m_Slide.GetSelectedObject().ModifyRotation();		// RotateBy first gives us rotations around global axes; RotateBy second gives us rotations around local axes
				m_Slide.GetSelectedObject().ModifyRotation().Normalize();
			}
			else if (1 == SliderId)
			{
				Wm5::Quaterniond RotateBy = Wm5::Quaterniond(Horizontal, -0.008 * MovedAmount);
				m_Slide.GetSelectedObject().ModifyRotation() = RotateBy * m_Slide.GetSelectedObject().ModifyRotation();		// RotateBy first gives us rotations around global axes; RotateBy second gives us rotations around local axes
				m_Slide.GetSelectedObject().ModifyRotation().Normalize();
			}
			else if (2 == SliderId)
			{
				Wm5::Vector3d ToObject = m_Slide.GetSelectedObject().GetPosition() - Wm5::Vector3d(camera.x, camera.y, camera.z); ToObject.Normalize();
				Wm5::Quaterniond RotateBy = Wm5::Quaterniond(ToObject, 0.10 * MovedAmount);
				m_Slide.GetSelectedObject().ModifyRotation() = RotateBy * m_Slide.GetSelectedObject().ModifyRotation();		// RotateBy first gives us rotations around global axes; RotateBy second gives us rotations around local axes
				m_Slide.GetSelectedObject().ModifyRotation().Normalize();
			}

			m_Slide.m_ModelRotatedByUser = true;
		}
	}
}