u = [1, -2, 1] # u = i -2j + k
v = [3, 1, -2] # v = 3i + j -2k
理论上,当我对 u x v
进行叉积时,我得到 3i + 5j + 7k 应该是 [3, 5, 7]
但是当我在 IRB 上这样做时,我得到 -(u x v)
irb(main):081:0> u
=> Vector[1, -2, 1]
irb(main):082:0> v
=> Vector[3, 1, -2]
irb(main):083:0> u.cross_product v
=> Vector[-3, -5, -7]
这是 v 和 u 的叉积 v x u
的答案。
Ruby 中的 u.cross_product v
是 v x u
吗?
我很困惑。
最佳答案
这是 cross_product
函数的源代码 (from here):
# File matrix.rb, line 1764
def cross_product(v)
Vector.Raise ErrDimensionMismatch unless size == v.size && v.size == 3
Vector[ v[1]*@elements[2] - v[2]*@elements[1],
v[2]*@elements[0] - v[0]*@elements[2],
v[0]*@elements[1] - v[1]*@elements[0] ]
end
从这个来源看来,计算认为 v
在叉积计算左侧的向量上,而调用该方法的向量被认为在右侧边。这会产生您所看到的结果,因为在叉积计算中交换边会给您一个大小相同但指向相反方向的向量。因此,如果你切换通话,你会得到你在纸上得到的结果:
v.cross_product u
关于ruby - 为什么 Ruby cross_product 返回的值与纸上的叉积不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23831320/