vector3d modeler::rotate_axis(vector3d &size, float degrees, int axis) { float angle = PI * degrees / 180.0; float cos_angle = cos(angle); float sin_angle = sin(angle); float posX = size.getX(); float posY = size.getY(); float posZ = size.getZ(); float x, y, z; switch (axis) { case 0: x = cos_angle * posX - sin_angle * posY; y = sin_angle * posX + cos_angle * posY; z = posZ; break; case 1: x = cos_angle * posX + sin_angle * posZ; y = posY; z = -sin_angle * posX + cos_angle * posZ; break; case 2: x = posX; y = cos_angle * posY - sin_angle * posZ; z = sin_angle * posY + cos_angle * posZ; break; default: break; } return vector3d(x, y, z); }