Laden...

[gelöst] Koordinaten im Mittelpunkt eines Fensters sollen 0,0 sein, wie?

Erstellt von Trekki1990 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.009 Views
Trekki1990 Themenstarter:in
503 Beiträge seit 2008
vor 14 Jahren
[gelöst] Koordinaten im Mittelpunkt eines Fensters sollen 0,0 sein, wie?

Hallo liebe Community!

Es gibt ja die Funktion Mouse.X und Mouse.Y
Die gibt mir aber nur die absolute Position auf dem Bildschirm.

Ich weiß nicht wie ich das umrechnen muss, dass die Mitte meines Fensters
immer 0,0 ist. Vielleicht hat der ein oder andere schon einen Algorithmus dazu.

Ich hoffe ihr könnt mir ein paar Tips geben, ich kann mir schlecht so Koordinaten vorstellen.

Vielen Dank schonmal.

Gruß Trekki

K
62 Beiträge seit 2009
vor 14 Jahren

Also aus dem Stehgreif würde ich die Koordinaten erstmal in Fensterkoordinaten umrechnen und sie dann relativ zur Mitte des Fensters betrachten.


// Fensterkoordinaten
int nX = MousePosition.X - Left;
int nY = MousePosition.Y - Top;

// Umgerechnete Koordinaten
int centerX = nX - (Width / 2);
int centerY = (Height / 2) - nY;

So ungefähr könnte das aussehen (allerdings bezieht sich dann der Mittelpunkt auf das gesamte Fenster inklusive Rahmen)

916 Beiträge seit 2008
vor 14 Jahren

Das umrechnen ist doch nicht schwer! Ein paar Mathe Grundrechenarten und fertig.

Daher wenn du ein Punkt hast Bsp. (30, 40) und du willst den (0,0) Punkt in den Mittelpunkt schieben und wissen wo der (30, 40) jetzt liegt musst du doch nur


Point p = new Point(30 - this.Width / 2, 40 - this.Heigth / 2);

schreiben. War das wirklich so schwer oder hab ich dich einfach nur falsch verstanden?

Again what learned...

Trekki1990 Themenstarter:in
503 Beiträge seit 2008
vor 14 Jahren

Danke Kileak! Werde das mal probieren.
Hat mich auf jeden Fall weitergebracht ^^

@rollerfreak2

Also ich habe ein Fenster sagen wir mal 1024x768
Im Mittpunkt ist der Pixel 0,0
Obere Linke Ecke ist der Pixel -512, 384
Untere Linke Ecke ist der Pixel -512, -384
Obere Rechte Ecke ist der Pixel 512, 384
Untere Rechte Ecke ist der Pixel 512, -384

So siehts aus. Ich muss dann dazu die Koordinaten der Maus liefern.

916 Beiträge seit 2008
vor 14 Jahren

@Trekki1990

Was willst du mir damit sagen?

Also Obere linke eckte muss doch doppelt negativ sein, -512, -384 oder seh ich da was falsch?

Again what learned...

Trekki1990 Themenstarter:in
503 Beiträge seit 2008
vor 14 Jahren

Die Idee mit dem Bild hatte ich auch schon .... ^^

916 Beiträge seit 2008
vor 14 Jahren

Dann hast du das aber meiner Meinung nach falsch beschrieben. Du hast ein Koordinatensystem das bei 0,0 nach oben wächst. Wenn du aber einen Punkt verschiebst, so wie du das erklärt hast, dann ist der obere linke Punkt im Ordinate sowie Abzisse negativ, oder hab ich da einen Denkfehler drin...

Again what learned...

Trekki1990 Themenstarter:in
503 Beiträge seit 2008
vor 14 Jahren

Ich weiß auch nicht so genau was nun was ist... 🤔
Beschäftige mich nicht so oft mit Koordinaten dem ganzen Zeug.

Wichtig ist jedenfalls, es funktioniert dank Kileak ^^

K
62 Beiträge seit 2009
vor 14 Jahren

Ihr redet da wohl auch nur etwas aneinander vorbei 😉

Wie das Koordinatensystem aufgebaut ist, ist reine Definitionssache, und Trekki wollte wohl ein nach oben wachsendes System.

// Fensterkoordinaten
int nX = MousePosition.X - Left;
int nY = MousePosition.Y - Top;

Dadurch werden die Koordinaten so umgerechnet, dass die obere linke Ecke des Fensters 0/0 ist und nach unten hin wächst.

Das kann aber wenn wie hier benötigt, in Y-Richtung einfach umgedreht werden, und schon wächst das Koordinatensystem nach oben.

// Umgerechnete Koordinaten
int centerX = nX - (Width / 2);
int centerY = (Height / 2) - nY;

// oder vielleicht verständlicher
int centerY = (nY-Height/2) * (-1);

916 Beiträge seit 2008
vor 14 Jahren

Das ist mir schon klar das ein Koordinatensystem wie man es aus dem Matheunterricht kennt in Abzissenrichtung nach oben wächst. Aber wenn man den Mittelpunkt von oben Links in die Mitte verlagert, dann ist es nun mal so wie ich beschrieben habe.

Again what learned...