//---------------------------------------------------------------------------------------------- // A simple program by Vincenzo Amendola in C/C++ to manipulate an object of given coordinates // in 3-dimensional space. The algorithm is particularly efficient with x1, y1, z1 derived using // matrix algebra... a GUI may be added to visualise the transformations. //---------------------------------------------------------------------------------------------- #include #include int main() { double x, y, z, x1, y1, z1, dx, dy, dz, sx, sy, sz; double deg_to_rad = 3.1415926536/180; // pi/180 double a, b, c; double sa, sb, sc, ca, cb, cc; cout<<"Enter coordinates x, y, z (separate with spaces): "; cin>>x; cin>>y; cin>>z; cout<<"Enter translation coefficients dx, dy, dz (separate with spaces): "; cin>>dx; cin>>dy; cin>>dz; cout<<"Enter scaling factors sx, sy, sz (separate with spaces): "; cin>>sx; cin>>sy; cin>>sz; cout<<"Enter rotation angles(deg) a, b, c (separate with spaces): "; cin>>a; cin>>b; cin>>c; //---------------------------------------------------------------------------------------------- sa = sin(a * deg_to_rad); sb = sin(b * deg_to_rad); sc = sin(c * deg_to_rad); ca = cos(a * deg_to_rad); cb = cos(b * deg_to_rad); cc = cos(c * deg_to_rad); x1 = (sx*cb*cc*x +sy*sa*sb*cc*y -sy*sc*ca*y +sz*sb*ca*cc*z +sz*sa*sc*z +sx*cb*cc*dx +sy*sa*sb*cc*dy +sz*sb*ca*cc*dx -sy*sc*ca*dy +sz*sa*sc*dz); y1 = (sx*sc*cb*x +sy*sa*sb*sc*y +sy*ca*cc*y +sz*sb*sc*ca*z -sz*sa*cc*z +sx*sc*cb*dx +sy*sa*sb*sc*dy +sz*sb*sc*ca*dz +sy*ca*cc*dy -sz*sa*cc*dz); z1 = (-sx*sb*x +sy*sa*cb*y +sz*ca*cb*z -sx*sb*dx +sy*sa*cb*dy +sz*ca*cb*dz); // Perspective projection is not included. To include this use the following: // xp = distance_value * (x/z) // yp = distance_value * (y/z) //---------------------------------------------------------------------------------------------- cout<<"\nNew coordinates: "<