ContRap Tutorium

Dozent:
Aless Lasaruk (Ehem. Lst. Prof. Dr. Donner, Vertr. Dr. Hanning)
Materialien:
http://staff.fim.uni-passau.de/~lasaruk (Sektion "Bildverarbeitung")

ContRap:
http://contrap.sourceforge.net/


Execution Gruppe aufbrechen:
Ctrl+Enter
Neue Zeile ohne Evaluieren:
Shift+Enter

Einfache Operationen
reset // Setzt das System in den Ausgangszustand zurück (Aufpassen bei dynamischen Komponenten)
1+1
2
1/2 // Ganzzahlige division
0
a := 1 // Zuweisung von 1 zu a
1
a+a // Auswertung arithmetischer Ausdrücke
2
sin(1.0) // Auswertung von Funktionen
0.841471
while a < 10 do a := a+1 // While Schleife
10
for i := 1 as i < 10 do a := a*i // For Schleife
3628800
a > 5 and a < 15 // Logische Operationen
false
begin 
  local a := 1 // Lokale variable in einem Block
  b := a 
end // Rückgabewert ist der Wert der letzten Operation
1
a // A hat sich global nicht geändert
3628800
'a' // Quotes hindern genau einmal an der Evaluierung
a

Lazy Binding and Evaluation
x // Unbekannter Identifier evaluiert zu sich selbst
x
a := 1 b := a a := 2 b // b bekommt den Wert von a
1
x := y y := 1 x // x bekommt eine Referenz auf a
1
y := 2 x
2
f() // Unbekannte Funktion evaluiert zum eigenen Aufruf
f()

Funktionen definieren
f := function(x) x+y // x ist lokal, y ist global
function(x)
y := 10 clear(y) f(1)
1 + y
h := function(g,x) g(x) // Funktionen sind normale Objekte
function(g,x)
h(function(x) x^2,3) // Lokale Definition einer Funktion
9
f // Ausgeben von der Signatur einer Funktion
[function(x)]
f := function(x,y) x+y // Beides x und y lokal
function(x,y)
f // Zuweisung an Funktionen erweitert die Funktion
[function(x),function(x,y)]

Typsystem und Plugins
type(1) // Ganz normales "int" aus C/C++
"int"
[1,2,3] // Liste
[1,2,3]
type(1.0) // Ganz normales "double" aus C/C++
"double"
2.0+3.0 // Hier wird operator+-Funktion auf echten "doubles" aufgerufen
5
operator+ := function(x:double,y:double) x*y
function(x:double,y:double)
2.0+3.0 // Wir haben den oprator+ ersetzt
6
load("numeric"); // Setzt den operator wieder zurück
2.0+3.0
5

Mathematische Plugin-Bibliotheken
reset load("ginac"); // Nun verhält sich ContRap wie ein Computeralgebrasystem
1/2
1
―
2
p := expand((x+1)*(y+3)) // Ausmultiplizieren
3 + x*y + y + 3*x
factorize(p) // Faktorisieren
(3+y)*(1+x)
grad(p,[x,y]) // Gradientenberechnung
⎛ 3 + y ⎞
⎜       ⎟
⎝ 1 + x ⎠
A := matrix([[1,x],[-x,2]]) // Matrizen
⎛ 1   x ⎞
⎜       ⎟
⎝ -x  2 ⎠
A^(-1) // Inverse
⎛    2       -x    ⎞
⎜ ―――――――  ――――――― ⎟
⎜ 2 + x^2  2 + x^2 ⎟
⎜                  ⎟
⎜    x        1    ⎟
⎜ ―――――――  ――――――― ⎟
⎝ 2 + x^2  2 + x^2 ⎠
normalize(A^(-1)*A) // Ausmultiplizieren
⎛ 1  0 ⎞
⎜      ⎟
⎝ 0  1 ⎠

Graphische Oberflächen
load("qt"); // Multi-Platform GUI Bibliothek Qt 
image := QImage("lena.jpg") // Bilder werden nativ angezeigt
QImage("lena.jpg")
viewer := show(image) // QtImageViewer zeigt Bilder mit zusätzlichen Zoom- und Zeichenfunktionen
QtSlider('viewer:zoom(position/100.0)';range=[0,200]) // Dynamische Komponenten kommunizieren über callbacks

Bildverarbeitungs-Bibliothek OpenCV
load("cv");
gray := cvToGray(image)
threshold := show(cvThreshold(gray,128))
QtSlider('threshold:setImage(cvThreshold(gray,position))';range=[0,255]) // Anzeige von OpenCV Bildern erfolgt automatisch