如何从2d路径中创建函数f(x)= y?

时间:2013-06-05 17:48:30

标签: javascript function math

我在单个变量上定义了一个2d路径:

var point = path(t);  // --> [0.113, 0.883]

t0迭代1我可以枚举整个路径,然后绘制连续对[x,y]的图形。路径在x轴上没有重叠,所以理论上我应该可以用它来制作一个函数,尽管目前确切的方法是让我不知所措。如果我只是向下投影到x轴并取[x,y] - > y,那么图形是错误的,因为我们正在通过x和y移动,所以如果有时间在y轴上移动而不是x,那么当投影到一个维度时,这将不会被反射。如何构建表示我的2d路径的函数作为从x到y的映射?

编辑:这是曲线的图像(白线是贝塞尔样条路径(t) - > [x,y],灰色圆圈是原始数据点,绿色线条是原始关键帧数据I用于生成曲线。忽略其余的行):

enter image description here

2 个答案:

答案 0 :(得分:0)

您的功能不重叠这一事实并不那么重要,但也许您可以将其映射到空间索引或空间填充曲线?莫顿曲线减小了尺寸,并且是自我避免和非重叠曲线。形状就像一条z曲线,它是一个分形维数,这意味着它是一个近似值?它通常用于地图应用程序:http://msdn.microsoft.com/en-us/library/bb259689.aspx和此处:http://www.drdobbs.com/database/space-filling-curves-in-geospatial-appli/184410998

答案 1 :(得分:0)

我终于想通了!我做了一个二进制搜索算法,尝试路径(x)并确定[x,y]对中返回的x与所寻找的x之间的差异。然后它增加了一半的差异并再次尝试。给定一个epsilon,它以对数时间接近正确的[x,y]对!

如果有人想要,我会有代码。

编辑:这是代码(用于二进制搜索部分):

function buildBinary(at, epsilon) {
  return function(x) {
    var guess = x;
    var near = at(guess);
    var approx = near[0];
    var diff = x - approx;

    while (Math.abs(diff) > epsilon) {
      guess = guess + diff * 0.5;
      near = at(guess);
      approx = near[0];
      diff = x - approx;
    }

    return near[1];
  }
}

at是函数路径(t) - > [x,y]和epsilon是接近的接近程度。效果很棒!