Matroids Matheplanet Forum Index
Moderiert von matroid Gockel
Matheplanet » Bug- und Request-Tracker » Unerwartetes Verhalten der fill2-Funktion in fedgeo
Autor
Universität/Hochschule J Unerwartetes Verhalten der fill2-Funktion in fedgeo
rlk
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.03.2007
Mitteilungen: 11120
Wohnort: Wien
  Themenstart: 2021-09-04

Hallo Matroid, in dem Beispiel funktioniert das Füllen des rechten Bereichs nicht, weil die Koordinaten in \sourceon fedgeo fill2(15,3,00FF00) \sourceoff ganzzahlig sind. Der Punkt, aber nicht der gewünschte Bereich zwischen dem Graph und der x-Achse wird eingefärbt. Wenn man die Koordinaten leicht verändert, funktioniert das Füllen, wie man im linken Teil des Plots sehen kann. \geo konstante(xmax,23) ebene(500,500) x(0,20) y(-2,17) konstante(w,100*3.141/1000) plot(16*abs(sin(w*x))) fill2(5.5,3.5,F2d4e6) fill2(15,3,00FF00) \geooff geoprint(,Fülltest) Ich denke, das ein entsprechender Hinweis in der fedgeo-Hilfe nützlich wäre. Servus, Roland


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2714
  Beitrag No.1, eingetragen 2021-09-04

Ein Hinweis kann nie schaden, aber ist das nicht genau das zu erwartende Verhalten? Die Doku zu fill2 sagt: Mit Farbe 'farbe' wird ausgehend von (x,y) das größte zusammenhängende Gebiet gefärbt, das die gleiche Farbe wie (x,y) hat. Also wird, wenn du (x,y) auf einen grauen Rasterpunkt legst, eben dieser graue Rasterpunkt gefärbt. \geo ebene(100,100) x(0,4) y(0,4) fill2(2,2,FF0000) \geooff geoprint() Genauso werden auch die Achsen gefärbt, wenn man (x,y) dort hinlegt. \geo ebene(100,100) x(0,4) y(0,4) fill2(0,0,FF0000) \geooff geoprint() --zippy


   Profil
rlk
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.03.2007
Mitteilungen: 11120
Wohnort: Wien
  Beitrag No.2, vom Themenstarter, eingetragen 2021-09-05

Hallo zippy, ja im Nachhinein ist das Verhalten nicht so unerwartet. Mit der von mir verwendeten Pastellfarbe hatte ich aber den eingefärbten Rasterpunkt übersehen und mich gewundert, warum nicht gefüllt wurde. Servus, Roland


   Profil
matroid
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 12.03.2001
Mitteilungen: 14386
Wohnort: Solingen
  Beitrag No.3, eingetragen 2021-09-06

Hi rlk, das Verhalten ist auch aus meiner Sicht in Ordnung. Was ich aber als Problem daraus entnehme: Man hat eine Konstruktion mit einigen definierten Punkten. Diese liegen oft auf dem Rand. Um nun eine Färbung eines Inneren zu bewirken, benötigt man einen weiteren Punkt, der im Inneren und nicht auf einem Gitterpunkt liegt. Diesen Punkt muss man erst konstruieren (oder gezielt passende Koordinaten angeben. Das ist kein intuitives Verhalten. Ich könnte eine fill3-Variante der Funktion anbieten, die dann ... Ja, wie kann man die Aufgabe für einen Algorithmus beschreiben? Mir fällt gerade nichts ein. Dein Vorschlag, einen Hinweis in der Dokumentation aufzunehmen, habe ich so umgesetzt: "Weiterer Hinweis: Sollte der Punkt (x,y) zufällig ein Gitter- oder Achsenpunkt oder ein Punkt auf einer Berandung eines Gebiets sein, so kommt es mit fill2 zu einer Färbung des Gitterpunkts oder der Achsen oder der Berandung, denn nur diese haben dann die gleiche Farbe wie (x,y). Um mit fill2 das Innere eines Gebiets zu färben, muss der Punkt wirklich im Inneren liegen und nicht auf einer Achse oder einem markierten Gitterpunkt." Gruß Matroid


   Profil
rlk
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.03.2007
Mitteilungen: 11120
Wohnort: Wien
  Beitrag No.4, vom Themenstarter, eingetragen 2021-09-06

Hallo matroid, danke, der Hinweis in der Dokumentation sollte ähnliche Überraschungen vermeiden. Eine fill3-Funktion müsste ja das Innere des zu färbenden Bereichs finden. Ich habe noch einen Tippfehler in der Dokumentation gefunden: in "Primaere Konstruktoren für Punkte" steht "gerades Kreus (+)". Servus, Roland


   Profil
tactac
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 15.10.2014
Mitteilungen: 2197
  Beitrag No.5, eingetragen 2021-09-06

Eine (noch nicht ganz so tolle) Idee für fill3 als mögliche Diskussionsgrundlage: \sourceon C-like void fill3(x,y,color) { (fcolor, count) = fill2'(x,y,color); if(count < ENOUGH_PIXELS) { fill2(x,y,fcolor); fill2(x,y,color); } } \sourceoff fill2' bewirkt im Bild dasselbe wie fill2, zählt aber nebenbei die gefüllten Pixel und erstellt ein Histogramm der umgebenden Randfarben. Zurückgegeben wird die am häufigsten am Rand angetroffene Farbe sowie die Anzahl der gefüllten Pixel. Ergebnis wäre (bei ENOUGH_PIXELS>5), dass in dem Bild aus #0 die rechte Hälfte grün gefüllt wäre (und ein graues + verschwunden! 😁)


   Profil
rlk hat die Antworten auf ihre/seine Frage gesehen.
rlk hat selbst das Ok-Häkchen gesetzt.

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]