|
Autor |
Unerwartetes Verhalten der fill2-Funktion in fedgeo |
|
rlk
Senior  Dabei seit: 16.03.2007 Mitteilungen: 11574
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  Dabei seit: 24.10.2018 Mitteilungen: 4407
 | 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  Dabei seit: 16.03.2007 Mitteilungen: 11574
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  Dabei seit: 12.03.2001 Mitteilungen: 14533
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  Dabei seit: 16.03.2007 Mitteilungen: 11574
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  Dabei seit: 15.10.2014 Mitteilungen: 2711
 | 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. |
|
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 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]
|