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!

Find orthogonal vector to current vector in 3D

  1. Dec 17, 2012 #1

    In 2D I know a simple answer: vector (a,b) is orthogonal to vector (-b,a)

    Is there anyway similar to that to find an orthogonal vector in 3D?
  2. jcsd
  3. Dec 17, 2012 #2
    You can use the dot product. For example, if you have a vector v and want to find vector c that is orthogonal to v, then use the dot product <v,c> and set it equal to 0.

    v = (4,2,3)
    c = (x,y,z) = ?

    (i) Set the dot product to zero:
    <v,c> = 4x + 2y + 3z = 0

    (ii) Choose some values for x and y, e.g. x=0 and y=-3

    (iii) Solve the equation in (i) for z:
    z = 1/3*(-4x-2y) = 1/3*(0+6) = 2

    Result: c = (0,-3,2)


    Another possibility is to use the cross product.
    If vector v is given, choose some vector p (not parallel to v) and form the vector c = v x p.

    v = (4,2,3)

    (i) Choose an arbitrary vector p (not parallel to v):
    p = (0,0,1)

    (ii) Form the vector c = v x p (cross product):
    c = (4,2,3) x (0,0,1) = (2,-4,0)


    Note that there are infinitely many vectors that are orthogonal to a given vector.
  4. Dec 17, 2012 #3
    Many thanks

    I knew dot and cross product, but because I write code so I need the simplest way to boost performance. As in 2D case I don't need to calculate anything, just use the trick. Also that it works for normalized vectors which doesn't need square root, a slow operation. I hope there are some tricks like that in 3D

  5. Dec 17, 2012 #4


    User Avatar
    Science Advisor
    Homework Helper

    There isn't a unique vector orthogonal to a given vector in 3D. If the vector doesn't need to have any other properties, the same "trick" works. A vector orthogonal to (a, b, c) is (-b, a, 0), or (-c, 0, a) or (0, -c, b).

    But if you want a unit orthogonal vector, you will have to use something like a square root.
    Last edited: Dec 17, 2012
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook