Math 展平曲面

Math 展平曲面,math,transformation,surface,flatten,Math,Transformation,Surface,Flatten,我正试图计算一个用于牙科成像的全景投影 我有一个矩形曲面,通过分段函数在一个方向上“弯曲”。如果我们从上面看,它看起来像一个规则的分段函数 “分段线性函数”仅由一组3D点定义。 所有的点都在同一平面上。所有三维点所在的平面与曲面正交 (请参见左上角窗口中的绿线) 我正在寻找合适的方法来“压平”它。(非线性变换) 平面应具有与曲面相同的“长度”。(它不是经典的正交投影) 最后,我将使用“平面”作为画布来显示感兴趣的信息 (底部窗口) 最好的,我是这样看的: 我想: 从曲线中取三个后续点P0、

我正试图计算一个用于牙科成像的全景投影

我有一个矩形曲面,通过分段函数在一个方向上“弯曲”。如果我们从上面看,它看起来像一个规则的分段函数

“分段线性函数”仅由一组3D点定义。 所有的点都在同一平面上。所有三维点所在的平面与曲面正交

(请参见左上角窗口中的绿线)

我正在寻找合适的方法来“压平”它。(非线性变换)

平面应具有与曲面相同的“长度”。(它不是经典的正交投影)

最后,我将使用“平面”作为画布来显示感兴趣的信息

(底部窗口)

最好的,我是这样看的:

我想:

  • 从曲线中取三个后续点
    P0、P1、P2
  • 计算
    U0、V0、U1、V1

    U0 = P1-P0
    U1 = P2-P1
    V0 = cross(U0,(0,0,1)); V0=half_height/|V0|
    V1 = cross(U1,(0,0,1)); V1=half_height/|V1|
    
    所以
    A,B
    就是
    P0+/-V0
    C,D
    就是
    P1+/-V1
    。在叉积中,使用任何与
    U0、U1
    不平行的向量,我选择
    (0,0,1)
    ,但如果它是平行的,则选择任何其他

  • 使
    ABCD
    重新弯曲

    例如,计算
    A'B'C'D'

    A'.x = B'.x = index_of(P0) * sizex
    C'.x = D'.x = index_of(P0) * sizex + sizex
    A'.y = D'.y = sizey
    B'.y = C'.y = 0
    
    其中,
    sizex,sizey
    是矩形段的大小。您也可以使用
    |U0 |,|V0 |
    ,但在这种情况下,起始
    x
    将是积分曲线长度

  • 计算
    ABCD
    A'B'C'D'
    之间的转换

    U0 = P1-P0
    U1 = P2-P1
    V0 = cross(U0,(0,0,1)); V0=half_height/|V0|
    V1 = cross(U1,(0,0,1)); V1=half_height/|V1|
    
    因此,对于
    ABCD
    compute
    (x,y)
    内的每个像素p
    A'B'C'D'。
    x`很简单:

    x = A'.x + dot(P-P0,U0)/|P-P0|
    
    y
    很棘手,需要进行一些调整以满足您的需要(因此结果很平滑,符合您的喜好)。首先,尝试简单的方法(将导致分段之间的接缝)

    现在只需将位置
    p
    处的像素复制到位置
    (x,y)

    为了使这更平滑,您可以根据
    点(p-P0,U0)/(| p-P0 |*| U0 |)使
    V
    V0,V1
    之间插值,这样它将无缝地改变

    t = dot(P-P0,U0)/(|P-P0|*|U0|)
    V = V0 + (V1-V0)*t
    y = (A'.y+B'.y)/2 + dot(P-P),V)/|P-P0|
    
    如果需要帮助确定点是否在内部,则像素
    p
    在内部如果

    dot(P-P0,U0)/(|P-P0|*U0) = <0.0,1.0>
    
    dot(P-P0,U0)/(P-P0 |*U0)=
    
  • 循环#1用于曲线的所有段

    逐曲线的单个采样点(不是按3…)


  • 除非你给出定义变换的“分段函数”的细节,否则我们很难说出任何有意义的话。因此,“分段线性函数”只是由一组3D点定义的。所有的点都在同一平面上。所有三维点所在的平面与曲面正交。这有用吗?感谢使用恒定密度采样的点吗?非常感谢,这正是我所想的大图-现在在JS/WebGL中实现了这一点:)