Skip to content

ChristopherOehring/wtv20-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Wissenschaftlich Technische Visualisierung SS 2020

Ergebnisse von Christopher Oehring

Dieses Projekt befindet sich auf GitHub unter https://github.com/ChristopherOehring/wtv20-java

Generelle Anmerkungen:

Im nächsten Punkt gibt es eine Übersicht über alle Aufgaben und inwiefern sie implementiert sind. Außerdem gibt es im Packet demo zu einigen Aufgaben eine kleine Demoklasse, die die jeweiligen funktionalitäten demonstriert.

Demos Starten
Es gibt zwei Möglichkeiten die Demos zu starten:

  1. Das Project in eine IDE wie IntelliJ oder Eclipse importieren und anschließend den DemoRunner per IDE starten.
  2. Das projekt per Git clonen oder herunterladen und entpacken. In einer commandozeile in das Projekt hinein navigieren, und folgenden Befehl ausführen: java -jar .\out\artifacts\wtv20_java_jar\wtv20-java.jar

Hinweis: für diesen Befehl wird eine Installation von Java 8 oder höher benötigt.

Weitere Informationen zu den jeweiligen Demos befinden sich unten in der Übersicht.

Allgemeine Wertung:
Im Allgemeinen hätte der Code deutlich übersichtlicher sein können.
Alleine, dass ich static methoden statt Objektorientierung verwendet habe hat es deutlich kompliziertert gemacht neue features hinzuzufuegen und könnte im nachhinein auch noch zu Problemen führen, wenn z.B. die Einstellungen im SVGConverter plötzlich unerwartet von einer anderen Methode geändert werden. Eine Objektorientierte Lösung wie in Anton Wetzels C# projekt aus dem Wiki hätte deutlich mehr sinn gemacht.

Es ist zwar nicht alles dokumentiert, aber die Dokumentation ist meiner Meinung nach ausreichend. Es ist vielleicht suboptimal, dass die Sprache zwischen deutsch und Englisch wechselt.

Die Grundfunktionalitäten wie das Generieren von IsoLinien auf verschiedenen Wegen funktionieren eigentlich ziemlich gut.
Das Generieren visualisieren von Pfaden ist nicht so gut erkennbar, funktioniert aber grundsätzlich.

Insgesamt habe ich das Programm nicht systematisch getestet. Von daher gibt es wahrscheinlich noch einige versteckte fehler.

Ergebnisse anhand der Übungsaufgaben:

Übungsblatt 1

Aufgabe 2:

A)

Implementiert mit Zusatz 1,2,3 und teilweise 4

Diese Aufgabe wurde in der CSVReader Klasse in der Methode dateiLesen2D gelöst. Die Methode ist nicht sehr kompliziert und daher gut lesbar.

Demo: Eine Datei wird eingelesen und in der Konsole ausgegeben. B)

Implementiert

Die erste Lösung dieser Aufgabe wurde zum Lösen anderer Aufgaben weiter modifiziert. Die Dreiecke können nun mit der triangles Methode in Isolinien generiert, und mit der objCreateTriangles Methode im ObjConverter geschrieben werden.

Demo: Zur Ausgabe wird eine Datei mit demselben Namen und der Endung .obj erstellt oder überschrieben.

Übungsblatt 2

Aufgabe 1:

A,B)

Implementiert

Die entsprechenden Möglichkeiten aus B sind in der Klasse Interpolation implementiert.

Demo: Auf die in A) vorgeschlagenen parameter werden nacheinander die verschiedenen Möglichkeiten aufgerufen.

Aufgabe 2:

Demo:
Zu dieser Aufgabe gibt es eine gemeinsame Demo.
Als Ausgabe werden Dateien mit demselben Namen und den Endungen .eps und .svg erstellt oder überschrieben.

A)

Implementiert
Das Auslesen der Daten erfolgt über die CSVReader Klasse in der Methode dateiLesen2D (wie bereits in 1a demonstriert). Außerdem kann mit der Methode arrayToSegments eine Liste von LineSegments generiert werden.

B)

Implementiert
Diese Methode existiert so auch nicht mehr. Mit ein bisschen tricksen kann aber die für eine Spätere Aufgabe modifizierte Methode SVGCreateIsoFromSegments aus SVGConverter noch verwendet werden.

D)

Implementiert
Hierzu gibt es die EPSConverter Klasse

F)

Nicht Implementiert

Übungsblatt 3

Aufgabe 1:

Demo:
Zu dieser Aufgabe gibt es eine gemeinsame Demo. Als Ausgabe werden Dateien mit demselben Namen und den Endungen .obj und .svg erstellt oder überschrieben.

A)

Implementiert
Das Auslesen der Daten erfolgt über die CSVReader Klasse in der Methode dateiLesen2D (wie bereits in 1a demonstriert).

B)

Implementiert
Hierzu gibt es die Methoden min und max in der Isolinien Klasse

C)

Implementiert
Hierzu gibt es die Methoden scale und move in der Isolinien Klasse

D)

Implementiert
Hierzu gibt es die Methode lineHeights in der Isolinien Klasse

E)

Implementiert
Hierzu gibt es die Methode triangles in der Isolinien Klasse

F)

Implementiert
Hierzu gibt es die Methode getIsoLine in der Isolinien Klasse

G)

Implementiert
Hierzu gibt es die EPSConverter Klasse. Die SVG Implementierung wurde in I) modifiziert

H)

Implementiert
Hierzu gibt es die getPathsOfAllIsolines in der Isolinien Klasse

I)

Implementiert
Hierzu gibt es die Methode SVGCreateIsoFromSegments in der SVGConverter Klasse

Aufgabe 2

A)

Implementiert
In der Klasse ColorGenerator

B)

Teilweise Implementiert
Die Farben wurden direkt in den CSVReader integriert und sind nicht Optional

C-F)

Nicht Implementiert

Übungsblatt 4

Demo
In dieser Demo werden dann, per Pfad, isolinien generiert, wobei die einzelnen Pfade durch die Liniendicke entstehen

A)

Implementiert
In der Klasse Isolinien.

Mein erster Versuch war eine baumartige Struktur mit nur einer PathNode Klasse. Diese Methoden sind immernoch im Bereich //Via Pathnodes zu finden. Dies hat allerdings zu einigen Problemen geführt und ich habe mich letztendes dafür entschieden das ganze nochmal anders zu machen.

Die neue Version befindet sich darunter im Bereich //Via Path in "Ordered Lists"

B)

Teilweise Implementiert
Testbeispiele sind im Ordner examples zu finden.

C)

Implementiert
Über die Methode SVGCreateIsoFromPath der Klasse SVGConverter kann die SVG datei erstellt werden, und über das Feld visualizePaths kann die visualisierung der Pfade per Liniendicke eingeschaltet werden.

D)

Teilweise Implementiert
Diese maßnahmen wurden nur für SVGCreateIsoFromPath und nicht für andere Methoden implementiert.

Die Reduzierung der Gleitkommagenauigkeit auf 2 nachkommastellen ist standardmäßig eingestellt und kann durch das Modifizieren des Rounder Objektes im SVGConverter per setDecimalPlacesString verändert werden. Dies erhöht grundsätzlich die Lesbarkeit, reduziert die Dateigröße und hat meiner Meinung nach keinen zu großen Einfluss auf das Ergebnis.

Liniensegmente werden per nicht einzeln gespeichert. Hierdurch wird sowohl die Lesbarkeit verbessert, als auch die Dateigröße reduziert.

Es werden Zeilenumbrüche, sowie eine Einrückung mit Tabs vorgenommen.

Übungsblatt 5

Aufgabe 2

A)

Implementiert
In die Methode getControlPoints der Klasse Curves kann ein Pfad eingegeben werden, woraufhin in der Rückgabe die Kontrollpunkte zwischen den jeweiligen Punkten eingefügt werden.

B)

Teilweise Implementiert
Nur für SVGs: kann über die Variable curvedMode des SVGConverter aktiviert werden.

C)

Implementiert
Demo
Hier wird eine entsprechende datei mit 5 abgerundeten Isolinien generiert;

Übungsblatt 6

Aufgabe 1)

A)

Implementiert
In der Methode interpolateColor der Klasse ColorGenerator

B)

Nicht Implementiert

Aufgabe 2)

Nicht Implementiert

Übungsblatt 7

Aufgabe 1)

Demo
Das Programm versucht dann entsprechende Datei auszulesen und 5 dateien mit IsoObjekten aus IsoCubes zu generieren. Diese werden durch eine Nummerierung am Ende des Dateinahmen unterschieden.

A)

Implementiert
In der Methode dateiLesen3D der Klasse CSVReader

B)

Implementiert
In den Methoden findMin und findMax der Klasse IsoSurface

C)

Implementiert
In der Methode findIso der Klasse IsoSurface

D)

Implementiert
In der Methode objCreateTetrahedrons der Klasse ObjConverter

E)

Implementiert
Durch die Methode printIsoTetrahedrons der Klasse IsoSurface

Ein Ergebnis sieht z.B. so aus:

F)

Implementiert
Siehe die default Einstellung der Demo.

G)

Implementiert
Durch die Methode printIsoCubes der Klasse IsoSurface

Aufgabe 2)

Nicht Implementiert

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published