Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从二维路径生成函数f(x)=y?_Javascript_Function_Math - Fatal编程技术网

Javascript 如何从二维路径生成函数f(x)=y?

Javascript 如何从二维路径生成函数f(x)=y?,javascript,function,math,Javascript,Function,Math,我在单个变量上定义了二维路径: var point = path(t); // --> [0.113, 0.883] 迭代t从0到1我可以枚举整个路径,然后绘制连续对[x,y]。这条路径在x轴上没有重叠,所以理论上我应该能够从中得出一个函数,尽管目前我还没有找到确切的方法。如果我只是向下投影到x轴并取[x,y]->y,那么图形是错误的,因为我们正在通过x和y移动,因此如果有时间通过y轴而不是x轴移动,那么当投影到一维时,这将不会反映出来。如何构建将2d路径表示为从x到y的映射的函数 编

我在单个变量上定义了二维路径:

var point = path(t);  // --> [0.113, 0.883]
迭代
t
0
1
我可以枚举整个路径,然后绘制连续对
[x,y]
。这条路径在x轴上没有重叠,所以理论上我应该能够从中得出一个函数,尽管目前我还没有找到确切的方法。如果我只是向下投影到x轴并取[x,y]->y,那么图形是错误的,因为我们正在通过x和y移动,因此如果有时间通过y轴而不是x轴移动,那么当投影到一维时,这将不会反映出来。如何构建将2d路径表示为从x到y的映射的函数

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


函数不重叠这一事实并不重要,但也许可以将其映射到空间索引或空间填充曲线?莫顿曲线减少了尺寸,是自回避和非重叠曲线。形状就像一条z曲线,它是一个分形维数,这意味着它是一个近似值?它经常在地图应用程序中使用:这里:。

我终于明白了!我做了一个二进制搜索算法,它尝试路径(x),并确定[x,y]对中返回的x与被搜索的x之间的差异。然后,它将差异增加一半,然后重试。给定一个ε,它在对数时间内接近右[x,y]对

如果有人想要,我有密码

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


at
是功能路径(t)->[x,y],而
epsilon
是可接受的接近程度。很好

我不确定是否理解这个问题,您想在[0.000,0.001,…0.999,1]中为t调用路径(t),对吗?不,我想将路径(t-->[x,y]转换为f(x-->y)。把[x,y]生成函数变成一个,我提供x,然后得到相应的y,路径(t)函数从哪里来?如果你写了它,你能重新安排方程来消除t吗?我已经定义了路径(t)作为二维贝塞尔曲线样条。原则上,只要它是路径(t)->[x,y]形式的函数,它从哪里来就不重要了。你需要研究你的路径,它是线性的还是单调的,你可能需要使用积分函数来观察不同的变化,以及当它穿过x和y轴时,等等。。。听起来很有趣。你有一个很好的参考空间索引或莫顿曲线?(我也会四处看看)嗯。。。不完全是我要找的,虽然很有趣!谢谢。请在这里或某处发布。这不是使用二进制搜索。。。您将索引域(at的
参数)与
x
域混合在一起。要进行二进制搜索,先从
index0=0
index1=1
开始,瞄准平均值
(index0+index1)/2
,然后决定应该使用平均值更新两个变量中的哪一个。当然,这是“类似二进制搜索”的,灵感来自二进制搜索,而不是书本实现。我觉得我的方法更有效(收敛的步骤更少),因为它从一个好的猜测开始并细化它,而不是从整个范围开始,花几个周期来遇到解决方案的一般区域。我必须做一个实验来找出答案,但在此期间,这是完美的工作!
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];
  }
}