0

我有一个从 cloudpoint 生成的网格,可以描述为z = f(x,y),所以我使用scipy.interpolate.bisplrepand bisplev,效果很好。

bisplev可以与参数一起使用dx=n和/或dy=n使得结果是n评估点的阶导数。我计划用它来计算平均曲率和高斯曲率(surfature在 Matlab 中调用),这应该涉及获得曲面的二阶偏导数

一次使用其中一个偏导数的结果dx非常好,清楚地将渐变表示为“阴影”效果,如这张从人类背部拍摄的图像中所见(代码优先):

    self.spline = inter.bisplrep(self.pointlist[:,1],
                                 self.pointlist[:,0],
                                 self.pointlist[:,2], s=smoothing_factor)
    self.mesh_shadow = inter.bisplev(yy.flat, xx.flat, self.spline, dy=1)

在此处输入图像描述

到现在为止还挺好。问题是:当我同时要求两个偏导数时,我无法理解(也找不到任何解释)结果的含义是什么,因为没有任何明显的数字或视觉含义。例如,如果我使用dxAND dy

self.mesh_shadow = inter.bisplev(yy.flat, xx.flat, self.spline, dx=1, dy=1)

我明白了: 在此处输入图像描述

所以,我想知道:

  1. 由 给出的表面的一阶偏导数的同时结果的数学/几何意义是bislplev(..., dx=1, dy=1)什么?
  2. 有没有办法从 获得最大斜率(在任何方向)bislplev(..., dx=1, dy=1)
  3. 首先,两个偏导数是否应该一起调用?我知道我可以使用,比如说,(..., dx=1, dy=2)这个函数似乎产生了“有效”的结果,但这有什么意义吗?

每次,返回值都是一个 (Y,X) 形的单个浮点值数组(Z 或其与导数相关的值之一)。

有什么帮助吗?

谢谢阅读

4

1 回答 1

1
  1. 用 dx=n, dy=m 得到的偏导数是数学对象(或者更确切地说,它的数值近似)

    (d/dx)^n (d/dy)^mf(x,y)

  2. 您不能仅从 dx=2,dy=0 和 dx=0,dy=2 计算高斯曲率——通常您还需要交叉导数 dx=1,dy=1。

  3. 偏导数 (d/dx)^n (d/dy)^mf(x,y) 在数学上是明确定义的。使用样条曲线,如果您的阶数太高,您应该开始得到零点或不连续点。

于 2012-05-12T17:01:41.360 回答