Obracanie wierzchołków


(Marcinch7) #1

Mam w tablicy 4 wierzchołki tworzące prostokąt. Chciałbym je obrócić o ileś stopni/radianów względem siebie. Próbowałem coś takiego:

float tx1,ty1,tx2,ty2;

		float sint,cost;

		if(vscale==0) vscale=hscale;


		tx1=-hotX*hscale;

		ty1=-hotY*vscale;

		tx2=(bWidth-hotX)*hscale;

		ty2=(-bHeight-hotY)*vscale;


		if(rot!=0)

		{

			cost=cosf(rot*PI/180);

			sint=sinf(rot*PI/180);


			pVertices[0].x=tx1*cost-ty1*sint+x;

			pVertices[0].y=tx1*sint+ty1*cost+y;

			pVertices[1].x=tx2*cost-ty1*sint+x;

			pVertices[1].y=tx2*sint+ty1*cost+y;	


			pVertices[2].x=tx2*cost-ty2*sint+x;

			pVertices[2].y=tx2*sint+ty2*cost+y;	

			pVertices[3].x=tx1*cost-ty2*sint+x;

			pVertices[3].y=tx1*sint+ty2*cost+y;	

		}

		else

		{

			pVertices[0].x=tx1+x;pVertices[0].y=ty1+y;

			pVertices[1].x=tx2+x;pVertices[1].y=ty1+y;

			pVertices[2].x=tx2+x;pVertices[2].y=ty2+y;

			pVertices[3].x=tx1+x;pVertices[3].y=ty2+y;

		}

Gdzie rot to wartość rotacji w stopniach, a hotX i hotY to środek prostokąta.

Niby działa, ale wszystkie wierzchołki obracają się względem jakiegoś punktu POZA prostokątem, a chciałbym aby obracały się względem jego środka.


(Koniar1) #2

Czy środek prostokąta jest też środkiem układu współrzędnych? Jeśli nie to tu może być problem


(Marcinch7) #3

Wydaje mi się że NIE JEST.


([alex]) #4
  1. Nie zbyt rozumiem jak 4 wierzchołki mogą tworzyć trójkąt? Albo 3 wierzchołki albo czworokąt.

  2. Jeżeli mówisz o obrocie o jakiś tam stopień to musisz wskazać środek obrotu.


(Koniar1) #5

Zatem albo wskażesz pkt wg którego prostokąt będzie obracany albo tak zadeklarujesz współrzędne, że środek prostokąta będzie w początku układu współrzędnych


([alex]) #6

koniar1 , nie koniecznie przecież zawszę można punkt przenieść do innego układu współrzędnych (tak aby się obracać wg środka - proste odejmowanie) po czym obrócić i następnie przenieść z powrotem (proste dodawanie).