C++ 用于沿数字键轴插值T的容器
是否存在这样一个容器:当使用10处的键1和20处的键2进行初始化时,当在15处访问时,将使用返回值为T的(键1、键2、0.5)调用插值回调函数 回调确保我们可以使用首选的S曲线进行插值。我希望每一端的访问都以1.0作为因子传递相同的密钥 伪代码:C++ 用于沿数字键轴插值T的容器,c++,c++17,game-development,C++,C++17,Game Development,是否存在这样一个容器:当使用10处的键1和20处的键2进行初始化时,当在15处访问时,将使用返回值为T的(键1、键2、0.5)调用插值回调函数 回调确保我们可以使用首选的S曲线进行插值。我希望每一端的访问都以1.0作为因子传递相同的密钥 伪代码: Container<float, MyStruct> container; container.insert(10, MyStruct{ .x = 1.0f }); container.insert(20, MyStruct{ .x
Container<float, MyStruct> container;
container.insert(10, MyStruct{ .x = 1.0f });
container.insert(20, MyStruct{ .x = 2.0f });
auto middlepoint = container.get(15,
[] (const MyStruct& a, const MyStruct& b, float factor) {
return MyStruct{ a.x * factor + b.x * (1.0 - factor) };
});
assert(middlepoint.x ~ 1.5f);
集装箱;
insert(10,MyStruct{.x=1.0f});
insert(20,MyStruct{.x=2.0f});
自动中点=容器。获取(15,
[](常量结构与a、常量结构与b、浮动系数){
返回MyStruct{a.x*因子+b.x*(1.0-因子)};
});
断言(中点x~1.5f);
你看到这个了吗?这个数据结构叫什么
谢谢 C++库中没有这样的容器,它可以完成所有的任务。您需要从一个已排序的容器开始,例如
std::map
,甚至是一个已排序的std::vector
,然后使用std::lower_bound
和/或std::upper_bound
来实现此功能的其余部分。看起来像是std::map
+查找正确的间隔+调用插值函数库的任务是非主题的。不管怎么说,也许是个轮子,但不太复杂。我希望几行代码就足够了,因为您似乎知道如何直接实现它。请注意,这不是一个关于数据结构的问题,因此,不应该有基本的容器来做这样的事情。这看起来像是一个使用DS的操作,而不是它本身应该包含的东西。我实际上是在问这个数据结构是否有名称,但我想没有。我将尝试寻找“轮子”,看看我得到了什么。当然,我以前也用简单的数组实现过这个,但是如果有一些经过深思熟虑的API,那就太好了。