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...