Sinus i Kosinus 90 stopni

0

http://img526.imageshack.us/img526/2439/73142885.jpg oto siatka

tworzę ją tak:

__fastcall TGridBuilderDisplay::TGridBuilderDisplay(float CELL_SIZE, float size,float heading, float glop)
{
         pointi = -1;
   gridmodel = new TachoGLModel;
   use = false;
   TStringList * s = new TStringList();

 			int x,y;
	this->CELL_SIZE = CELL_SIZE;
	this->size 		= size;

for (x = 0; x < CELL_SIZE; x++) {
for (y = 0; y < CELL_SIZE; y++) {
	  s->Add("begin(gl_quads);");

	  s->Add("glVertex3f("+POINT_TO_BGLCMD(  triplesingletoT3DPOINTA(x*size,y*size,0.0)						)+");");
		  s->Add("glVertex3f("+POINT_TO_BGLCMD(  triplesingletoT3DPOINTA(x*size,(y+1)*size,0.0)						)+");");
			  s->Add("glVertex3f("+POINT_TO_BGLCMD(  triplesingletoT3DPOINTA((1+x)*size,(y+1)*size,0.0)						)+");");
				  s->Add("glVertex3f("+POINT_TO_BGLCMD(  triplesingletoT3DPOINTA((1+x)*size,y*size,0.0)						)+");");
	  s->Add("end;");
}
}

 gridmodel->LoadFromBGLCMD(s);
  gridmodel->CalcCenterPoint();
			 gridmodel->RotateModel(2,90.0f);
                gridmodel->CalcCenterPoint();
  gridmodel->CalculateMinMax();
  gridmodel->CalcFaceCenterPoint();

   delete s;
}

i obracam o 90 stopni

co powinno mi dac ładna pozioma wzgledem osi XZ siatke a widze ukośna siatke (pod kątem zamiast idealnei pozioma)

http://img338.imageshack.us/img338/6065/95565288.jpg

z kolei obracam tak:

void __fastcall TachoGLModel::RotateModel(int dimension, float angle)
{

int i;

t3dpoint p,addme;

for (i = 0; i < VBO_V.Length; i++) {
		  p = vectors_add(VBO_V[i], reverse_point(CENTER_POINT));    //punkt przeniesiony na srodek bryly
		
				   addme = CENTER_POINT;
		   if (dimension == 0) { //XZ
		   addme.y = 0.0f;
VBO_V[i].x = cos(angle*imopi)*p.x - sin(angle*imopi)*p.z;
VBO_V[i].z = sin(angle*imopi)*p.x + cos(angle*imopi)*p.z;
		   }

		   if (dimension == 1) { //XY
		   addme.z = 0.0f;
VBO_V[i].x = cos(angle*imopi)*p.x - sin(angle*imopi)*p.y;
VBO_V[i].y = sin(angle*imopi)*p.x + cos(angle*imopi)*p.y;
		   }

		   if (dimension == 2) { //ZY
		   addme.x = 0.0f;
VBO_V[i].z = cos(angle*imopi)*p.z - sin(angle*imopi)*p.y;
VBO_V[i].y = sin(angle*imopi)*p.z + cos(angle*imopi)*p.y;
		   }

VBO_V[i] = vectors_add(VBO_V[i],addme);                         //dodaj aby to byla poprawna pozycja

}

}

co jest źle :(

0

Pierwszy obrazek jest ok :)

0

ja się nie znam za bardzo co robisz więc możesz mnie zignorować ale ostatnio miałem z podobnym czymś problem podaj kont w radianach czyli PI/2 czyli 90 stopni bo jak podasz komuterowi obróć o 90 stopni to nie obróci o idealne 1 jak to wynikia z sin 90 ;)

0
Gelldur napisał(a)

kont w radianach

:-D

0

Funkcje trygonometryczne operują tylko na radianach. Podając wartość 90, obrót jest o 90 radianów, czyli około 5156,62 stopni, co po redukcji daje 116,62 stopnie. :)

0

@rincewind, trochę uprościłeś. Istnieją dwie różne funkcje sin: jedna jest funkcją liczb, i to o niej mówią na analizie, druga jest funkcją kąta (figury geometrycznej). Związek miedzy nimi jest taki
sin(kąt beta) = sin(wielkość kąta beta wyrażona w radianach).

0

ale ja mam tam Sin( 90.0f * (PI / 180.0f));

0

@bogdans -- to był skrót myślowy. Miało być: Funkcje trygonometryczne w C++ operują tylko na radianach. ;)

0
  1. tagi <cpp></cpp>.
  2. formatowanie kodu: obecnie jest tragiczne.
  3. nie ten dział - raczej C++, bo ja tu nietuzinkowości zupełnie nie wiedzę.
  4. wygląda mi na to, że używasz jakiegoś wrappera na open GL (lub samego open GL) - jeśli tak, to z tego co wiem o open GL (a jest tego niewiele) to nie powinno się wykonywać obrotów w ten sposób, należy raczej zdefiniować macierz transformacji i zastosować ją na całym modelu.
0
rincewind napisał(a)

Funkcje trygonometryczne operują tylko na radianach. Podając wartość 90, obrót jest o 90 radianów, czyli około 5156,62 stopni, co po redukcji daje 116,62 stopnie. :)

...w przeciwieństwie do OGL, którego funkcje rotacji operują w stopniach :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1