Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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 ;)

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

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. ;)

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.

[...] ((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

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.