• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Zone beim Betreten vergrößern

docfred

Geocacher
Hallo miteinander,
hat schon mal jemand darüber nachgedacht eine Zone bei Betreten zu vergrößern und beim Verlassen wieder zu verkleinern? Man hätte dann so eine Art Hysterese. Das würde verhindern, dass man an der Zonengrenze entlang eiert und mal drin, mal draußen ist.

docfred
 

jonny65

Geomaster
Ja hatten wir doch hier schon mal, eine kleine sichtbare in einer großen unsichtbaren Zone, die sichtbar wird, sobald man die kleine betritt. Die kann man dann wieder abschalten. Items sollten dann halt richtig liegen. Beim Verlassen braucht man ja nicht reagieren bzw. wie immer, wenn Task erfüllt dann halt Zone abschalten. Außer der Spieler muss nochmal zurück, dann eben revers, beim Verlassen inaktiv und die kleine Zone wieder anschalten. Sowas einzubauen schadet eigentlich nie und sorgt für Stabilität. Oft kommt doch ein Spieler in die Zone, ist grad so am Rand und klickt dann rum. Plötzlich is das Item weg. Das würde nicht sein, wenn es in der großen soeben aktivierten Zone liegt.
 

bodenseepingu

Geomaster
....ich würde nicht mit 2 Zonen hantieren um eine Zoneninflation und ggf. Probleme mit der Anzahl der aktiven Zonen zu vermeiden, sondern mit einer...ansonsten ist das mit LUA überhaupt kein Problem - man kann ohne Probleme eine LUA-Funktion schreiben, die dann die Zone vergrössert.

Ich würde das folgendermaßen machen
  • Punktzone verwenden, bei OnProximity eine LUA-Funktion resize_zone(zone_object, radius) aufrufen und alles andere machen, was man bei OnEnter machen würde (da man durch die vergrösserte Zone ja drin ist und drin bleibt)
  • resize_zone: deaktivieren der Zone, setzen der neuen Punkte - z.B. 8-Eck, 6-Eck oder 4-Eck, aktivieren der Zone
  • On-Exit: alles machen, was man bei Verlassen der Zone tun will
Stolperfallen: ich könnte mir vorstellen, dass auf manchen Geräten der OnProximity-Event mehrfach aufgerufen wird - z.b. auch bei resize_zone, entsprechende Erfahrungen hab ich auf Android gemacht, während ein Garmin friedlich blieb - daher den OnProximity-Event absichern mit einer Variable, dass hier nur einmal aufgerufen wird - die Variable kann man bei OnExit zurücksetzen.

Verbesserungspotential:


Evtl. könnte man mit etwas Aufwand und Mathematik beliebig geformte Zonen verwenden inklusive OnEnter-Event und einfach die gesetzten Punkte ermitteln und vergrössern - sollte nicht allzu schwierig sein - die Vorgehensweise hierzu, die ich wählen würde:
  • Ermitteln der "Mittelpunktskoordinate" - z.B. Mittelung der Nord- und Ost-Werte der Zonenpunkte
  • Zone deaktivieren
  • Für jeden Zonenpunkt:
    • Distanz und Winkel zur Mittelpunktskoordinate ermitteln
    • Distanz um gewünschten Wert (z.B. 5Meter) erhöhen und Punkte neu setzen
  • Zone aktivieren

Auf diese Art und Weise müsste die Zone auch wieder auf die ursprüngliche Größe reduziert werden können durch Angabe einer negativen Distanz...
Widerum: Aufpassen, ggf. könnten Events doppelt gefeuert werden.
 

bodenseepingu

Geomaster
Hier eine Beispielcartridge, die das mit LUA erledigt
http://www.das-wherigo-handbuch.de/index.php?title=Beispiele/Codeschnipsel_in_LUA

Ach ja - nicht so sauber geht das bei konkaven Zonen - die sind aber sowieso für einen Player aufwändig zu berechnen und sollten möglichst vermieden werden..

Da das Verkleinern nicht sauber funktioniert hat, habe ich im Script einfach beim Vergrößern die vorherigen Punkte in der Zone gespeichert und verwende diese wieder - daher hat der negative Wert size beim Verkleinern keine Bedeutung mehr - hauptsache negativ, das bedeutet verkleinern...

Im Script ist jetzt zone.OriginalPoint verwendet, Urwigo setzt diese, es ist mir aber unklar, wohin dieser Punkt gesetzt wird - ggf. kann auch die ausgeklammerte Mittelwert-Funktion verwendet werden, die sollte für konvexe Zonen sauber funktionieren.

Begriffsdefinition - heute wird in der Schule folgendes gelehrt:
Ist das Mädchen brav, ist der Bauch konkav, hat das Mädchen Sex, ist der Bauch konvex...
 
Oben