public static MatricaRotacije matrica_ZX(double stupnjeva_okoZ, double stupnjeva_okoX) { MatricaRotacije mx = new MatricaRotacije(stupnjeva_okoX, 'x'); MatricaRotacije mz = new MatricaRotacije(stupnjeva_okoZ, 'z'); return(mz * mx); }
public static MatricaRotacije matrica_ZXY_i(double stupnjeva_okoZ, double stupnjeva_okoX, double stupnjeva_okoY) { MatricaRotacije mx = new MatricaRotacije(-stupnjeva_okoX, 'x'); MatricaRotacije my = new MatricaRotacije(-stupnjeva_okoY, 'y'); MatricaRotacije mz = new MatricaRotacije(-stupnjeva_okoZ, 'z'); return(my * (mx * mz)); }
// ove funkcije klasa koristi interno // pozivaju se automatski kad se promijeni neki public property private void KamRotateApsolut(double stupnjeviOkoZ, double stupnjeviOkoX, double stupnjeviOkoY) { // tocka na sferi polumjera 1 gdje je kamera RotMatricaZXY = prostorneRotacije.matrica_ZXY(stupnjeviOkoZ, stupnjeviOkoX, stupnjeviOkoY); RotMatricaZXY_i = prostorneRotacije.matrica_ZXY_i(stupnjeviOkoZ, stupnjeviOkoX, stupnjeviOkoY); KamRotacijaVektor = (Vector3D)(RotMatricaZXY * (Vector3D)KamDefPoz); // vektor 'kamera gore' se takodjer mora rotirati s kamerom, time se kamera moze "kotrljati" KamUp = (Vector3D)(RotMatricaZXY * (Vector3D)KamUpDefPoz); }
public static MatricaRotacije PomnoziMatrice(MatricaRotacije m_lijeva, MatricaRotacije m_desna) { MatricaRotacije m_tmp = new MatricaRotacije(); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { m_tmp.matrica[i, j] = 0; for (int k = 0; k < 3; k++) { m_tmp.matrica[i, j] += m_lijeva.matrica[i, k] * m_desna.matrica[k, j]; } } } return(m_tmp); }
public static Vector3D PomnoziVektorMatricom(MatricaRotacije m, Vector3D v) { double[] v_tmp = new double[3] { 0, 0, 0 }; double[] v_orig = new double[3] { v.X, v.Y, v.Z }; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { v_tmp[i] += m.matrica[i, j] * v_orig[j]; } } return(new Vector3D(v_tmp[0], v_tmp[1], v_tmp[2])); }