You are not logged in.

Käptain AHOI

Steuermann

  • "Käptain AHOI" started this thread

Posts: 160

Date of registration: Jun 1st 2008

  • Send private message

1

Sunday, December 27th 2009, 9:16pm

Polarkoordinationssystem in ANNO 1404

Kennt sich jemand mit Polarkoordinationen aus ?
Ich möchte gerne die Worldmap in Anno 1404 auch so "zeichnen" wie im Spiel.
Dazu müssen aber bestimmte x/y Koordinaten um 45° verschoben werden.

Weiss jemand wie man den Radius einer entfernten Koordinate zum Mittelpunkt berrechnet und die Koordinaten um 45° verschieben kann ?
Es gibt zahlreiche Hilfen im Internet, aber ich kapiere nur wenig davon..

Beispiel : Die Worldmap ist 1664x1664 Pixel groß.
Im Savegame ist Insel 1 auf x/y = 648/824 ...

Wie lautet nun die Formel um die Position auf 45° zu drehen ?
x = x + cos(45) - y=y+sin(45) ist ja falsch


Zum Hintergrund : ANNO-AHOI wertet Spieldaten aus. Dazu wird auch die Inselwelt aus dem Savegame dargestellt. Leider sind die Pos-Daten im Savegame aber um 45° verdreht.

Larnak

Schatzjäger

Posts: 3,157

Date of registration: Feb 28th 2008

  • Send private message

2

Sunday, December 27th 2009, 9:58pm

Vorweg:
Alle Angaben ohne Gewähr, Rechen- und Denkfehler vorbehalten :P
Ich hab' schließlich frei.

Du musst ja zuerst mal deine normalen Koordinaten P=(648/824) in Polarkoordinaten umwandeln.

Du kannst dir zwischen diesem Punkt, einer der Achsen und dem Ursprung ein Dreieck denken, mit dem du den Winkel errechnen kannst.
Hiermit kannst du die Entfernung des Punktes vom Ursprung ausrechnen:
|P|=sqrt(648^2+824^2)
Um nun genau den Punkt zu bekommen, brauchst du noch den Winkel, den du dir aus einem Dreieck errechnen kannst, dessen Hypothenuse durch P und den Ursprung verläuft und das eine Seite auf einer der Achsen hat.
also z.B.
a=arctan(648/824)

Der Ortsvektor deines Punktes ist also
P=|P|*cos(a)+|P|*sin(a)

Das musst du jetzt um 45° drehen, wäre demnach
P'=|P|*cos(a+45°)+|P|*sin(a+45°)

Achte darauf, dass dein Programm richtig rechnet und die Winkel auch als Gradmaß und nicht als Bogenmaß begreift - oder rechne alles ins Bogenmaß um. So müsste es aber eigentlich funktionieren :scratch:

Allerdings musst du daran denken, dass sich der Ausschnitt dabei nicht nur dreht, sondern auch verschiebt, weil z.B. Punkte, die bisher genau senkrecht über dem Ursprung waren (90°) nun weiter verschoben werden auf 135°, was dann in den 3. Quadranten des Koordinatensystems hineinreicht.

So, ich hoffe ich habe jetzt nicht allzu viel Blödsinn geschrieben in meiner Weihnachtsmüdigkeit und wünsche dir viel Erfolg :up
Probiers einfach mal aus, grob stimmts auf jeden Fall, könnte aber sein, dass da irgendwo im Detail noch was nicht stimmt. Ich weiß auch nicht genau, wie Anno da rechnet, wenn z.B. (0|0) im Mittelpunkt der Karte liegt, gibt es keine Verschiebung - dafür hast du dann negative Werte in den Positionsangaben und musst bei der Winkelerrechnung aufpassen, dass du noch jeweils bestimmte Werte hinzu addierst, um deinen Kreiswinkel richtig zu errechnen.

This post has been edited 2 times, last edit by "Larnak" (Dec 27th 2009, 10:00pm)


Käptain AHOI

Steuermann

  • "Käptain AHOI" started this thread

Posts: 160

Date of registration: Jun 1st 2008

  • Send private message

3

Monday, December 28th 2009, 6:50am

Da hat jemand in der Schule aufgepasst :up: - Danke soweit vorab.

Leider führt dieser Weg noch nicht zu meinem gewünschten Ziel.
Am Ende benötige ich ja eine neue x/y Position

Ich habe das mal grafisch dargestellt (siehe Anhang)
Rechts die Formeln , oben das Ergebnis aus dieser Formeln

Was mache ich falsch ? (der blaue Punkt ist die "echte" x/y Position)
Käptain AHOI has attached the following image:
  • polarkoorinaten.png

Larnak

Schatzjäger

Posts: 3,157

Date of registration: Feb 28th 2008

  • Send private message

4

Monday, December 28th 2009, 12:46pm

Öh, ich komm gerade nicht dahinter, was dieser grüne Kringel zu bedeuten hat... :scratch:

Ich rechne das mal nach, wenn ich Zeit habe, momentan ists leider schlecht. Vielleicht heute Abend.

edit:
Aha, ich glaub ich komm dahinter. Es macht nur irgendwie keinen Sinn :scratch:

This post has been edited 1 times, last edit by "Larnak" (Dec 28th 2009, 12:52pm)


Käptain AHOI

Steuermann

  • "Käptain AHOI" started this thread

Posts: 160

Date of registration: Jun 1st 2008

  • Send private message

5

Monday, December 28th 2009, 1:23pm

?? Der "grüne Kringel" ist der "virtuelle Kreis" dessen Mittelpunkt die Mitte der Worldmap ist ... und dessen Radius zu den jeweiligen Inselpostitionen reicht (hier ist jetzt nur eine Insel, aber es kann ja bis zu 127 geben).
Die Berechnung muss doch von der Inselmitte aus kalkuliert werden ?

..oder mache ich da einen Denkfehler ? :guggug:

Larnak

Schatzjäger

Posts: 3,157

Date of registration: Feb 28th 2008

  • Send private message

6

Monday, December 28th 2009, 2:47pm

:scratch:

Du möchtest doch die ganze Inselwelt "drehen", oder nicht? Was nützt es dir dann, wenn du vom Mittelpunkt irgendeiner Insel ausgehst?
Wenn du die Koordinaten der Inseln weiterdrehen willst, musst du vom Ursprung der Inselwelt ausgehen und der ist entweder ganz im Südwesten oder direkt in der Mitte.

Oder ich habe einfach nicht verstanden, was du vorhast...

Zur Grafik:
Was ist denn "P"? Wenn "P" der blaue Ursprungspunkt in polar sein soll, kann da was nicht stimmen - der polare Punkt muss mit dem kartesischen Punkt übereinstimmen, sonst ist bei der Umrechnung was schief gelaufen.
Und Pneu soll der verschobene Punkt sein? Und nach welchem Maßstab hast du die 45° dort angesetzt? Wo kommt das Dreieck her? Und was stellt der rote Punkt dar, an dem du die 45° eingezeichnet hast?
:keineahnung:

This post has been edited 1 times, last edit by "Larnak" (Dec 28th 2009, 2:50pm)


Käptain AHOI

Steuermann

  • "Käptain AHOI" started this thread

Posts: 160

Date of registration: Jun 1st 2008

  • Send private message

7

Monday, December 28th 2009, 5:19pm

die ganze Inselwelt drehen ist ja nicht schwer ....
Leider kann ich aber keine "ganze" Grafik zusammenstellen und dann einfach drehen.

Ich muss auf einem Meer die Inseln positionieren, und habe dazu die Koordinaten im Savegame.

Der Ursprung IST in der Mitte ! (1. roter Punkt)

Das erste P ist der "mittig gerechnete" original Koordinationspunkt (zweiter roter Punkt) .

P[neu] ist der "erwartete" neue Punkt. (dritter roter Punkt)

Der blaue Punkt ist nur für mein Verständnis, da dieser die "original Koordinate" ist.

Somit gehe ich davon aus, daß der Punkt P mit seinem Radius von der Mitte aus um 45° berechnet werden muss, und somit auf P[neu] liegen muss/sollte.

Entschuldigung, wenn ich nicht die geläufigen Begriffe verwende, ich hätte nicht gedacht, daß ich mich nach der Schule nochmal mit sowas beschäftigen muss .. (Also liebe Schüler, passt schön auf .... Mathematik BRAUCHT man im Leben ;-) )

Excalibur3

R.I.P treuer Freund

Posts: 2,721

Date of registration: Mar 29th 2004

  • Send private message

8

Monday, December 28th 2009, 5:52pm

. . . hmm,

ich denke eher, daß die Position einer Insel nicht die Inselmitte ist sondern oben Links z.B. - also jeweils die erste Koordinate. Da, die Mitte einer Insel festzulegen schwieriger sein dürfte als oben links die ersten Koordinaten.

Das muß nicht richtig sein - so denke ich mir das aber . . .

Käptain AHOI

Steuermann

  • "Käptain AHOI" started this thread

Posts: 160

Date of registration: Jun 1st 2008

  • Send private message

9

Monday, December 28th 2009, 7:49pm

Die Position EINER Insel ist nicht die Mitte, sondern oben links, richtig (blauer Punkt). Für die Berechnung ist jedoch die Mitte wichtig.

Siehe Anhänge:

(screenshot0005b.jpg) <--- so sind sieht die Worldmap im Savegame (respektive ANNO-AHOI) aus.


(screenshot0005c.jpg) <---- uns so soll es aussehen. Alles ist aus der Mitte heraus um 45° gedreht.
Käptain AHOI has attached the following images:
  • screenshot0005b.jpg
  • screenshot0005c.jpg

Legofan

Meereskenner

Posts: 694

Date of registration: May 5th 2009

  • Send private message

10

Monday, December 28th 2009, 8:14pm

Im Map-Editor für 1701 ist die Karte (mit den einzelnen Inseln) auch um 45° gedreht. Vllt. bringt dich das weiter, da müsste die Technik zum drehen der Koordinaten ja auch verwendet werden, da die Karte im Anno ja um 45° gedreht ist.
  aka Legofan :P

Käptain AHOI

Steuermann

  • "Käptain AHOI" started this thread

Posts: 160

Date of registration: Jun 1st 2008

  • Send private message

11

Monday, December 28th 2009, 8:22pm

jaaa... mit ANNO 1701 war ich (damals) auch mit den Ergebnissen zufrieden ... doch dann kam ANNO 1404 und die haben gemerkt daß es sinnvoller ist die Karte nicht als Raute darzustellen ... helfen tut mir diese Tatsache leider nicht... :aua:

Larnak

Schatzjäger

Posts: 3,157

Date of registration: Feb 28th 2008

  • Send private message

12

Tuesday, December 29th 2009, 12:30am

Alle Angaben ohne Gewähr, Rechen- und Denkfehler vorbehalten :P

Nochmal zur Klarstellung (es ist ja nicht so, dass ich jeden Tag Koordinaten von Inseln errechne...)

Da die Koordinaten im Save dir nur eine ecke liefern, rechnest du diese Koordinaten auf die Inselmitte um, ja? Das ist, wenn ich das richtig sehe, für das Dreh-Problem erstmal nicht wichtig, wir wollen ja erstmal nur einzelne Koordinaten ins Karussell setzen.

Und deine Zeichnung ist dann nur ein Beispiel was mit der konkreten Rechnung nichts zu tun hat.

Gut, dann rechne ich mal nach, was wir da raus bekommen :baby:

x=648
y=824

|P|=1048

Winkel:
alpha=arcsin(824/1048 )=0,9

Nun müssen wir noch 45° oben drauf setzen, also pi/4.

also ist der Winkel, den wir wollen dann 0,9+pi/4=1,68

Rechnen wir wieder die Koordinaten aus:
x=|P|*cos(1,68 )=-114
y=|P|*sin(1,68 )=1041

Fertig, macht Sinn und passt. In deiner Rechnung müsste irgendwo noch ein Würmchen hocken.

PS: Wer hatte eigentlich die blöde Idee,

Source code

1
8)
zu einem Smiley zu machen... :maeh:

This post has been edited 4 times, last edit by "Larnak" (Dec 29th 2009, 12:32am)


Käptain AHOI

Steuermann

  • "Käptain AHOI" started this thread

Posts: 160

Date of registration: Jun 1st 2008

  • Send private message

13

Tuesday, December 29th 2009, 7:02am

ok .. soweit so gut ( Danke nochmals )

aber was mache ich mit negativen Ergebnissen ?
von der Inselmitte abziehen (1664/2 - x ) ?

Larnak

Schatzjäger

Posts: 3,157

Date of registration: Feb 28th 2008

  • Send private message

14

Tuesday, December 29th 2009, 1:11pm

Gar nichts, einfach einzeichnen lassen :D (Wie auch immer du das machst :P)

Die Insel liegt jetzt eben nicht mehr rechts, sondern links vom Ursprung.

Wenn du sagst, der Ursprung der Inselwelt sozusagen sei in der Mitte, musst du aber bei der Winkelberechnung aufpassen bei Inseln, die von vornherein schon negative Koordinaten haben.
Der Winkel muss immer gegen den Uhrzeigersinn von der rechtsseitigen x-Achse aus gemessen werden, du musst also aufpassen, welchen Winkel du berechnest und gegebenenfalls noch den Rest dazuaddieren, damit die Umrechnung am Ende wieder stimmt.

Und was soll 1664/2 bedeuten :scratch:

This post has been edited 2 times, last edit by "Larnak" (Dec 29th 2009, 1:17pm)