Rechtecke drehen



  • HI ich bin Schüler und muss für ein spiel ein rechteck drehen können.
    Könnt ihr bitte langsam und verständlich das erklären ware super.
    Ferner sollt ich dieses Rechteck an einer funktion laufen lassen (vergleivh auto fährt über berge)

    Mfg Christi



  • aha und wie hast du das rechteck gezeichnet ? normalerweise ist das ja nicht schwer, willst du das auf einen schlag machen oder schrittweise ?



  • solls ne animation sein? als wenn bspw., ein button drückst, soll sich das rechteck mit ne best. Geschwindigkeit drehen ??



  • ok also:
    bei mir soll ein auto über eine linie fahren, ich mach es per timer. Das Rechteck (auto) soll bei dieser "bergstrasse" sich natürlich auch neigen, d.h. ich muss es ja schrittweise machen. das Rechteck hab ich mal per Tshap gezeichnet, bin jedoch auch da für bessere vorschläge offen. nun möchte ich wissen wie ich dieses rechteck um beispielsweise 45 grad drehe.
    Danke schonmal
    mfg christi



  • hmm sollte in Klasse 10 eines Gymnasiums(oder 11) besprochen werden 😉



  • matrix ?? affine transformation??



  • Kann mir jetz jemand helfen, zu evils info ich bin 12. klasse TG und bin in IT wir hatten es noch NICHT.
    also kann mire einer den befehl oder so geben? im normalen c++

    Mfg Christi



  • In "normalen" C++ gibt es keine Grafikunterstützung.

    Wenn ich das recht verstanden habe passt das am ehesten zum Builder(Borland) oder in die Spileprogramierung

    /EDIT/
    Wenn du's mit VCL machen willst C++Builder, für openGL/DirectX in die Spieleprogramierung



  • Also ich hab den C++Builder.
    Nun hat jemand einen Vorschlag wie ich es ganz einfach machen kann?



  • wei sieht den den das quatrat aus?? 4 linen? oder Solide (gefüllt)??

    normalerweise müsste du das quatatz als Matrix aus pixel sehen, welch du mit affine transforamtionen (rotationsmatrix) drehen kannst...



  • also ich hab es mir so gedacht:
    ich nehme ein rechteck und die koordinaten davon (wie das geht weiß ich auch nicht), wenn ich dann beispielsweise auf einen button klick dreht sich das rechteck um 10 grad.
    wie das nun gehen sol weiß ich au net.
    mfg



  • Aus meiner Delphi-Zeit (Da hatte ich diese TShapes) fällt mir dazu ein: Eckpunkte neu berechnen -> neu Zeichnen.

    Dürfte mit etwas Trigonometrie kein allzugroßes Problem sein.

    Kann TShapes matrizen? wäre mir neu

    /EDIT/
    Alternativ natürlich über Matrizen uä dann brauchst du aber warscheinlich openGL oä



  • Ich weiss zwar nich wie das nun in C++ läuft aber in meiner Delphi zeit hab ich das mit nem Canvas gezeichnet und per Pytagoras die Strecke berechnet. Dann ne while-Schleife zählen lassen, wodrin ich die Pixel immer entsprechend der Linie geändert habe.



  • Pille456 schrieb:

    Ich weiss zwar nich wie das nun in C++ läuft aber in meiner Delphi zeit hab ich das mit nem Canvas gezeichnet und per Pytagoras die Strecke berechnet. Dann ne while-Schleife zählen lassen, wodrin ich die Pixel immer entsprechend der Linie geändert habe.

    Noch jemand mit Delphi-Vergangenheit 🙂

    Sollte auf diese Weise gehen, ich weiß nur gerade nicht mehr so genau was der unterschied zwischen Canvas und Shape war. (Canvas ist vll das Element der GUI-Elemente, auf des Gezeichnet werden kann und Shape explizit um irgendwelche Bilder zu zeichnen?)



  • nimmst die eckpkte deines rechteckts:

    ( breite/2  |  höhe/2 )
    (-breite/2  |  höhe/2 )
    ( breite/2  | -höhe/2 )
    (-breite/2  | -höhe/2 )
    

    multiplizierst die mit der rotationsmatrix, und addierst noch n positionsvektor druf:

    /  cos a   sin a \
    (x'|y')=(x | y) * |                  |  + (xAutoPos | yAutoPos)
                       \ -sin a   cos a /
    

    dann kriegste die transformierten eckpunkte. Verbinde die einfach mit linien, für die anwendung wirds wohl ausreichen...

    [mein beileid: das macht man tatsächlich erst in der 13. (echt ZUM KOTZEN) aber was solls, dafür gibts in der schule ja so geile fächer wie ethik und geschichte 😡 ] (jez nix gegen Christi, reg mich nur über das #Ä@e schulsystem auf 😞 )

    Wenn du's nicht um den mittelpunkt drehen willst, dann guck doch einfach in deinem mathebuch (analytische geometrie/lineare algebra, sowas in die richtung...) unter "affinen abbildungen" nach, da wirds bestimmt n paar beispiele gebn 👍

    edit:
    *bin selber gerade mit der schule fertiggeworden, hab jetzt das recht mich aufzuregen, kann eh keiner mehr was machn 😃

    edit2:

    Alternativ natürlich über Matrizen uä dann brauchst du aber warscheinlich openGL oä

    openGL? n bissl overkill für so ne aufgabe, für matrizen braucht man multiplikationen und additionen und <math.h> für sin cos...
    Der spruch mit "10 types of people" ist geil 👍



  • zu deiner beruhigung sei gesagt: ich hab in der schule nicht gelernt was eine matrix ist...

    außerdem denke ich, dass eine matrix die um einen bestimmten winkel rotiert hier nicht viel bringen wird. es soll sich ja entlang eines funktionsgraphen bewegen.
    wie genau soll das dann aussehen? soll das rechteck tangential zum graphen sein!?



  • soll das rechteck tangential zum graphen sein!?

    das hab ich angenommen, wo würde denn sonst das problem liegen?
    Falls es jetzt nicht ausreicht, dass das rechteck den graphen in einem punkt berührt, und stattdessen das "rollen auf zwei rädern" (bzw zwei ecken) simuliert werden muss, wird die ganze sache schon um einiges komplizierter, dann muss man jedes mal den graphen mit einem kreis schneiden lassen, um zunächst mal zu schauen, wo das zweite rad überhaupt sein soll, und erst dann berechnen, wie stark das fahrzeug zu neigen ist. Um die drehung kommt man aber in beiden fällen nicht herum.



  • das hab ich angenommen, wo würde denn sonst das problem liegen?

    ich auch, wie genau das dann aussehen soll wurde noch nicht so wirklich beschrieben...

    aber genau dann ist die drehung um einen winkel nur ein umweg.

    wenn ich die schnittpunkte mit dem graphen hab, oder eben den berührpunkt und die tangente (1.ableitung), dann hab ich sofort mal eine seite des rechteckes.
    so, jetzt brauch ich mir nur den "normalvektor" davon bestimmen (steigungsdreick umdrehen) und kann alle punkte die ich brauch berechnen. jetzt noch die punkte verbinden und fertig. ganz ohne den lahmen sin und cos und arctan...



  • mkay, zugegebn, hab mich n bissl falsch ausgedrückt (<math.h> braucht man in der tat nicht für sin cos, sondern nur für sqrtf)... 🙄

    die berechnung von dem eigentlichen winkel wäre wirklich extrem umständlich und rechenintensiv (arctan, danach cos sin usw.)
    Diese berechnung ist zum glück gar nich notwendig, denn die cosinus und sinuswerte, die man in die matrix einsetzen muss, lassen sich wunderbar direkt aus der steigung bestimmen (hier ausnahmsweise deutsche begriffe, für bessere verständnis):

    float hypothenuseDesSteigungsdreiecks=sqrtf(steigung*steigung+1.0f)
    //Kosinus=ankathete durch hypothenuse
    float cosAlpha=1.0f/hypothenuseDesSteigungsdreiecks; 
    //Sinus=gegenkathete durch hypothenuse
    float sinAlpha=steigung/hypothenuseDesSteigungsdreiecks;
    

    einmal wurzelziehen müsstest du sowieso, dot, um die länge deines normalvektors zu normieren.



  • einmal wurzelziehen müsstest du sowieso, dot, um die länge deines normalvektors zu normieren.

    wenn ich mir vorher das verhältnis von höhe und breite des rechteckes ausrechne, muss ich das nicht 😃


Anmelden zum Antworten