I am working on a project for my 3D Graphics class. The project is built with C++ and OpenGL / Glut. Basically, I create a horizontal rectangle window, subdivided into two squares. On the left, I have a two dimensional coordinate plane, which allows the users to point and click and define a profile 'curve'. I then need to wrap this curve around the Y-axis $n$ number of times.
So, would anyone be able to guide me as to how I would use Trigonometry to calculate the $X$ and $Z$ values of the successive points? If for example, a user clicks and creates the point:
$(1, 1, 0)$
And their sweep resolution ($n$) is set to, say, $10$, then I need to redraw that point every $36$ ($360/10$) degrees around the Y-axis.
Am I correct in assuming that Trigonometry will help me here? If so, can someone please enlighten me a bit as to how to calculate the location of a translated point in 3D space? It's been a while since I took Trig, and I don't believe we ever left 2D space.
EDIT: I attempted to use:
$x'=x\cos\theta-z\sin\theta$
$y'=y$
$z'=x\sin\theta+z\cos\theta$
, as per my understanding of AMPerrine's answer, and I don't think it worked as I'd hoped:
// this is in a loop // setup the new angle double angle = i>0 ? (360/sweepResolutionMod)*i : 0; angle = angle * (M_PI/180); // for each point... for( int i=0; i
This produces no screen output, but console output of:
(0.048, -0.296, 0.0) by 0 radians = (0.048, -0.296, 0) (0.376, -0.508, 0.0) by 0 radians = (0.376, -0.508, 0) (0.72, -0.204, 0.0) by 0 radians = (0.72, -0.204, 0) (0.652, 0.176, 0.0) by 0 radians = (0.652, 0.176, 0) (0.368, 0.504, 0.0) by 0 radians = (0.368, 0.504, 0) (0.048, -0.296, 0.0) by 0.628319 radians = (0.0388328, -0.296, 0.0282137) (0.376, -0.508, 0.0) by 0.628319 radians = (0.30419, -0.508, 0.221007) (0.72, -0.204, 0.0) by 0.628319 radians = (0.582492, -0.204, 0.423205) (0.652, 0.176, 0.0) by 0.628319 radians = (0.527479, 0.176, 0.383236) (0.368, 0.504, 0.0) by 0.628319 radians = (0.297718, 0.504, 0.216305) (0.048, -0.296, 0.0) by 1.25664 radians = (0.0148328, -0.296, 0.0456507) (0.376, -0.508, 0.0) by 1.25664 radians = (0.11619, -0.508, 0.357597) (0.72, -0.204, 0.0) by 1.25664 radians = (0.222492, -0.204, 0.684761) (0.652, 0.176, 0.0) by 1.25664 radians = (0.201479, 0.176, 0.620089) (0.368, 0.504, 0.0) by 1.25664 radians = (0.113718, 0.504, 0.349989) ... (0.048, -0.296, 0.0) by 6.28319 radians = (0.048, -0.296, -1.17566e-17) (0.376, -0.508, 0.0) by 6.28319 radians = (0.376, -0.508, -9.20934e-17) (0.72, -0.204, 0.0) by 6.28319 radians = (0.72, -0.204, -1.76349e-16) (0.652, 0.176, 0.0) by 6.28319 radians = (0.652, 0.176, -1.59694e-16) (0.368, 0.504, 0.0) by 6.28319 radians = (0.368, 0.504, -9.0134e-17)
I'm not sure what exactly is going on here.
EDIT 2: Updated loop to use radians.
FINAL EDIT (for future generations!):
Here is what I finally got working, after discussing some linear algebra with a teacher at college:
void displayPersp(void) { glClear(GL_COLOR_BUFFER_BIT); gluLookAt (-2.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); // draw the axis glBegin(GL_LINES); // x glVertex3f(500.0, 0.0, 0.0); glVertex3f(-500.0, 0.0, 0.0); // y glVertex3f(0.0, -500.0, 0.0); glVertex3f(0.0, 500.0, 0.0); // z glVertex3f(0.0, 0.0, -500.0); glVertex3f(0.0, 0.0, 500.0); glEnd(); cout << endl; double previousTheta = 0.0; for( int i=0; i<=sweepResolutionMod; i++ ) { double theta = i>0 ? (360/sweepResolutionMod)*i : 0; theta = theta * (M_PI/180); if( clickedPoints.size() > 1 ) { // the 'vertical' piece glBegin(GL_LINE_STRIP); for(int i=0; i