/* Пример поворота вектора вокруг оси */
package ru.malik.elaborarer.avtoo.examples.rotation;
import avt.io.*;
import avtx.application.*;
public class RotationApp(ConsoleApp, Math)
{
public () { }
public int main(String[] arguments) {
PrintStream output = System.out;
double4 axis = new byte4 { 0, 1, 1, 1 };
output.print("Пусть у нас есть ось вращения a = ");
output.print(axis);
output.print(", которая имеет нормализованный вид: norm(a) = ");
output.println(axis /= (double) abs(axis));
double4 vrot = rotq(PI * 2 / 3, axis);
double4 vec1 = new byte4 { 0, 1, 0, 0 };
output.print("Повернём вектор v1 = ");
output.print(vec1);
output.print(" на 120 градусов вокруг a, получим вектор v2 = ");
output.println(vrot * vec1 / vrot);
double4 vec2 = new byte4 { 0, 0, 1, 0 };
output.print("Повернём вектор v2 = ");
output.print(vec2);
output.print(" на 120 градусов вокруг a, получим вектор v3 = ");
output.println(vrot * vec2 / vrot);
vrot = rotq(PI / 3, axis);
output.print("Повернём вектор v1 = ");
output.print(vec1);
output.print(" на 60 градусов вокруг a, получим вектор v4 = ");
output.println(vrot * vec1 / vrot);
return 0;
}
}
helper RotationAppVectorPrintStream: PrintStream
{
public void print(double4 vector) {
printf("{ %0#1.3%, %1#1.3%, %2#1.3% }", new Object[] { new Double(vector[1]), new Double(vector[2]), new Double(vector[3]) });
}
public void println(double4 vector) {
printlnf("{ %0#1.3%, %1#1.3%, %2#1.3% }", new Object[] { new Double(vector[1]), new Double(vector[2]), new Double(vector[3]) });
}
}