E3D
Dieses in Java geschriebene Package enthält die folgenden
Applikationen:
- Den 3D-Fraktal-Generator mit dem viele der hier beschriebenen
Fraktale erzeugt werden können (mit dem hier beschriebenen
Rendering-Algorithmus)
- Den Image-Smoother der die Diskrete
Wavelet-Transformation benutzt, wie sie hier erklärt wird
- Den Bezier-Renderer der hier genauer erklärt
wird, wobei der hier
beschriebenen Rendering-Algorithmus verwendet wird.
- Einen "Typewriter" der den
Bezier-Renderer benutzt, um spezielle Fonts zu erzeugen
(wurde z.B. für die Überschrift der Bezier-Seite benutzt)
- Einen (einfachen) Bezier-Editor mit dem
Objekte erzeugt werden können, die dann mit dem
Bezier-Renderer gerendert werden, wobei sie im Editor mit
Java3D in "Echtzeit" visualisiert werden.
Voraussetzungen:
- Java 1.6 (auch "6.0" genannt), oder 1.7
(auch "7.0" genannt) in der 32-Bit-Version (die
geht auch auf einem 64-Bit-Rechner)
- Windows (XP, Windows-7, 32- oder 64-Bit)
oder
- Linux (getestet unter KDE, 32- oder
64-Bit)
- Java3D (nur für den Bezier-Editor nötig, alle
anderen Applikationen funktionieren auch ohne Java3D)
Installation:
Einfach das entsprechende
plattformabhängige Zip-Archiv entpacken. Es entsteht ein
Verzeichis "E3D".
Run:
- Unter Windows können die enthaltenen Batch-Dateien
(*.bat) zum Starten der einzelnen Applikationen genutzt
werden (ggf. muss das richtige Java mit dem vollständigen
Pfad aufgerufen werden, wenn nicht im Suchpfad liegend).
Unter den meisten Windows-Distributionen und wenn Java 1.6
im Suchpfad liegt dürften aber auch gleich die
mitgelieferten Exe-Dateien funktionieren.
- Unter Linux sind die Kommandos, wie sie in den *.sh
Dateien enthalten sind zu verwenden, oder man tippt z.B.
"sh E3DFractal.sh" für Fractal-Creator, oder man macht die
*.sh Dateien ausführbar (z.B. chmod u+x Fractal.sh). Dann
kann das jeweilige Programm direkt über die *.sh-Datei
gestartet werden, indem man z.B. "./Fractal.sh" für den
Fractal-Creator tippt. Für den Bezier-Editor muss der
Inhalt der sh-Datei entsprechend des
Installationsverzeichnisses von Java-3D angepasst werden.
Neue
Features in der Version 1.x:
- Man kann im Fractal-, Bezier-, und Schrift-Renderer über
das Options-Menü einstellen, dass sofort nachdem ein Wert
geändert wird eine Neuberechnung startet. Man muss nicht
warten bis diese abgeschlossen ist, sondern kann sofort
weitere Parameteränderungen vornehmen (eine ggf. bereits
laufende Berechnung wird dann abgebrochen). Dabei werden
nur die wirklich nötigen Rendering-Phasen neu angestoßen,
während beim Drücken des Start-Buttons immer alle Phasen
durchlaufen werden.
- Filter zur Erzeugung von Tiefen-(un-)schärfe, sowie zur
Blau- und Weißverschiebung sind dazugekommen, was dem
räumlichen Eindruck zugute kommt.
- Hintergrundbilder können gesetzt werden.
- Ein Bezier-Editor (wenn auch noch nicht sonderlich gut
benutzbar)
- ...
Neue
Features in der Version 2.x:
- Der Bezier-Editor unterstützt jetzt die Ezeugung von
Flächen aus NxM "Nadeln"/Punkten die dann als ein Objekt
behandelt werden (vorher gab es nur einzelne
Bezier-Flächen die durch 4 Nadeln definert wurden). Die
Erzeugung einzelner Nadeln und einzelner Bezier-Flächen
entfällt (es kann natürlich immer ein Fläche aus 2x2
Nadeln erzeugt werden, die einer einzelnen Fläche
entspricht). Zeilen, Spalten können hinzugefügt und
gelöscht werden. Mehrere Flächen können zusammengefügt
("verschmolzen") werden. Sie teilen sich dann einige
gemeinsame Nadeln/Punkte.Die alten XML-Dateien können
weiterhin eingelesen werden, beim Abspeichern werden
einzelnen Bezier-Flächen dann aber als NxM-Flächen mit 2x2
Nadeln abgelegt. Hinzu kommen einige Bedienungsänderungen
am Editor: So wird jetzt immer um den Punkt rotiert, der
mit der Maus gepackt wurde. Außerdem wird auch immer auf
den Punkt zugezoomt der mit der Maus gepackt wurde. Und
beim Ändern der Perspektive mit den Tasten "Home", "End",
"Up", "Down", "Left", "Right" wird der Mittelpunkt auch in
der Mitte gehalten. Damit ist der Editor IMO schon
deutlich handlicher geworden...
Neue
Features in der Version 3.x:
- Neuer Renderer (RayTracer) für die Fraktal-, Bezier- und
TypeWriter-GUIs.
- Weitere Neuerungen am Bezier-Editor.
- Farbgebungs-Algorithmus Glühen ("Glowing") für die
Fraktale.
- B-Spline-Flächen (inkl. Konvertierung von Bezier- in
B-Spline-Flächen zum kantenlosen Zusammenfügen)
Bugs:
- Manchmal dauert es relativ lange (Windows und Linux) bis
der (letzte) Fortschrittsbalken verschwindet und das
fertige Bild angezeigt wird, obwohl längst 100% erreicht
sind. Das hat wahrscheinlich damit zu tun, dass vor dem
Beenden des Berechnungs-Threads der Garbage-Collector von
Java aktiv wird und den oft recht großen zwischenzeitlich
belegten Speicherplatz wieder freigibt (das muss ich mir
noch genauer ansehen)
- Sehr große Bilder (z.B. in der Gegend von 48 Megapixel)
können von SWT nicht korrekt angezeigt werden. Dies ist
inbesondere für den Bildglätter relevant. Es werden zwar
jetzt (hoffentlich alle) diesbezüglichen Abstürze
abgefangen und stattdessen eine Fehlermeldung angezeigt,
so dass man zumindest noch speichern kann, jedoch ändert
das an der Tatsache an sich nichts. Entweder man verwendet
kleinere Bilder oder man muss im Blindflug arbeiten und
sieht sich die Ergebnisse mit anderen Programmen an (die
das besser können) - Allerdings kann das Speichern dann
auch schon eine ganze Weile dauern (die Applikation
"hängt" solange leider völlig).
- Teilweise (aber eher selten) scheint das Abbrechen
bereits laufender Berechnungen nicht zu klappen, was man
daran sieht, dass die Fortschrittsbalken vor und zurück
springen.
- Unter Windows zeigt der Bezier-Editor anfangs oft nur
ein weißes Bild. Abhilfe: kurz den Zoom-Faktor verändern.
(Hoffentlich)
Behobene Bugs:
- Die Slider funktionieren jetzt auch unter Linux normal.
- Die Anzeige wird korrekt aktualisiert (vorher musste man
teilweise das Fenster bewegen).
- Die Hilfe-Seiten lassen sich jetzt auch unter Linux
normal aufrufen (es muss nur ein Standard-Browser für
Html-Dateien festgelegt worden sein, was normalerweise
bereits der Fall sein sollte).
- Unter Windows (zumindest Windows-7) ließ sich der
Bezier-Editor nicht richtig beenden. Das Programm ließ
sich nur noch abschießen. Unter Linux gab es keine
derartigen Probleme.
Download:
Viel Spaß!
Bayes'sche Netze
Der Javascript-Code sowie weitere Dateien (Bilder, CSS, ...)
zu den interaktiven Bayes'schen Netzen auf meiner Seite. Wie
die Einbindung in eine HTML-Seite geht kann man sich dort
ansehen. Ich habe hier diese Beispiele nicht direkt
eingebunden, da sie weitere Resourcen benutzen. Der Code steht
unter der
GPL-Lizenz.
Achtung:
Die Anzeige funktioniert nur mit neuen Mozilla-Browsern
wirklich gut. Webkit-basierte Browser funktionieren mit ganz
leichten optischen Einschränkungen ebenfalls. Mit
Opera-Browsern werden die Kanten nicht richtig dargestellt.
Download:
pn4web.zip
(ca. 1MB) (enthält das Verzeichnis js/pn4web
mit allen JavaScript-Dateien und Bildern sowie die Datei
GPL_LICENSE)
Navigations-Leiste
Die dhtml-/JavaScript-basierte Navigationsleiste, wie ich sie
auf meiner Seite verwende (sofern JavaScript aktiviert ist,
sollte diese z.B. auch auf dieser Seite, am linken Fensterrand
sichtbar sein). Die Lösung mit JavaScript hat den Nachteil,
dass sie nicht funktioniert, wenn JavaScript nicht aktiviert
ist, hat aber den Vorteil, dass sie auch auf Seiten eingesetzt
werden kann, wo php, cgi, etc. nicht möglich ist. Gegenüber
einer rein CSS-basierten Lösung hat sie dabei den Vorteil,
dass nur an einer Stelle (navbar.js) Änderungen vorgenommen
werden müssen, wenn sich die Einträge des Navigationsmenüs
ändern sollen.
Das Verzeichnis js/ sollte direkt im Basis-Verzeichnis der
Seite stehen. Die Datei navbar.js ist entsprechend der eigenen
Seiten-Parameter und Unterseiten-Aufteilung anzupassen, Die
Bilder für den Navigationsbereich, den "Slider" sowie die
Icons sollten ebenfalls an das eigene Design angepasst werden.
Seiten, die die Navigationsleiste benutzen, müssen ein paar
spezielle Elemente definieren (siehe Kommentar in navbar.js).
Der Code steht unter der
GPL-Lizenz.
Achtung: stark veraltete Browser ohne DOM-Unterstützung
werden nicht mehr unterstützt.
Download:
navbar.zip
(66kB) (enthält das Verzeichnis js/ mit allen
JavaScript-Dateien und Bildern sowie die Datei
GPL_LICENSE)
Bild-Galerie
Die dhtml-/JavaScript-basierte Galerie, wie ich sie auf meiner
Seite an mehreren Stellen verwende (siehe
Fraktal-Galerie,
Portrait-Zeichnungen). Links
auf Bilddateien werden dabei so "umgebogen", dass die Bilder
in einer Art "Popup-Fenster" angezeigt werden. Die Lösung mit
JavaScript hat den Nachteil, dass sie nicht funktioniert, wenn
JavaScript nicht aktiviert ist. In diesem Fall werden keine
Links umgebogen und die Bilder würden direkt geöffnet
(allerdings ohne Bildunterschriften, die im Popup-Fenster
zusätzlich angezeigt werden, falls ein (unsichtbares)
<Div>-Element im Link-Element hinterlegt ist. Ein
Mini-Ausschnitt einer Html-Datei zur Verdeutlichung der
Funktionsweise:
<head>
...
<script type="text/javascript"
src="../js/dhtml.js"></script>
<script type="text/javascript"
src="../js/navbar.js"></script>
<script type="text/javascript"
src="../js/galery.js"></script>
//
Diverse CSS-Einstellungen werden zusätzlich
benötigt, um
// das Aussehen des Popup-Fensters
festzulegen. Diese können
// hier "inline" oder in einer extra
CSS-Datei gemacht werden.
</head>
<body onload="initGalery('Galery1',1,36);">
// Umbiegen
der Links (z.B. Bild1.jpg)
<div id="GaleryPopup1"
class="galeryPopup"> // Popup1 und Popup2 werden
alternierend
Kein JavaScript
aktiviert
// benutzt
(quasi ein Double-Buffering)
</div>
<div id="GaleryPopup2"
class="galeryPopup">
Kein JavaScript aktiviert
</div>
<div id="GaleryPreview"
class="galeryPreview"> // Kleines
Vorschau-Fenster
<img id="GaleryPreviewImg"
src="" width="1" heigh="1">
</div>
<div id="Progress">
//
Busy-Progress-Bar
<img
src="../js/waiting.gif" alt="Wait...">
</div>
<div id="Galery1">
<a id="ID1" href="Bild1.jpg">
// eindeutige
ID wird benötigt (eigentlich nur wegen
<img
src="Thumbnail1.jpg"> // eines Bugs der
zumindest im SeaMonkey vorkommt)
<div
class="detail">
// "detail"
sollte via CSS unsichtbar gemacht werden
Text
(Html), der unter dem Bild angezeigt
werden
soll (mit Formatierungen, etc.)
</div>
</a>
...
</div>
...
</body>
|
Das Verzeichnis js/ sollte wieder direkt im Basis-Verzeichnis
der Seite stehen. Weitere Informationen zur Verwendung (z.B.
nötige CSS-Einstellungen) sind dem Quellcode, oder dem
Quelltext der Seiten, auf denen ich die Galerie selbst
verwende, zu entnehmen. Der Code steht ebenfalls unter der
GPL-Lizenz.
Achtung:
stark veraltete Browser ohne DOM-Unterstützung werden nicht
mehr unterstützt.
Download:
galery.zip
(83kB) (enthält das Verzeichnis js/ mit allen
JavaScript-Dateien und Bildern sowie die Datei
GPL_LICENSE)
Content-Manager
C++-Code zum "Managen" des in einer eigenen Klasse
C
"verpackten" Inhalts einer Klasse
T.
Eine Instanz der Klasse
T (z.B.
t) "verpackt" alle ihre Attribute in einer
Instanz der Klasse
C
und hat (idealer Weise) keine weiteren Attribute
.
"Managen" bedeutet hier, dass derselbe Inhalt mehrere
"Besitzer" (Instanzen der Klasse
T) haben kann. Sobald einer dieser
Besitzer aber
seinen
Inhalt verändern will, wird für diesen automatisch eine eigene
Kopie angelegt. Unnötiges Kopieren wird damit vermieden. Der
Code steht unter der
GPL-Lizenz.
Eine ausführlichere Erklärung ist im Kommentar-Header von
contentManager.hh
gegeben.
Download:
3-D
C++-Code für Vektoren, Linien, Flächen und Rotationen im 3D
euklidischen Raum. Der Code steht unter der
GPL-Lizenz.
Download:
d3.tar.gz
(11kB) (enthält die Dateien: d3.cpp,
mathematical.cpp und GPL_LICENSE)
Photoimage
Einfaches Interface für libtiff und libjpeg. Nich besonders
schön und wenig kommentiert - sollte trotzdem halbwegs
verständlich sein - hoffe ich... Auch dieser Code steht unter
der
GPL-Lizenz.
Download:
Fraktale
Beschreibungen zu Fraktalen (2D und hauptsächlich 3D) findet
man
hier. Der Code ist
hier zu besichtigen,
kann aber auch gleich hier gezogen werden. Es handelt sich nur
um den reinen Code zur Fraktal-Berechnung das geschickte
Suchen nach den Umrissen eines 3D-Fraktals sowie das Rendering
sind nicht enthalten.
Achtung: Dies ist eine alte
Version und enthält noch keine Abstandsmaßberechnung (worum es
dabei geht, ist auch auf der o.g. Seite beschrieben)!
Und na was wohl? Auch dieser Code steht unter der
GPL-Lizenz.
Download:
Wavelets
Ein paar Code-Schnipsel und Erklärungen zur Diskreten Wavelet
Transformation (DWT) finden sich auf
dieser Seite.
Der komplette Code für das Image-Smoothing per DWT kann man
sich hier runterladen. Der Code steht natürlich auch unter der
GPL-Lizenz.
Achtung: Zusätzlich wird das Photoimage-Paket benötigt.
Download:
wavelet.tar.gz
(11kB) (enthält die Dateien: wavelet.cpp,
wavesmooth.cpp, mathematical.cpp und GPL_LICENSE)
Speedbar
Das ist der Perl-CGI-Code, der
meine ehemalige Navigantionsleiste aka. "Speedbar" erzeugte.
Hier wurden Frames benutzt und die Optik ist entsprechend
etwas aus der Mode...
Die Pfade in
mkSpeedbar.cgi sind natürlich an die jeweilige
Datei-Struktur anzupassen. Der Aufruf erfolgt über einen
Link - zB.:
~/www/cgi-bin/mkSpeedbar?path=../index.html.
Zu beachten ist insbesondere, dass die Pfade alle mit "../"
anfangen, da die beiden Funktionen mkSpeedbar.cgi und
withSpeedbar im Verzeichnis "~/www/cgi-bin/" oberhalb des
WWW-Root-Verzeichnisses "~/www/" stehen. Auch dieser Code
steht wieder unter der
GPL-Lizenz.
Anmerkung:
Da diese Lösung, nach dem
Umzug der Seite, bei mir nicht mehr in Frage kommt, habe ich
eine neue JavaScript-basierte Navigationsleiste gebaut, die
ebenfalls
hier runtergeladen werden
kann.
Download:
speedbar.tar.gz
(11kB) (enthält die Dateien: mkSpeedbar,
withSpeedbar.cgi, .opened.gif, .closed.gif, .leaf.gif
und GPL_LICENSE)
PS-Print
Mit diesem Tcl/Tk-Modul kann
man Postscript-Ausgaben von komplexen Widgets erzeugen. Der
Trick besteht darin, dass die Widgets in einem Canvas
nachgezeichnet werden, was allerdings ein nur näherungsweise
ähnliches Aussehen ergibt. Das Canvas-Widget stellt eine
PS-Export-Funktion zur Verfügung, die dann genutzt wird.
Gescrollte Widgets funktionieren nur wenn das Img-Package
installiert ist. In diesem Fall wächst die Größe des
Postscript-Outputs u.U. dramatisch an. Mit einer kleinen
Änderung kann der dafür genutzte Weg über einen Snapshot
immer beschritten werden, was dann eine identische Widergabe
des Widgets sicherstellt. Auch dieser Code steht natürlich
unter der
GPL-Lizenz.
Profiler
Ein Tcl/Tk-Front-End für den gprof Profiler gibt's
hier.
Fraktal
Ein Mini-Beispiel für die Erzeugung eines Mandelbrot-Fraktals
mit Matlab/Octave gibt's
hier.