RotationApp.avt

Переключить прокрутку окна
Загрузить этот исходный код

/* Пример поворота вектора вокруг оси */

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]) });
    }
}