Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.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
C#将小数组插值为大数组_C#_.net - Fatal编程技术网

C#将小数组插值为大数组

C#将小数组插值为大数组,c#,.net,C#,.net,我有两个相同大小的双倍X和Y数组(任何大小都可以)。 x点之间的差异始终是稳定的。例如X[1]-X[0]=X[2]-X[1]。。。 这两个阵列一起形成(x[i],y[i])点的曲线(比如C1) 我还有另一条固定曲线C2,如图所示: x极限,y极限 (0),(-5) (1e9),(-5) (2e9),(-6.5) (3e9),(-9.2) (6e9),(-16.5) (12e9),(-29) 我希望能够检查C1是否在C2下命中或交叉,但由于大小不同,我不能这样做 我想到的是将大小为6的C2数组插

我有两个相同大小的双倍X和Y数组(任何大小都可以)。 x点之间的差异始终是稳定的。例如X[1]-X[0]=X[2]-X[1]。。。 这两个阵列一起形成(x[i],y[i])点的曲线(比如C1)

我还有另一条固定曲线C2,如图所示:
x极限,y极限
(0),(-5)
(1e9),(-5)
(2e9),(-6.5)
(3e9),(-9.2)
(6e9),(-16.5)
(12e9),(-29)

我希望能够检查C1是否在C2下命中或交叉,但由于大小不同,我不能这样做

我想到的是将大小为6的C2数组插值为大小等于C1数组大小的数组

这样,我将有两个相同大小的Y阵列(一个来自C1,一个来自C2),我可以检查差异。(如果为负值,则低于限值)

我的问题是,考虑到y点之间的差异,我可以使用什么方法将小数组插值为大数组,以及是否有其他方法可以检查我的初始数组是否超出限制


如果有什么不清楚的地方我可以补充,请告诉我,谢谢。

与其存储插值点,我会动态计算并使用它们

假设要比较的点按升序排序,我将按以下步骤进行:

double limitX1 = limitX[0];
double limitY1 = limitY[0];

// Create fake point to the left
double limitX0 = -2;
double limitY0 = limitY1;

double f = 0.0;

int actualLimitIndex = 0;
for (int i = 0; i < x.Length; i++) {
    double x = x[i];
    double y = y[i];

    // Get current limit section
    while (x > limitX1) {
        actualLimitIndex++;
        limitX0 = limitX1;
        limitY0 = limitY1;
        limitX1 = limitX[actualLimitIndex];
        limitY1 = limitY[actualLimitIndex];
        f = (limitY1 - limitY0) / (limitX1 - limitX0);
    }

    // Interpolate limit
    limitY = limitY0 + (x - limitX0) * f;

    // Do whatever you have to do here.
    if (y > limitY) {
        // We are above limit
    } else {
        // We are at or below limit
    }
}
double limitX1=limitX[0];
双极限1=极限[0];
//创建左侧的伪点
双极限x0=-2;
双重限制0=限制1;
双f=0.0;
int-actualLimitIndex=0;
对于(int i=0;ix1){
实际指数++;
limitX0=limitX1;
limitY0=limitY1;
limitX1=limitX[实际有效指数];
limitY1=limitY[实际限制指数];
f=(limitY1-limitY0)/(limitX1-limitX0);
}
//插值极限
limitY=limitY0+(x-limitX0)*f;
//在这里你要做什么就做什么。
如果(y>limitY){
//我们超出了限制
}否则{
//我们已达到或低于极限
}
}
这还假设没有x值低于最小值或高于最大x限制。如果可能,请添加其他检查


这使用线性插值。请参阅:。

一些示例数据确实有助于使这个问题更加具体和明确。目前,我唯一能描绘的是一对2000个元素数组(double?
Point
s?)和某种限制元组数组?你已经拥有的任何代码都可以发布。你所说的限制是什么意思?二维空间中的点的限制为面积。这个限制点列表是如何作为限制的?@OlivierJacot Descombes我编辑了我的问题。一个点由x阵列中的x和y阵列中的y组成。@这里的问题是,当根据x阵列和y阵列绘制曲线时,它不应该穿过上述曲线。您的问题并不清楚。真正的问题是“可能”类似于“如何将一个图与基线图进行比较,并检查它是否交叉”。现在你的问题已经结束了,因为还不够清楚。你需要修改你的问题,以澄清每一个方面,因此你的意图毫无疑问,你的问题将被重新打开,你将得到答案。你不需要过于复杂,也可以只提及你拥有什么,你正在尝试做什么,你尝试了什么,你在寻找什么样的结果等等。