Nagut, ich hab es jetzt auch verstanden, du hast um die Ecke gedacht, ich nicht. :rolleyes:
Mache ich mal ein Faß auf. Ich möchte vektorrechnung “üben”, weil ich nicht weiß, wie ich so etwas, schnell, einfach und sicher mit/ohne Zwischenschritte berechnen kann, und welchen TRICK es dabei gibt:
Hier sinds Java-Methoden:
Random r = new Random();
final int r1 = 5;
final int r2 = 4;
Matrix4x4String m1 = new Matrix4x4String(
""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),
""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),
""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),
""+0,""+0,""+0,""+(r.nextInt(3) < 2 ? 1 : 0)
);
Matrix4x4String m2 = new Matrix4x4String(
""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),
""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),
""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),
""+0,""+0,""+0,""+(r.nextInt(3) < 2 ? 1 : 0)
);
Matrix4x4String m3 = new Matrix4x4String(
""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),
""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),
""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),""+(r.nextInt(r1) < r2 ? zufWert(r) : 0),
""+0,""+0,""+0,""+(r.nextInt(3) < 2 ? 1 : 0)
);
Matrix4x4String neu = m1.mal( m2.mal(m3));
System.out.println(m1+"*
"+m2+"*
"+m3+"=
"+neu);
}
private static int zufWert(Random r) {
return r.nextInt(2) < 1 ? r.nextInt(4) : -r.nextInt(4);
}
// zufWert(Random r) wurde refactort
class Matrix4x4String {
String[][] da = new String[4][4];
public Matrix4x4String(String... a) {
da[0][0] = a[0];
da[0][1] = a[1];
da[0][2] = a[2];
da[0][3] = a[3];
da[1][0] = a[4];
da[1][1] = a[5];
da[1][2] = a[6];
da[1][3] = a[7];
da[2][0] = a[8];
da[2][1] = a[9];
da[2][2] = a[10];
da[2][3] = a[11];
da[3][0] = a[12];
da[3][1] = a[13];
da[3][2] = a[14];
da[3][3] = a[15];
}
public Matrix4x4String mal(Matrix4x4String n) {
Matrix4x4String m = this;
Matrix4x4String neu = new Matrix4x4String(new String[16]);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
String s = "";
for (int k = 0; k < 4; k++) {
if (!m.da**[k].equals("0") && !n.da[k][j].equals("0")) {
if (m.da**[k].equals("1"))
s += n.da[k][j] + " + ";
else if (n.da[k][j].equals("1"))
s += m.da**[k] + " + ";
else
s += m.da**[k] + " * " + n.da[k][j] + " + ";
}
}
if (s.isEmpty()) {
s = "0";
}else {
s = s.substring(0, s.length()-3);
}
neu.da**[j] = s;
}
}
return neu;
}
@Override
public String toString() {```
Das ist jetzt alles Relevantes. Ich wette, jetzt kommt Kritik wegen der Methode mal oder wegen substring...