1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Circle normal to a vector

  1. Dec 27, 2014 #1
    i have a 3d vector, and i want to draw a circle with a specified radius around the vector (for computer programming)
    so i have the location of the center of the circle(first point of the vector)
    but i also want the circle to be at a right angle to the vector

    my approach:
    gif.gif
    the equation of a sphere centered at x,y,z.
    but i need to find the relation between u and v so that it forms a circle normal to some specified vector

    please help thanks
     
  2. jcsd
  3. Dec 27, 2014 #2

    mfb

    User Avatar
    2016 Award

    Staff: Mentor

    That might be possible, but it looks complicated.

    I would find two vectors u,v orthogonal to the specified vector (let's call it "n") and orthogonal to each other. This can be done with the cross-product. Afterwards you can combine them with sin and cos as in the 2-dimensional case.
     
  4. Dec 27, 2014 #3
    if a plane normal to a vector xn,yn,zn is given by
    gif.gif
    then i think i could replace the parametric sphere coordinates with the coordinates to the plane and solve
    gif.gif
    what i want out of this is the relation between u and v, but i cant figure out how to solve it
    then once i have u and v in terms of a single t parameter i can center it at the correct point.

    do you mean the u,v vectors as in the parameters? or something else?
     
  5. Dec 27, 2014 #4

    mfb

    User Avatar
    2016 Award

    Staff: Mentor

    Probably a bad choice of variable names in my post. I mean two vectors.
    I don't like the sphere approach. It might be possible, but I don't see the solution there while I am sure the other method works.
     
  6. Dec 28, 2014 #5

    HallsofIvy

    User Avatar
    Staff Emeritus
    Science Advisor

    To "draw a circle normal to a vector" the first thing you need to do is find a plane normal to the vector. That's easy- if the plane is given by [tex]A\vec{i}+ B\vec{j}+ C\vec{k}[/tex] then any plane normal to it is of the form [tex]Ax+ By+ Cz= D[/tex] for some constant D. Finding D is another matter. A vector does not have a specified position in space.
     
  7. Dec 28, 2014 #6

    mfb

    User Avatar
    2016 Award

    Staff: Mentor

    The center of the circle seems to be given as (x,y,z).
     
  8. Dec 28, 2014 #7
  9. Dec 28, 2014 #8

    mfb

    User Avatar
    2016 Award

    Staff: Mentor

    We don't know either because you did not show what you did.
     
  10. Dec 28, 2014 #9
    Code (Text):
                double theta = Math.Atan2(curly[i, j, k], curlx[i, j, k]);
                double phi = Math.Acos(curlz[i, j, k] / Math.Sqrt(curlx[i, j, k] * curlx[i, j, k] + curly[i, j, k] * curly[i, j, k] + curlz[i, j, k] * curlz[i, j, k]));
                double costheta = Math.Cos(theta);
                double sintheta = Math.Sin(theta);
                double cosphi = Math.Cos(phi);
                double sinphi = Math.Sin(phi);

                int l = 0;
                double t ;
                int nitert = 20;
                double dt = 2 * Math.PI / nitert;
                double[] xcircle = new double[nitert+1];
                double[] ycircle = new double[nitert+1];
                double[] zcircle = new double[nitert+1];
                circlepoints.Add(new Point3D(-size * sinphi / 25 + xcurrent, size * cosphi / 25+ ycurrent, zcurrent));
           
      while (l <= nitert)
                {
                    t = l * dt;
                    xcircle[l] = -size * Math.Cos(t) * sinphi / 25 + size * Math.Sin(t) * costheta * cosphi / 25 + xcurrent;
                    ycircle[l] = size * Math.Cos(t) * cosphi / 25 + size * Math.Sin(t) * costheta * sinphi / 25 + ycurrent;
                    zcircle[l] = -size * Math.Sin(t) * sintheta / 25+ zcurrent;
                    circlepoints.Add(new Point3D(xcircle[l], ycircle[l], zcircle[l]));
                    circlepoints.Add(new Point3D(xcircle[l], ycircle[l], zcircle[l]));

                    l++;
                }
    I always feel bad asking people to look over my code lol.

    anyway curlx,curly,curlz is the normal vector(yes im doing a stokes theorem program :D)
    and xcurrent,ycurrent,zcurrent is the position vector.

    size/25 is the radius of the circle.
     
  11. Dec 28, 2014 #10
    Hey, dunno if I understand completely but here is what I think (btw I am still getting used to using the latex math symbols here so I won't use them in this response)

    Use the cross product (copied&pasted this one):
    eq0006MP.gif

    Here the vector is normal to the circle's surface in the positive Z direction. That is the crossproduct of r's x component and y component.
    Vector = rx cross ry
     
  12. Dec 28, 2014 #11
    Continuation of my last post:

    syms u v
    >>R = [u 0 0; 0 u*cos(v) 0; 0 0 u*sin(v)]

    R =

    [ u, 0, 0]
    [ 0, u*cos(v), 0]
    [ 0, 0, u*sin(v)]

    >> vector = cross(R(1,: ),R(2,: ) )

    vector =

    [ 0, 0, u^2*cos(v)]

    *had to edit away the simily faces
     
    Last edited: Dec 28, 2014
  13. Dec 29, 2014 #12
    the wolfram site says:
    but actually they made a mistake. here phi is the azimuth and theta is the zenith.
    someone should probably tell them :rolleyes:
     
  14. Dec 30, 2014 #13
    Last edited by a moderator: Apr 17, 2017
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Circle normal to a vector
Loading...