C++ Rotation 2d Koordinatensystem Problem

03/09/2013 22:42 Jopsi332#1
Habe ein Problem,

ich will ein punkt um einen anderen punkt(mittelpunkt(83|83)) drehen.
Code:
							    int xWert = m_pWndCustom[y]->rect.left+25;//mittelpunkt des kastens
								int yWert = m_pWndCustom[y]->rect.top+25;//mittelpunkt des kastens
								double beta = fRadan[0];//fRadan = ständig raufzählender wert von 0 - 2*PI für durchgehende umdrehung
								int x  = (int)((xWert - 83 ) * cos( beta ) - (yWert - 83 ) * sin( beta ) + 83 );
								int y2 = (int)((yWert - 83 ) * cos( beta ) + (xWert - 83 ) * sin( beta ) + 83 );

mein Problem ist, das der Abstand zum mittelpunkt bei jeder rotation noch passt, aber es rotiert nicht an einem stück sondern ist ungleichmäßig und sehrschnell an verschiedenen orten im koordinaten system, und nicht gleichmäßig im kreis rotierend.

Wer ein Video zum Problem will soll das hier schreiben.
03/09/2013 22:46 qkuh#2
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

x,y - Drehpunkt
x0,y0 - Zentrum
phi - Drehwinkel

Am besten zeichnest du das mal auf ein Blatt Papier, rechnest den neuen Punkt aus, zeichnest ihn ein und dann weißt du, ob die Formel passt :)
03/09/2013 23:01 Jopsi332#3
Quote:
Originally Posted by qkuh View Post
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

x,y - Drehpunkt
x0,y0 - Zentrum
phi - Drehwinkel

Am besten zeichnest du das mal auf ein Blatt Papier, rechnest den neuen Punkt aus, zeichnest ihn ein und dann weißt du, ob die Formel passt :)

leider passt die formel auch nicht, da mein punkt immer noch wild durch die gegen fliegt, und sich nicht zum Radianten dreht.


Code:
 int xWert = m_pWndCustom[y]->rect.left+25;
	int yWert = m_pWndCustom[y]->rect.top+25;
	double beta = fRadan[1];
	int x = (int)(83 + (xWert - 83)*cos(beta) - (yWert - 83) * sin(beta));
	int y2 = (int)(83 + (xWert - 83)*sin(beta) + (yWert - 83) * cos(beta));
03/09/2013 23:48 qkuh#4
Was setzt du denn für beta ein? PS: 90° im Uhrzeigersinn = -90°, also -pi/2
03/09/2013 23:53 Jopsi332#5
Quote:
Originally Posted by qkuh View Post
Was setzt du denn für beta ein? PS: 90° im Uhrzeigersinn = -90°, also -pi/2
mein radianten ( womit ich auch die hinter grund texturen drehe mittels directx und 2drotation )

also es soll sich immer 1/6tel drehen, dann kurze pause, dann wieder 1/6tel usw.

also wäre fRadan[1]
bei der ersten umdrehung 0 - 1.04....
also setze keine grad sondern mein Radianten ein.
03/10/2013 15:13 xNopex#6
Gleichmäßig in der Zeit rotierend heißt, dass der Quotient aus Winkel/Zeit konstant bleibt. Deine Update-Zeit zum Zeichnen ist nicht konstant, d.h. du musst den Winkel dementsprechend anpassen. Ich hab' noch ein älteres Java Applet gefunden, wo ich auch eine gleichmäßige Rotation in der Zeit ausprobiert habe, vllt hilfts dir was:

03/10/2013 23:43 Jopsi332#7
Quote:
Originally Posted by xNopex View Post
Gleichmäßig in der Zeit rotierend heißt, dass der Quotient aus Winkel/Zeit konstant bleibt. Deine Update-Zeit zum Zeichnen ist nicht konstant, d.h. du musst den Winkel dementsprechend anpassen. Ich hab' noch ein älteres Java Applet gefunden, wo ich auch eine gleichmäßige Rotation in der Zeit ausprobiert habe, vllt hilfts dir was:

jap das mit dem winkel ist mir auch im nachhinein bewusst geworden das der konstant bleiben muss, trotzdem danke