Kivy Rotation resize ändert position

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Ich verstehe noch nicht so ganz warum...
Warum verändert das center setzen überhaut die position?
ich setze das center der Rotation auf das Center des Rechtecks, also warum verschiebt sich da was?

Wie heißt dieses Relative umschreiben in der Mathematik?
Ich wüsste jetzt nicht wie das geht und muss das erst googlen, aber ich weiß nicht nach was?
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Schau Dir halt die Position von verschiedenen Rechtecken an.
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

aber warum verschiebt sich das überhaupt?
weil die `pos` bleibt die gleiche, das habe ich überprüft.
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

und was muss genau ausgerechnet werden?
sin, cos verstehe ich aber was meinst du mit der relativen Position der Ecke?
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Schau doch mal, welcher Punkt in Deinem Bild pos entspricht.
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Das habe ich gemacht.
ich habe eine 10x10 Pixel großes Rechteck erstellt und das auf pos gesetzt.
pos ist immer die linke untere ecke des nicht ursprünglichen, nicht rotierten Rechtecks.

ps:
was bedeutet dieser Orangene punkt der plötzlich auf dem Symbol neben der Fragenamen aufgetaucht ist? 😅
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Und wenn Du dann rotierst?
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

dann bleibt es da: https://youtu.be/A4sFf0GZPpo
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Also ich muss irgendwie herausfinden wie ich die Position verschieben muss, um die Änderung rückgängig zu machen.
aber wie? 🤔

Warum verschiebt sich das überhaupt so komisch?
wenn ich in echt, aus Pappe, Holz oder aus was auch immer ein Rechteck habe, welches man durch rauziehen vergrößern kann und ich das auf dem Tisch rotiere und es dann aufziehe und somit vergrößere, verschiebt sich das ja auch nicht :roll: ... also wo ist der sinn, dass kivy das verschiebt? 🧐
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Kivy hat einen Referenzpunkt, an dem es positioniert und einen, um den es dreht. Das musst du beim Größeändern berücksichtigen.
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Aber das ist ja genau das was ich nicht weiß wie es geht.
das ich irgendetwas berechnen muss, war mir von anfang an klar, aber ich weiß halt nicht wie und was.
das ist der grund warum ich diese Frage stelle...
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Hast du denn eine Idee, wie das gehen würde?
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Bitte 🙏
ich würde gerne weiter programmieren 🥺
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann mach Dir halt Gedanken. Ich habe alles geschrieben, was es zu dem Problem zu schreiben gibt.Ich selbst nutze kein Kivy, es wäre also ein großer Aufwand für mich, das erst zum Laufen zu bekommen, nur um Dein Problem zu lösen.
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Ich mache mir ja Gedanken und du weißt ja auch nicht was für andere Dinge ich schon gemacht habe und wie ich diese gelöst habe.
Deshalb kannst du nicht einfach behaupten, dass ich mir keine Gedanken machen würde.

mein Problem ist nicht ein wirkliches Kivy Problem, es geht nur darum, dass ich nicht verstehe wie warum sich dieses Rechteck verschiebt, weil das wie oben erwähnt in meinen Augen ein sehr komisches und unnatürliches Verhalten ist...

Du hast geschrieben Sinus/Cosinus und Relative Position zu zwei Rechtecken, damit kann ich aber leider nichts anfangen.
Ich weiß was Sinus und Cosinus ist und wie ich es verwende aber zu dieser relativen Position habe ich tbh noch nie etwas gehört...

Wenn du mir nicht helfen möchtest, finde ich das Vollkommen okay 🙂.
Du musst deine Zeit nicht verschwenden...
Benutzeravatar
Dennis89
User
Beiträge: 1154
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

hast du den Code denn selbst geschrieben? Dabei macht man sich ja die verschiedensten Gedanken und probiert einzelne Teilfunktionen aus, bis das Ergebnis stimmt. Dann würde es mich wundern, dass du keinen Ansatz findest, der dein Problem löst, bzw. den Ansatz von Sirius3 gar nicht integrieren kannst.
Wenn der Code nicht von dir ist, dann musst du in den sauren Apfel beißen und jede Zeile durchgehen bis du ihre Bedeutung im Zusammenhang mit dem restlichen Code verstanden hast.

Zum Thema Position: Man unterscheidet grundsätzlich zwischen absoluter und relativer Position. Nehmen wir ein 2-D- Koordinatensystem der Nullpunkt wird Festgelegt auf NP(0/0). Wir betrachten zwei Punkte A und B. Punkt A hat die absoluten Koordinaten A(2/2). D.h. es wird vom Nullpunkt ausgegangen. Punk B hat die absoluten Koordinaten B(3/3). Aber betrachtet man die Position von B relativ zu A dann wird B mit B(1/1) angegeben. Da der Referenzpunk nicht mehr der Nullpunkt ist, sondern A.
Wenn B an diesem Punkt bleiben soll, A sich aber verändert, dann muss die relative Position von B um die Position um die sich A verändert hat, angepasst werden.

Erkennst du in deinem Code, wo die Eckpunkte und das Zentrum positioniert werden?

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Also den Code habe ich schon selber geschrieben, ich habe nichts irgendwie kopiert oder so...
Ich habe jetzt auch noch ein bisschen rumprobiert, aber finde irgendwie keine Möglichkeit, die Position herauszufinden auf die ich das Rechteck setzen muss, bevor ich das Center neu setze... 😖

Ich habe folgende Idee, weiß aber nicht genau wie ich sie umsetzen kann:
- ich finde die Position des rotierten Rechtecks (da weiß ich nicht wie ich das anstellen soll, weil das ja rotiert ist)
- ich berechne die Differenz zwischen Rechteck und rotiertem Rechteck
- Position des Rechtecks -= zuvor berechnete Differenz

das habe ich mir so heute Ausgedacht, ob das wirklich funktioniert weiß ich nicht, aber ausprobieren kann man es ja mal 🤠
allerdings weiß ich wie gesagt nicht, wie ich Schritt 1 umsetzen kann 😕^
Benutzeravatar
Dennis89
User
Beiträge: 1154
Registriert: Freitag 11. Dezember 2020, 15:13

Dein Code:

Code: Alles auswählen

 if "w" in self.keys_pressed:
            height = min(height + step_size, 300)
            print(self.center)
            print(self.pos)
Dann siehst du ja schon, das sich bei jedem 'w' die 'pos'-Werte und 'center'-Werte ändern. Dadurch wird das Rechteck nicht an seinem Platz bleiben, wenn du die Größe änderst. Wenn du es rotierst, rotiert es ja um das Zentrum, so wie du es wolltest. Schau dir die Differenzen der Werte an und dann kannst du diese Konstant halten. Beispiel für 'center':

Code: Alles auswählen

 if "w" in self.keys_pressed:
            height = min(height + step_size, 300)
            self.center[0] -= step_size
            self.center[1] -= step_size

Wie die Differenz von 'pos' Zustande kommt, findest du bestimmt raus. Da ich den Code nicht geschrieben habe, will ich mich da jetzt nicht so tief einarbeiten, bis ich alles verstanden habe. Dafür brauche ich als nicht Programmierer zu lange.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Also,
ich habe jetzt Rahmen um die Rechtecke gemacht und mir das nochmal angeschaut.
ich verstehe jetzt woher dieses verwalten kommt...
Das nicht rotierte, unsichtbare, Rechteck ändert die Größe auch, dadurch verändert sich, verschiebt sich das Rechteck, weil sich beim verändert der Größe das Center z.B. nach oben schiebt, anstelle von schräg nach links...

Ich habe auch noch Verschiedenes ausprobiert, mir kommt aber keine Idee für eine funktionierende Formel, mit der ich die neue Position ausrechnen kann...
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo MupfSpace,
Du musst dir im klaren sein, was Du willst.
Du hast ein Rechteck mit den Positionskoordinaten. Aus diesen Elementen ergeben sich die Seiten a, b, c, d, die Diagonalen d1 und d2, den Winkel vom Nullpunkt zum Zentrum, einen Winkel, der angibt um welchen Betrag das Rechteck gekippt ist und die Zentrumskoordinaten.
Nun gibt es diese Möglichkeiten, das Rechteck zu manipulieren.
- Nach allen Seiten strecken (das Zentrum bleibt an Ort)
- Zwei gegenüberliegende Seiten strecken, die andern Seiten bleiben gleich lang (das Zentrum bleibt an Ort)
- Zwei gegenüberliegende Seiten strecken, eine Seite bleibt gleich und an Ort (Das Zentrum wandert)
- Nach allen Seiten strecken, eine Ecke bleibt an Ort (das Zentrum wandert)
- Manipuliertes Rechteck über eine Ecke kippen (das Zentrum wandert)
- Manipuliertes Rechteck im Zentrum drehen (das Zentrum bleibt an Ort)

Jetzt kannst Du Funktionen für diese Möglichkeiten schreiben und je nach Situation aufrufen.
Ich würde die Berechnungen mit komplexen Zahlen durchführen, nicht mit kivy.
Gruss Peter
Antworten