C#将小数组插值为大数组
我有两个相同大小的双倍X和Y数组(任何大小都可以)。 x点之间的差异始终是稳定的。例如X[1]-X[0]=X[2]-X[1]。。。 这两个阵列一起形成(x[i],y[i])点的曲线(比如C1) 我还有另一条固定曲线C2,如图所示: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极限
(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阵列绘制曲线时,它不应该穿过上述曲线。您的问题并不清楚。真正的问题是“可能”类似于“如何将一个图与基线图进行比较,并检查它是否交叉”。现在你的问题已经结束了,因为还不够清楚。你需要修改你的问题,以澄清每一个方面,因此你的意图毫无疑问,你的问题将被重新打开,你将得到答案。你不需要过于复杂,也可以只提及你拥有什么,你正在尝试做什么,你尝试了什么,你在寻找什么样的结果等等。