ruby - 为什么 Ruby cross_product 返回的值与纸上的叉积不同

标签 ruby vector

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 vv 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/

相关文章:

ruby-on-rails - 试图理解特定的 ruby​​ 语法

c++ - 无符号整型 vector C++

c++ - 在 C++ 中对类的 vector 进行排序

ruby-on-rails - 洗劫 : Undefined Method "result"

ruby-on-rails - 在 Ruby 中协调类契约

ruby - 如何在中间人的部分中渲染部分

c++ - 四元数到方向 vector

c++ - RapidXML 加载 xml 文件

java - 链表 vector

ruby-on-rails - railsinstaller 有问题