I want to rotate a cyliner. To accomplish this, I have to rotate a vector around x axis. how can I do this?
I wrote some code, seems not working fine now.
void CObjPosition::rotate_cylinder(struct static_obj_cylinder* cylinder,
float around_x, float around_y)
{
TRACE("rotate cyliner!
");
float x,y,z;
float delta_x1, delta_y1, delta_z1;
float delta_x2, delta_y2, delta_z2;
float delta_y_z1, delta_y_z2;
double theta1, theta2;
x = (cylinder->center_x1 + cylinder->center_x2)/2;
y = (cylinder->center_y1 + cylinder->center_y2)/2;
z = (cylinder->center_z1 + cylinder->center_z2)/2;
delta_x1 = cylinder->center_x1 - x;
delta_y1 = cylinder->center_y1 - y;
delta_z1 = cylinder->center_z1 - z;
delta_y_z1 = sqrt(delta_y1*delta_y1+delta_z1*delta_z1);
if(delta_y_z1 != 0)
theta1 = asin(delta_y1/delta_y_z1);
else
{
theta1 = 0;
g_out.Insert("something wrong! delta_y_z_1=0 in rotate_cylinder!
");
}
delta_x2 = cylinder->center_x2 - x;
delta_y2 = cylinder->center_y2 - y;
delta_z2 = cylinder->center_z2 - z;
delta_y_z2 = sqrt(delta_y2*delta_y2+delta_z2*delta_z2);
theta2 = theta1+PI/2;
/*
if(delta_y_z2 != 0)
theta2 = asin(delta_y1/delta_y_z2);
else
{
theta2 = 0;
g_out.Insert("something wrong! delta_y_z_2=0 in rotate_cylinder!
");
}*/
theta1 += around_x;
theta2 += around_x;
//rotate around x axis, so not change x value
cylinder->center_x1 = cylinder->center_x1;
cylinder->center_y1 = y+delta_y_z1*sin(theta1);
cylinder->center_z1 = z+delta_y_z1*cos(theta1);
cylinder->center_x2 = cylinder->center_x2;
cylinder->center_y2 = y+delta_y_z2*sin(theta2);
cylinder->center_z2 = z+delta_y_z2*cos(theta2);
}