Stochastische räumliche Prozesse sind beispielsweise Punktprozesse, die Punkte nach einer mathematischen Gesetzmäßigkeit im Raum verteilen. Der einfachste und bekannteste Vertreter aller Punktprozesse ist der Poissonprozess. Er erzeugt eine völlig zufällige Gleichverteilung der Punkte im Raum, wobei die Anzahl der Punkte poissonverteilt ist.
Weitere bekannte Punktprozesse sind Clusterprozesse, bei denen sich Punkte um Clusterzentren häufen oder Hardcoreprozesse, bei denen die einzelnen Punkte einen gewissen Mindestabstand zueinander besitzen.
Beim Clusterprozess werden zunächst die Clusterzentren durch
einen Poissonprozess simuliert. Anschließend wird für die
Clusterzentren eine Umgebung definiert, innerhalb dieser
weitere Punkte durch einen zweiten Poissonprozess erzeugt
werden. Die Umgebung ist definiert durch eine Kreisscheibe
deren Radius der sogenannte Clusterradius ist. D.h. in
einem Rechteck um jedes Clusterzentrum wird ein
Poissonprozess simuliert und alle Punkte außerhalb des
Kreises verworfen. Zur Realisierung des Clusterprozesses
gehören alle Punkte außer den Clusterzentren.
Ein Hardcoreprozess ist ebenfalls ein Prozess, bei dem die
Punkte zunächst anhand eines Poissonprozesses erzeugt werden.
Diese Punkte werden je zufällig mit einer unabhängigen reellen
Zufallszahl zwischen 0 und 1 markiert. Diejenigen Punkte, in
deren Umgebung (ein Kreis mit dem Hardcoreradius) ein Punkt
mit einer kleineren Markierung existiert, werden verworfen.
Alle anderen bilden die Realisierung des Hardcoreprozesses.
Die oben gezeigten Realisierungen von
Poisson-, Cluster- und Hardcoreprozess
wurden mit folgenden Parameterwerten erzeugt:
Folgender Pseudocode beschreibt einen Poissonprozess, wobei minx, maxx, miny, maxy und intensity Eingabeparameter sind.
// size of the sampling window (volume) double minx, maxx, miny, maxy; double sizex = maxx-minx; double sizey = maxy-miny; // intensity double intensity; // modify the volume with the intensity // (for the simulation of the Poisson distribution) double expectpts = sizex * sizey * intensity; // a Poisson distributed random variable can be simulated by // adding exponentially distributed random variables // nextDouble() yields a value within [0,1] Random generator = new Random(); double e = -Math.log(generator.nextDouble()); while (e <= expectpts) { // realise a randomly within the sampling // window distributed point double x = minx + generator.nextDouble() * sizex; double y = miny + generator.nextDouble() * sizey; // ... and e.g. print out the coordinates System.out.println("X: " + x + " Y: " + y); e -= Math.log(generator.nextDouble()); }
Teilaufgabe a) (10 Punkte)
Schreiben Sie ein Programm, bestehend aus mehrer Klassen,
welches in der Lage ist die beschriebenen 3 Punktprozesse
zu simulieren.
Die simulierten Daten sollen anschließend im PBM-Format, welches für das Speichern von monochromen Bildaten entworfen wurde, in eine Datei geschrieben werden. Eine PBM-Datei ist so einfach wie möglich aufgebaut: Sie beginnt jeweils mit einem Header (erste Zeile), dem die Bildinformation unmittelbar (zeilenweise) folgt. Der Header ist immer in ASCII geschrieben, wobei die einzelnen Einträge durch White Spaces getrennt werden. Die Bildinformation kann entweder im ASCII- oder Binärformat gespeichert werden.
Es gibt jeweils zwei Header-Versionen, von denen eine für ASCII- und eine für binäre Bildinformationen benutzt wird. Wir beschränken uns auf den ASCII-Fall. Ein ASCII-PBM-Header besteht aus folgenden Einträgen, jeweils durch White Spaces getrennt:
Beispiel:
P1 7 7 0 1 0 1 0 1 0 1 1 1 1 1 1 1 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 0 1 0 1 0 1 0
Für weitere Inforamtionen zum PBM-Bilddateiformat siehe man pbm.
Teilaufgabe b) (10 Punkte)
Erweitern Sie Ihr Programm so, dass auch ein Clusterprozess Basis für einen Hardcoreprozess sein kann und umgekehrt.
Viel Erfolg!