2009-12-31 438 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