如何设计一个简单的代码来根据给定的几何散点自动量化二维粗糙表面?例如,要使用数字,r=0 表示光滑表面,r=1 表示非常粗糙的表面,当 0 < r < 1 时,表面介于光滑和粗糙之间。
为了更明确地说明这个问题,下图用于显示几个二维粗糙表面的草图。点是具有给定坐标的散点。因此,可以连接每两个相邻的点,并且可以计算每个段的法线向量(用箭头标记)。我想设计一个类似的功能
def roughness(x, y):
...
return r
其中x
和y
是每个散点的坐标序列。例如,在情况 (a) 中,x=[0,1,2,3,4,5,6]
, y=[0,1,0,1,0,1,0]
; 在情况 (b), x=[0,1,2,3,4,5]
, y=[0,0,0,0,0,0]
. 当我们调用函数roughness(x, y)
时,我们将得到 r=1(非常粗糙)对于 case (a) 和 r=0 (smooth) 对于 case (b)。对于情况(d),可能 r=0.5(中)。问题被细化为我们需要在函数中放置哪些适当的组件roughness
?
一些初步的想法:
表面的粗糙度是一个局部概念,我们只在特定区域范围内考虑,即只考虑感兴趣位置周围的几个局部点。使用局部法线向量的平均值?这可能会失败:(a)和(b)具有相同的平均值,(0,1),但(a)是粗糙表面,(b)是光滑表面。使用局部法线向量的方差?这也可能失败:(c)和(d)具有相同的方差,但(c)比(d)更粗糙。