gpt4 book ai didi

c# - 通用线性插值器 : how to cope with DateTime?

转载 作者:太空狗 更新时间:2023-10-29 23:35:22 25 4
gpt4 key购买 nike

我想编写一个 LinearInterpolator 类,其中 X 是 X 轴值的类型,Y 是 Y 轴值的类型。我看不出如何做到这一点,使 X 可以是 DateTime 或 double。该类如下所示(未经测试):

class LinearInterpolator<X, Y>
{
private List<X> m_xAxis;
private List<Y> m_yAxis;

public LinearInterpolator(List<X> x, List<Y> y)
{
m_xAxis = x;
m_yAxis = y;
}

public Y interpolate(X x)
{
int i = m_xAxis.BinarySearch(x);
if (i >= 0)
{
return m_yAxis[i];
}
else
{
// Must interpolate.
int rightIdx = ~i;
if (rightIdx >= m_xAxis.Count)
--rightIdx;
int leftIdx = rightIdx - 1;

X xRight = m_xAxis[rightIdx];
X xLeft = m_xAxis[leftIdx];
Y yRight = m_yAxis[rightIdx];
Y yLeft = m_yAxis[leftIdx];

// This is the expression I'd like to write generically.
// I'd also like X to be compilable as a DateTime.
Y y = yLeft + ((x - xLeft) / (xRight - xLeft)) * (yRight - yLeft);
return y;
}
}
}

这在 C++ 中很容易,但我是 C# 泛型的新手,所以任何帮助将不胜感激。

最佳答案

使用 DateTime.Ticks 作为内插值。您可以使用 long 类型作为泛型在时间之间进行插值。

关于c# - 通用线性插值器 : how to cope with DateTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2366985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com