rotate drehpunkt verstellen (QGraphicsItem)

Alles rund um die Programmierung mit Qt
Antworten
thomasgruebler
Beiträge: 8
Registriert: 9. Mai 2007 20:36
Kontaktdaten:

rotate drehpunkt verstellen (QGraphicsItem)

Beitrag von thomasgruebler »

Hallo,

ich programmiere an einem Simulationsprogramm für autonome Roboter.
Der Roboter ist ein svg. Das sollte gedreht werden in kurven etc. wenn ich jezzt rotate(45) reinschreibe, dreht der genau um die linke obere ecke um 45°. und ich möchte den drehpunkt aber gerne in der mitte bzw verstellbar einmal bei dem reifen, dann bei dem andern.

derzeit sieht meine funktion die vom timer aufgerunfen wird andauernd so aus:

Code: Alles auswählen

void Robot::timerEvent ( QTimerEvent * )
{
    alpha += angle;

    xpos += ::cos( gradtorad( alpha ) ) * speed;
    ypos += ::sin( gradtorad( alpha ) ) * speed;

    rotate ( angle );
    setPos ( xpos, ypos );


    update();

//Reset angle variable
    angle = 0;
}
gelernt hab ich das aus dem colliding mice example von trolltech.

lg
Thomas
www.gruebler.at

Ich benutze:
*QT4
*Linux
*GCC
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

translate(-pos)
rotate(angle)
translate(pos)
thomasgruebler
Beiträge: 8
Registriert: 9. Mai 2007 20:36
Kontaktdaten:

Beitrag von thomasgruebler »

upsala hat geschrieben:translate(-pos)
rotate(angle)
translate(pos)
danke. habs mal so nachgemacht:

Code: Alles auswählen

    alpha += angle;
    translate ( -xpos, -ypos );
    xpos += ::cos( gradtorad( alpha ) ) * speed;
    ypos += ::sin( gradtorad( alpha ) ) * speed;

    rotate ( angle );
    setPos ( xpos, ypos );
alpha ist außerdem der derzeitige winkel und angle der drehwinkel. xpos/ypos sind die derzeitigen koordinaten und nicht eine verschiebung.

doch es funktioniert nicht.

außerdem muss ich den drehpunkt auf jedem punkt der achse (es gibt anfangs nur eine achse in der mitte und hinten vorne stützräder). denn machmal ist ein rad schneller als das andere oder so.
www.gruebler.at

Ich benutze:
*QT4
*Linux
*GCC
thomasgruebler
Beiträge: 8
Registriert: 9. Mai 2007 20:36
Kontaktdaten:

Beitrag von thomasgruebler »

Hab jetzt rausgefunden was du meinst.

das translate mit dem halben with/height. nur derzeit weis ich nicht wie ich die einstellen kann.
es gibt nur auslesen und scale. gehts nicht einfacher?

lg
Thomas
www.gruebler.at

Ich benutze:
*QT4
*Linux
*GCC
thomasgruebler
Beiträge: 8
Registriert: 9. Mai 2007 20:36
Kontaktdaten:

Beitrag von thomasgruebler »

hallo.

jetzt mach ichs mal so:

Code: Alles auswählen

    setPos ( (xpos + boundingRect().width()/2),
              (ypos + boundingRect().height()/2) );
    xpos += ::cos( gradtorad( alpha ) ) * speed;
    ypos += ::sin( gradtorad( alpha ) ) * speed;

    rotate ( angle );
    setPos ( xpos, ypos );

//angle...drehwinkel
//alpha...derzeitiger winkel
//xpos/ypos.....derzeitige position. ich brauch die werte später.
nur es will nicht :(

es passiert wieder dasselbe. es dreht um den linken oberen punkt.

bitte helft mir

lg
Thomas
www.gruebler.at

Ich benutze:
*QT4
*Linux
*GCC
Antworten