//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(); }
//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() ); }
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; } } }