Plagiator

Aus KaroWiki
Version vom 29. Mai 2024, 14:31 Uhr von Ultimate (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „''Plagiator'' ist ein von {{Benutzer|ultimate}} geschriebener Kartengenerator. Seit dem <tbd> ist er in Karopapier eingebunden. Der Generator ist kein "normal…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Plagiator ist ein von ultimate geschriebener Kartengenerator. Seit dem <tbd> ist er in Karopapier eingebunden.

Der Generator ist kein "normaler" Generator in dem Sinne, dass er eine Strecke "aus dem Nichts" erzeugt. Stattdessen erzeugt er Karten durch "Plagiieren", d.h. Transformieren und leichtes Verändern, existierender Karten. Zur Verfügung stehen die Transformationen Skalierung (unabhängig in X- und Y-Richtung, einschließlich Spiegeln) sowie Rotation. Zu den leichten Veränderungen zählen Start und Ziel tauschen und Trimmen. Bei einer Skalierung kann zudem zwischen zwei Algorithmen gewählt werden.

Funktionsweise

Der Plagiator arbeitet nach der folgenden Funktionsweise:

  1. Laden des Karten-Codes aus der Karodatenbank
  2. (optional) Tauschen von Start und Ziel
  3. Erzeugen einer 3x3 Transformations-Matrix aus den Parametern Größe X, Größe Y und Rotation
  4. Kompensation des ggf. durch Rotation entstehenden Offsets
  5. Berechnung der Inversen Matrix
  6. Karoweise transformation der Karte anhand des entsprechenden Skalierungsalgorithmus
  7. (optional) Trimmen der Karte

Parameter

Plagiator kann durch folgende Parameter beeinflusst werden:

  • Karte - MID der zu plagiierenden/transformierenden Karte. Hinweis: aus offensichtlichen Gründen können keine Nachtkarten transformiert werden.
  • Größe X & Größe Y - Skalierungsfaktor in der jeweiligen Richtung; Faktoren mit |scale| > 1 vergrößern die Karte; Faktoren mit |scale| < 1 verkleinern sie; negativen Faktoren spiegeln die Karte entlang der entsprechenden Achse; 0 ist nicht erlaubt
  • Rotation - Drehung der Karte im Uhrzeigersinn in Grad; es sind beliebige Winkel zulässig, für die bessere Bedienbarkeit sind im Frontend jedoch Winkel die Vielfache von 45° sind mit Tickmarks leichter anwählbar
  • Skalierungsmodus - zur Auswahl stehen zwei Modi: ultimate und nearestneighbor. Details dazu unter Skalierungsalgorithmen
  • Start und Ziel tauschen - ist dieses Flag gesetzt werden alle Startfelder durch Zielfelder ausgetauscht und umgekehrt. Hinweis: dadurch ändert sich ggf. die Anzahl der Startplätze
  • Trimmen - normalerweise werden Eckbereiche, die bei der Rotation entstehend durch fortsetzen des Geländes aufgefüllt. Möchte man dies nicht, kann man die Karte trimmen lassen. Die Karte wird dann soweit verkleinert, dass nur noch ein 1-Karo-breiter, nicht-befahrbarer Rand um die Strecke übrig bleibt (ggf. kann dies auch Karten ohne Rotation kleiner machen, wenn diese mehr Rand haben)

Skalierungsalgorithmen

Die Herausforderung beim Skalieren von Karten besteht darin sicherzustellen, dass das Ergebnis einerseits optisch ansprechend, aber trotzdem auch spannend zu fahren ist. Dazu habe ich (ultimate) ein bisschen rumprobiert und zwei unterschiedliche Algorithmen implementiert, die man enstprechend auswählen kann:

nearestneighbor

ultimate

Trivia

  • der Plagiator arbeitet 100% deterministisch, d.h. es ist kein Zufall im Spiel und bei gleichen Parameter kommt auch immer das gleiche Ergebnis raus
  • aufgrund des deterministischen Verhaltens können mit dem Plagiator keine Nachtkarten erzeugt werden (man könnte sonst schummeln). Um dennoch zufällige (Nacht)-Karten fahren zu können,
  • es kann sein, dass bestimmte Parameterkombinationen zu nicht fahrbaren Karten führen - Ursachen für nicht fahrbare Karten können sein:
    • Verkleinerung oder Rotation macht Strecke unpassierbar (ggf. abhängig vom Skalierungsalgorithmus)
    • Tausch von Start und Ziel macht Route für einige Spieler unpassierbar (z.B. weil es dekorative Ziele gibt, die dann zu nicht fahrbaren Starts führen)

Beispielkarten

Original Plagiat Beschreibung
500px 500px Zugbereich: von=96, Breite: von=bis=1