Ho un dubbio: cioè questi valori dopo la rotazione sono esatti??
https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-prn2/v/t35.0-12/10272158_4142164329088_267240415_o.jpg?oh=29281f8c46b386bc0cc873f05c3ddec5&oe=5350241C&__gda__=1397761014_a83661f4a0ba23618ef578680b5ed4fc
il codice è questo:
point.h
class Point
{
public:
Point(float =0,float =0,float =0);
void setPoint(float ,float ,float );
float getX() const;
Point& rotateX(int );
float getY() const;
Point& rotateY(int );
float getZ() const;
Point& rotateZ(int );
private:
float x;
float y;
float z;
};
point.cpp
#include "point.h"
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
Point::Point(float first, float second, float third)
{
x=first;
y=second;
z=third;
//le coordinate possono avere un qualsiasi valore su un asse cartesiano
}
void Point::setPoint(float first, float second, float third)
{
x=first;
y=second;
z=third;
}
float Point::getX() const
{
return x;
}
float Point::getY() const
{
return y;
}
float Point::getZ() const
{
return z;
}
Point& Point::rotateX(int angle)
{
if(angle>0 && angle<=360) //il punto può essere ruotato di un angolo compreso tra 0 e 360 gradi
{
y=y*cos(angle)-z*sin(angle);
z=y*sin(angle)+z*cos(angle);
}
else
cout<<"impossibile ruotare il punto intorno ad x: angolo non valido\n";
return *this; //
}
Point& Point::rotateY(int angle)
{
if(angle>0 && angle <=360) //il punto può essere ruotato di un angolo compreso tra 0 e 360 gradi
{
x=x*cos(angle)+z*sin(angle);
z=-x*sin(angle)+z*cos(angle);
}
else
cout<<"impossibile ruotare il punto intorno ad y: angolo non valido\n";
return *this;
}
Point& Point::rotateZ(int angle)
{
if(angle>0 && angle <=360) //il punto può essere ruotato di un angolo compreso tra 0 e 360 gradi
{
x=x*cos(angle)-y*sin(angle);
y=x*sin(angle)+y*cos(angle);
}
else
cout<<"impossibile ruotare il punto intorno a z: angolo non valido\n";
return *this;
}
mainpoint.cpp
#include "point.h"
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
Point point1(2.5,0,2.0),point2(3.5);
cout<<"le coordinate di point1 sono: "
<<"x:"<<point1.getX()
<<" y:"<<point1.getY()
<<" z:"<<point1.getZ()<<"\n";
cout<<"le coordinate di point2 sono: "
<<"x:"<<point2.getX()
<<" y:"<<point2.getY()
<<" z:"<<point2.getZ()<<"\n";
//esempio di rotazione intorno ad un asse
cout<<"\nsto ruotando point1 intorno all'asse x..\n";
point1.rotateX(90); //si possono utilizzare angoli qualsiasi purchè tra 0 e 360 gradi
cout<<"le coordinate di point1 sono: "
<<"x:"<<point1.getX()
<<" y:"<<point1.getY()
<<" z:"<<point1.getZ()<<"\n";
cout<<"sto modificando point2..\n";
point2.setPoint(4.0,2.5,2.0);
cout<<"le coordinate di point2 sono: "
<<"x:"<<point2.getX()
<<" y:"<<point2.getY()
<<" z:"<<point2.getZ()<<"\n";
return 0;
}