c++ - 无限图算法

标签 c++ algorithm qt qwt

我需要实现一个“无限图”,但我不知 Prop 体如何制定算法。

我将 Qt 与 Qwt 一起使用,其中我所有的点都存储在 QVector<double> 中;当新数据到达时,它被附加到 vector 的末尾。与经典图表不同,屏幕上显示的所有数据都会在某个时间点更新,无限图表理论上存储自绘图开始以来收到的所有数据。这会产生“当曲线到达图的左侧时减少曲线”的效果,例如在此图像中: plot .

但是我无法在点 vector 中维护所有数据,因为屏幕上没有无限像素;每当有新点到来时,我都需要减去一点。

但是如何以产生“无限图”效果的方式做到这一点呢?我想我不能在新数据到达时随机从曲线的任何部分删除一个点;这肯定不会产生“变小”的效果。

我考虑过删除一个点并让所有剩余的点都收到它们所拥有的次要值的想法(因此当每个新数据到达时,所有已经存在的点将在其 x 值中收到 -1),但是我不确定这会起作用。有人有什么想法吗?

编辑

一些用户在下面做了一些问题,这是我的答案:

史蒂夫:不; x 轴不会不断变化以等于收到的总点数;这只是它应该看起来的样子,因为它应该是一个显示“所有”接收到的数据的图表。但是屏幕是有尺寸限制的,因此,x 轴也将有尺寸限制,因为我不会假装在屏幕上每个可用像素绘制超过一个点(更具体地说,570)。现在记住一些要点:说 x 轴将受到大小限制并不意味着它必须具有 0-570 的比例;比例值本身可能会改变,但包含要绘制的点的 vectos 的大小将是固定的,因为我不想在我的嵌入式应用程序中存储 100.000 点的 vector !

quantdev:“无限图”是理论上绘制自绘图开始以来接收到的所有数据的图,与固定时间图显示的相反(绘制的是“过去 10 秒内接收的数据” ).但显然那是纯粹的理论,因为没有无限大小的屏幕来显示所有点,也没有足够的内存来存储无限大小的点 vector 。所以我想要的是保持一个最小尺寸的 vector 和要绘制的点(我认为它等于屏幕上的像素数)并且仍然具有无限图形效果。此外,该图必须具有所附图像上显示的效果:数据越旧,图上变得越小(注意:但与图像的位置相反,因为绘图将从右到左)。

Tay2510:给你!可以肯定的是,不会像示波器那样产生滑动效果;该图将固定 x 轴。

最佳答案

不要一次删除一个点。从数学上讲,这变得相当困惑。您必须过于频繁地进行插值,这会导致数值精度下降。

相反,继续向 vector 添加点,直到大小是所需大小的两倍。在这一点上,平均所有点对以将 vector 的长度减半。 IE。新的 x[3] 是旧的 (x[6]+x[7])/2

绘制时,不要直接使用x[],因为通常点数太多。相反,您必须在 2 个相邻点之间进行插值。

关于c++ - 无限图算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24171757/

相关文章:

c++ - 如果 C++11 lambda 返回错误类型,则没有 clang 警告或错误

java - 在元素重置之前找到它曾经是什么数字

arrays - 如何在两个排序数组的并集中找到第 k 个最小的元素?

c++ - 画线/删除部分(Qt/C++)

c++ - 使用符号位翻转和加法进行浮点减法

c++ - 无法将参数 1 从 'char' 转换为 'LPCWSTR'

c++ - qApp->installTranslator() 和 tr 没有翻译?

algorithm - 让电脑实现360度=0度,旋转一个炮塔

c++ - 在 qt 应用程序内执行 qt 应用程序

python - 如何从 Qt::namespase (Qt5, Python3.x) 导入?