MatrixGenerator: more highlighting, complexity,

This commit is contained in:
M.Scholz 2012-06-19 22:45:52 +02:00
parent 86c9c50a3c
commit 1e6c09a5bb
2 changed files with 32 additions and 13 deletions

View File

@ -35,13 +35,10 @@ import algoanim.animalscript.AnimalScript;
/*
* TODO:
* - erste Folie die drei Schritte der Funktionsweise animieren
* - Abschlussfolie(n) mit Komplexitätsbetrachtung der Funktion (sollte n^3 sein)
* - Properties für Textfarbe usw. einfügen
* - Benutzerinteraktionen einfügen
* - Elemente der Matrizen A und B einfärben, wenn diese miteinander multipliziert werden.
* - Texte nicht als SourceCode-Objekte, sonder als Textobjekte erstellen.
* Somit können die Properties geändert werden.
*
* optional:
* - Texte nicht als SourceCode-Objekte, sonder als Textobjekte erstellen. Somit können die Properties geändert werden.
*
*/
@ -70,6 +67,12 @@ public class MatrixGenerator implements Generator {
*/
private SourceCode info = null;
/**
* The statement text as a SourceCode object (last several slides)
*/
private SourceCode statement = null;
/**
* The sourceCode
*/
@ -131,7 +134,7 @@ public class MatrixGenerator implements Generator {
this.info = lang.newSourceCode(new Coordinates(10, 75), "info", null, TEXT_PROPS);
this.info.addCodeLine("Das hier vorgestellte Verfahren eignet sich zur Multiplikation zweier Matrizen.", null, 0, null);
this.info.addCodeLine("Zwei Matrizen können genau dann multipliziert werden, wenn die Spaltenanzahl der", null, 0, null);
this.info.addCodeLine("linken Matrix mit der Zeilenanzahl der rechten Matrix übereinstimmen. ", null, 0, null);
this.info.addCodeLine("linken Matrix mit der Zeilenanzahl der rechten Matrix übereinstimmt. ", null, 0, null);
this.info.addCodeLine("Das Verfahren lässt sich leicht iterativ implementieren.", null, 0, null);
this.info.addCodeLine("Die Funktioneweise ist hierbei wie folgt:", null, 0, null);
this.info.addCodeLine("- Betrachte die i-te Zeile der linken Matrix und die i-te Spalte der rechten Matrix.", null, 1, null);
@ -212,7 +215,7 @@ public class MatrixGenerator implements Generator {
String[][] data = new String[1][2];
data[0][0] = "Summe = ";
data[0][1] = "0";
data[0][1] = "";
this.summe = lang.newStringMatrix(new Offset(15, 0, intMatrixB, AnimalScript.DIRECTION_E), data, "stumme", null);
this.summe.changeColor(AnimationPropertiesKeys.FILL_PROPERTY, Color.WHITE, null, null);
@ -250,9 +253,10 @@ public class MatrixGenerator implements Generator {
lang.nextStep();
sc.unhighlight(1);
sc.highlight(2);
this.summe.put(0, 1, "0", null, null);
int[][] result = new int[matrixA.length][matrixB[0].length]; // 1
int summe = 0; // 2
int summetmp = 0;
for(int i=0; i<matrixA.length; i++){ // 3
//STEP
@ -279,6 +283,8 @@ public class MatrixGenerator implements Generator {
lang.nextStep();
sc.unhighlight(5);
sc.highlight(6);
intMatrixA.highlightCell(i, k, highTime, unhighTime);
intMatrixB.highlightCell(k, j, highTime, unhighTime);
this.summe.put(0, 1, summetmp+"+("+matrixA[i][k]+"*"+matrixB[k][j]+")", null, null);
this.summe.highlightCell(0, 1, highTime, unhighTime);
result[i][j]=summe; // 7
@ -286,6 +292,8 @@ public class MatrixGenerator implements Generator {
lang.nextStep();
sc.unhighlight(6);
sc.highlight(7);
intMatrixA.unhighlightCell(i, k, highTime, unhighTime);
intMatrixB.unhighlightCell(k, j, highTime, unhighTime);
this.summe.unhighlightCell(0, 1, highTime, unhighTime);
intMatrixResult.highlightCell(i, j, highTime, unhighTime);
intMatrixResult.put(i, j, summe, null, null);
@ -316,9 +324,10 @@ public class MatrixGenerator implements Generator {
//STEP
lang.nextStep();
intMatrixResult.hide();
ergebnis.hide();
sc.hide();
intMatrixResult.hide();
generateHeader();
}
@ -326,9 +335,19 @@ public class MatrixGenerator implements Generator {
* Generates the statement for the last slides
*/
private void generateStatement(){
statement = lang.newSourceCode(new Coordinates(10, 75), "statement", null, TEXT_PROPS);
statement.addCodeLine("Komplexität:", null, 0, null);
statement.addCodeLine("Abschließend wollen wir noch einen kurzen Blick auf die Komplexität des Verfahrens werfen.", null, 0, null);
statement.addCodeLine("Die kritischen Elemente des Algorithmus sind die drei verschachtelten Schleifen.", null, 0, null);
statement.addCodeLine("Die äußere Schleife läuft über die Anzahl n der Zeilen der Matrix A.", null, 0, null);
statement.addCodeLine("Die mittlere Schleife läuft über die Anzahl m der Spalten der Matrix B.", null, 0, null);
statement.addCodeLine("Die innere Schleife läuft über die Anzahl p der Spalten von A.", null, 0, null);
statement.addCodeLine("Durch Anwendung der Produktregel erhalten wir somit eine kubische Komplexität von O(n^3).", null, 0, null);
//TODO: implement the statement for the last view slides!
//Zeilenazahl(A) * Spaltenanzahl(B) * Spaltenanzah(A)
}
@ -372,8 +391,8 @@ public class MatrixGenerator implements Generator {
@Override
public String getDescription() {
return "Das hier vorgestellte Verfahren eignet sich zur Multiplikation zweier Matrizen. Zwei Matrizen k&ouml;nnen genau dann" +
"multipliziert werden, wenn die Spaltenanzahl der linken Matrix mit der Zeilenanzahl der rechten Matrix" +
return "Das hier vorgestellte Verfahren eignet sich zur Multiplikation zweier Matrizen. Zwei Matrizen k&ouml;nnen genau dann " +
"multipliziert werden, wenn die Spaltenanzahl der linken Matrix mit der Zeilenanzahl der rechten Matrix " +
"&uuml;bereinstimmt. Das Verfahren l&auml;sst sich leicht iterativ implementieren." +
"<br>Die Funktioneweise ist hierbei wie folgt:" +
"<br>- Betrachte die i-te Zeile der linken Matrix und die i-te Spalte der rechten Matrix." +