代码之家  ›  专栏  ›  技术社区  ›  Gayan

二维插值算法

  •  8
  • Gayan  · 技术社区  · 14 年前

    我有两个形状,是一个通道的横截面。我想计算两个定义点之间中间点的横截面。 最简单的(相对简单的)是什么?在这种情况下使用的算法?

    P.S.:我遇到了几个算法,比如自然邻居和泊松,它们看起来很复杂。我正在寻找一个简单的解决方案,可以很快实现。

    编辑:我删除了标题中的“最简单”一词,因为它可能会误导读者

    3 回复  |  直到 14 年前
        1
  •  3
  •   High Performance Mark    14 年前

    这很简单:

    1. 在每个横截面上,沿横截面的边界以均匀间隔绘制n个点。
    2. 从横截面1上的第n个点到横截面2上的第n个点绘制直线。
    3. 在旧横截面之间所需的距离处取下新横截面。

    更简单的是:

    1. 使用其中一个现有横截面而不进行修改。

    我想第二个建议可能太简单了,但我敢打赌没有人建议更简单的建议!

    编辑以下操作评论:(太多,无法重新评论)

    好吧,你确实要求一个简单的方法!我不确定我对第一种方法的看法是否和你一样。如果横截面不是太奇怪(如果它们是凸多边形的话可能是最好的),并且您没有做任何奇怪的事情,例如将一个横截面的左侧映射到另一个横截面的右侧(从而强制许多交叉线),那么该方法应该产生某种合理的横截面tion. 在您建议使用三角形和矩形的情况下,假设三角形位于其底部,顶部有一个顶点。将该点映射到矩形的左上角,然后沿相同方向(顺时针或逆时针)围绕连接相应点的两个横截面的边界进行操作。我看不到任何交叉线,而且在两个横截面之间的任何距离处都能看到清晰的形状。

        2
  •  1
  •   ldog    14 年前

    注意,对于高性能mark的答案有一些含糊不清的地方,您可能需要解决这些问题,并定义其方法输出的质量。最重要的是,当你画 n 两个横截面上的点,确定它们之间的对应关系,也就是说,如果按照高性能标记建议的方式进行操作,那么标记点的顺序就变得很重要。

    我建议同时通过两个横截面旋转(正交)平面,然后在一个横截面上与该平面相交的一组点只需与在另一横截面上与该平面相交的一组点相匹配。假设这些集合中的点的个数没有限制,但它确实降低了原情形下对应问题的复杂性。

        3
  •  1
  •   ldog    14 年前

    这是对这个问题的另一次尝试,我认为这是一次更好的尝试。

    给定两个横截面 C_1 , C_2

    每个地方 C_i 坐标系全局坐标系 (x,y) 所以它们相对的位置是有意义的。分割每个 CII 形成上下曲线 U_i L_i . 我们的想法是,你需要不断地变形曲线 U_1 U_2 L_1 L_2 . (注意,您可以扩展此方法来拆分每个 CII 进入之内 m 如果你愿意,可以用曲线。)

    方法如下。对于每一个 T_i = U_i, or L_i 样品 n 点,并确定插值多项式 P{T_i}(x) . 如下文适当指出的,插值多项式易受振荡影响,特别是在端点处。代替插值多项式,可以使用更稳健的最小二乘拟合多项式。然后定义多项式的变形 P{U_1}(x) = a_0 + a_1 * x + ... + a_n * x^n P{U_2}(x) = b_0 + b_1 * x + ... + b_n * x^n 作为 Q{P{U_1},P{U_2}}(x, t) = ( t * a_0 + (1 - t ) b_0 ) + ... + (t * a_n + (1-t) * b_n ) * x^n 其中变形 Q 定义为 0<=t<=1 哪里 t 定义变形在哪个点(即 t=0 我们在 UY2 及AT t=1 我们在 小精灵 每隔一天 T 我们正处于两者的某种连续变形状态。) 同样的道理 Q{P{L_1},P{L_2}}(x, t) . 这两个变形在两个横截面之间构造了一个连续表示,您可以在任意位置对其进行采样 T .

    注:这实际上是线性插值两个截面的插值多项式的系数。另外请注意,拆分横截面时,可能应该设置约束,即必须在匹配的端点处拆分横截面,否则变形中可能会有“孔”。

    我希望这是清楚的。

    编辑:讨论了插值多项式中的振荡问题。