Circle normal to a vector

  • #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
 

Answers and Replies

  • #2
35,269
11,539
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.
 
  • #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?
 
  • #4
35,269
11,539
do you mean the u,v vectors as in the parameters?
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.
 
  • #5
HallsofIvy
Science Advisor
Homework Helper
41,833
962
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.
 
  • #6
35,269
11,539
The center of the circle seems to be given as (x,y,z).
 
  • #8
35,269
11,539
We don't know either because you did not show what you did.
 
  • #9
Code:
            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.
 
  • #10
37
1
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
 
  • #11
37
1
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:
  • #12
the wolfram site says:
While a 2D circle is parameterized by only three numbers (two for the center and one for the radius), in 3D six are needed. One set of parametric equations for the circle in 2D is given by
2.gif

for a circle of radius
3.gif
and center
4.gif
.
In 3D, a parametric equation is
5.gif
,
for a circle of radius
6.gif
, center
7.gif
, and normal vector
8.gif
(
9.gif
is the cross product). Here,
10.gif
is any unit vector perpendicular to
11.gif
. Since there are an infinite number of vectors perpendicular to
12.gif
, using a parametrized
13.gif
is helpful. If the orientation is specified by a zenith angle
14.gif
and azimuth
15.gif
, then
16.gif
,
17.gif
, and
18.gif
can have simple forms:
19.gif
,
20.gif
,
21.gif
.
but actually they made a mistake. here phi is the azimuth and theta is the zenith.
someone should probably tell them :rolleyes:
 

Related Threads on Circle normal to a vector

  • Last Post
Replies
2
Views
7K
  • Last Post
Replies
1
Views
2K
  • Last Post
Replies
2
Views
2K
  • Last Post
Replies
12
Views
5K
Replies
10
Views
894
  • Last Post
Replies
5
Views
12K
Replies
3
Views
2K
Replies
6
Views
8K
Top