danvan Geschrieben 20. April 2010 Teilen Geschrieben 20. April 2010 Hallo, Es geht um folgendes: Angenommen ich lasse von Java einen Funktionsgraphen zeichnen und möchte die Fläche unter dem Graphen einfärben (d.h. zwischen dem graphen und der x-achse). Wie macht man das am besten? Soll man ein GeneralPath-Objekt erstellen und es den Graphen nachzeichnen lassen, dann am ende einen geraden strich runter zur Abszisse, strich links, und dann verbinden s.d. daraus eine Fläche wird? Oder gibt es angenehmere Verfahren dafür? LG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 20. April 2010 Teilen Geschrieben 20. April 2010 Angenommen ich lasse von Java einen Funktionsgraphen zeichnen und möchte die Fläche unter dem Graphen einfärben (d.h. zwischen dem graphen und der x-achse). Wie macht man das am besten? Ich verweise auf JFreeChart Das Färben eines beliebigen Graphen ist durchaus nicht trivial. Ich denke die Basis wird ein FloodFill- oder SpanFloodFill-Algorithmus sein, wobei man je nach Struktur des Graphen durchaus auf Probleme stoßen kann. Ich denke hier müsste man konkret aufgrund der mathematischen Funktion schauen, wie das Verhalten ist Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
danvan Geschrieben 20. April 2010 Autor Teilen Geschrieben 20. April 2010 danke für die antwort. Hatte das aber nur allgemein angefragt. Dass es JFreeChart gibt, weiß ich. Ich wollte nur fragen, wie man allgemein Flächen einfärbt, die keine Shapes sind. Also, das mit dem Mathegraphen war nur ein Beispiel. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
speedi Geschrieben 21. April 2010 Teilen Geschrieben 21. April 2010 Da fallen mir mehrere Sachen ein. Entweder zu zeichnest bei jeden Pixel, den du auf der x-Achse nach vorn gehst eine Linie nach unten oder du arbeitest mit ((Graphics)g).drawPolygon(...). Da kannst dann den Startpunkt des Diagrammsegments, den Endpunkt und dann natürlich die Drunterliegenden Punkte auf der x-Achse angeben. So hab ich solche Dinge bis jetzt meistens gemacht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 21. April 2010 Teilen Geschrieben 21. April 2010 [...] ((Graphics)g).drawPolygon(...) Das Problem bei Polygonen oder von Dir genannten Linien-Methode ist, dass es eine gewisse "Gutartigkeit" des Graphen voraussetzt bzw. sich auch nur um eine Anzahl an überschaubaren Punkten handelt. Wenn man sehr viele Datenpunkte hat oder der Graph z.B. unstetig ist bzw die die Zeta-Funktion ist eine einfache Approximation mittels Polygonzug nicht mehr optisch schön glatt. Problematisch wird es, wenn Du z.B. kein karthesisches Koordinatensystem hast oder den Graphen in R^3 plotten willst und ihn dann entsprechend färben möchtest. Was ich konkret verwenden würde, würde ich von der Problemstellung abhängig machen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
speedi Geschrieben 21. April 2010 Teilen Geschrieben 21. April 2010 Was ich konkret verwenden würde, würde ich von der Problemstellung abhängig machen Klar. Die von mir gennanten Varianten funktionieren nur bei Funktionsgraphen (jede X-Coordinate wird nur einmal vom Graphen "befahren"). DrawPolygon macht wirklich nicht immer das was man will... Da gibts schnell mal "komische Effekte". Kann man aber für Graphen mit raltiv wenigen zu verbindenden Punkten durchaus machen. Die Methode mit drawLine nach unten hat bei mir bislang immer gefunzt. Zuletzt hab ich die bei einem Höhendiagramm verwendet mit zig 1000 Punkten von denen natürlich nur ein bruchteil gezeichnet werden konnte. War schon flott genug. Wenn man weniger Punkte hat oder die Punkte mehrere X-Pixel auseinander liegen muss man sich die punkte dazwischen halt interpolieren, das ist aber auch recht einfache Mathematik. Ich hab bislang meist mit linearen Projektionen gearbeitet und mit der drawLine-Methode. War eigentlich recht simpel und hat mich auch bei dem Höhendiagramm nicht im Stich gelassen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.