【问题标题】:Shape-matching soft body dynamics - implementing formula形状匹配软体动力学-实现公式
【发布时间】:2016-01-19 10:31:31
【问题描述】:

我正在尝试实现基于this paper by Müller et al. 的软体物理。我数学不是很差,但是在实现公式(7)时,我就是搞不懂语义。

是这样的:

A = \left( \sum_i m_i p_i q_i^T) \right) \left( \sum_i m_i q_i q_i^T \right)^{-1}

with q_i and p_i being vectors (from center of mass current position,
to be exact)

(请原谅我的 TeX)。这对我来说没有意义 - 矢量积之和的乘积应该给出一个标量,但结果被视为矩阵。

clojure (core.matrix) 中直接实现公式可以得到标量结果。

我尝试修改实现,将 N 向量 p 和 q 替换为 NxN 零矩阵,并将 p 和 q 作为相应的第一行/列。这给了我矩阵结果,但是结果转换使我的坐标错误地偏离了原始位置。

有人对这个算法有经验吗?

【问题讨论】:

    标签: algorithm math softbody


    【解决方案1】:

    导致问题的是clojure.core.matrix 的实现。通常列向量和行向量的乘积应该得到一个矩阵(而行向量和列向量的乘积得到一个标量)。

    core.matrix 在这两种情况下都返回标量,尽管它的 api 文档另有说明。所以我不得不扩展强制乘法的技巧:

         a1
    mmul a2 (b1 b2 b3)    = (mmul [[a1][a2][a3]] [b1 b2 b3])
         a3                 or (mmul [a1 a2 a3] [b1 b2 b3])
    
    is done wrongly, so instead:
    
         (a1 0 0) (b1 b2 b3)
    mmul (b2 0 0) (0  0  0 ) = (mmul [[a1 0 0] [a2 0 0] [a3 0 0]]
         (b3 0 0) (0  0  0 )         [[b1 b2 b3] [0 0 0] [0 0 0]] )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-02
      相关资源
      最近更新 更多