Za przesunięcie punktu względem osi X, Y, Z o zadany kąt odpowiadają trzy metody znajdujące się w klasie "Punkt3D". Metody:
public void ObrotX(double kat) {
double katX = degToRad(kat);
double pomX, pomY, pomZ;
pomX
= px;
pomY
= py * Math.cos(katX) - pz * Math.sin(katX);
pomZ
= pz * Math.cos(katX) + py * Math.sin(katX);
px = pomX; py = pomY; pz = pomZ;
}
public void ObrotY(double kat) {
double katY = degToRad(kat);
double pomX, pomY, pomZ;
pomX
= px * Math.cos(katY) + pz * Math.sin(katY);
pomY
= py;
pomZ
= pz * Math.cos(katY) - px * Math.sin(katY);
px = pomX; py = pomY; pz = pomZ;
}
public void ObrotZ(double kat) {
double katZ = degToRad(kat);
double pomX, pomY, pomZ;
pomX
= px * Math.cos(katZ) - py * Math.sin(katZ);
pomY
= py * Math.cos(katZ) + px * Math.sin(katZ);
pomZ
= pz;
px = pomX; py = pomY; pz = pomZ;
}
Funkcje trygonometryczne z pakietu "Math" przyjmują radiany, zatem potrzebna jest metoda przeliczająca ze stopni na radiany:
private double degToRad(double deg)
{
return deg * ((2 * Math.PI) / 360);
}