2009-12-31 435 views
13

如何在不使用編程庫的情況下計算兩個向量的叉積?Python中兩個向量的叉積

E.g給予載體a = (1, 2, 3)b = (4, 5, 6)

+5

了跨產品的配方可以在http://mathworld.wolfram.com/CrossProduct.html找到。如果您仍有編程問題,請在閱讀完之後再回來。 – 2009-12-31 10:18:25

回答

29
import numpy as np 
a = np.array([1,0,0]) 
b = np.array([0,1,0]) 
print np.cross(a,b) 
+1

'沒有使用編程庫'... – 2009-12-31 10:24:47

+0

抱歉。 – fulmicoton 2009-12-31 10:28:58

+7

雖然不是要求的答案,但保羅有一個觀點: 如果你需要這樣的事情,你真的*應該*看看numpy! 另外,如果您在學習中使用3D矢量,請查看VPython - 它使這些事情變得非常容易和有趣。 – 2009-12-31 10:51:12

33

你問的公式跨產品?或者如何在python中進行索引和列表?

其基本思想是,您可以將a和b的元素作爲[0],a [1],[2]等(對於x,y,z)進行訪問,並創建一個新列表與[element_0,element_1,...]。我們也可以將它包裝在一個函數中。

在矢量方面,叉積是元素的反對稱積,它也具有很好的幾何解釋。

無論如何,如果你想自己實現跨產品,你倒不如給你提示,讓你看着辦吧,但那不是真正的SO方式,所以...

def cross(a, b): 
    c = [a[1]*b[2] - a[2]*b[1], 
     a[2]*b[0] - a[0]*b[2], 
     a[0]*b[1] - a[1]*b[0]] 

    return c 
+0

感謝您的標記! – blur959 2009-12-31 12:26:58

+7

不客氣(但沒有必要感謝我們每個人)但是,你可以「接受」其中一個答案 - 提示,提示,... – 2009-12-31 12:55:59

1

,這可能會奏效;

def crossProd(a,b): 
     dimension = len(a) 
     c = [] 
     for i in range(dimension): 
     c.append(0) 
     for j in range(dimension): 
      if j <> i: 
      for k in range(dimension): 
       if k <> i: 
       if k > j: 
        c[i] += a[j]*b[k] 
       elif k < j: 
        c[i] -= a[j]*b[k] 
     return c 
+1

使用遞歸這個?...它會更優雅。 – Sardathrion 2012-07-05 10:46:20

1

老了,但如果有一個人永遠都需要: 我這樣做是這樣的:

高清cross_product(U,V):

dim = len(u) 
s = [] 
for i in range(dim): 
    if i == 0: 
     j,k = 1,2 
     s.append(u[j]*v[k] - u[k]*v[j]) 
    elif i == 1: 
     j,k = 2,0 
     s.append(u[j]*v[k] - u[k]*v[j]) 
    else: 
     j,k = 0,1 
     s.append(u[j]*v[k] - u[k]*v[j]) 
return s