首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何减少10k数据点并在更小的显示屏上显示它们?阿杜伊诺

如何减少10k数据点并在更小的显示屏上显示它们?阿杜伊诺
EN

Stack Overflow用户
提问于 2018-03-28 05:58:21
回答 2查看 155关注 0票数 3

我正在为我的数字万用表开发一个可视化的数据记录器,它将每个测量值写入RS232接口。在那里,我连接了一个很小的3.6并收集了数据点。对于每个点,我都有时间戳和测量值。我将收集10.000个读数。我想以两种方式在显示器(800x480)上显示测量数据。首先是滚动图,它从右向左滚动,显示最后一分钟左右。这工作得很好。

其次,我希望显示所有收集到的总测量值(max10k点)。所以我必须收缩或压缩数据,但我想保留曲线的形状。为了让你知道它应该是什么样子,请在YT (https://youtu.be/SObqPuUozNo)观看来自Dave on EEV的视频,并跳到41:20。在那里,你可以看到另一个数字万用表是如何缩小输入数据并显示它的。在大约1:01:05,10k测量值显示在仅400px宽的显示区域上。

问题是,这是如何做到的?我听说过Douglas-Pucker算法,但不知道这是不是正确的方法,以及如何在Arduino/ Teensy平台上使用它。

非常欢迎您的帮助,谢谢您……

EN

回答 2

Stack Overflow用户

发布于 2018-03-28 12:18:50

我不能只显示所有数据点,因为我使用FT81x作为显示控制器,而且每帧最多只能使用2000个绘制命令。这需要更多的时间。

不管怎样,我用简单的方法解决了这个问题。

我创建了bin,并计算了这个bin中的最小值和最大值。然后简单地在这些点之间画一条线。工作正常!

顺便说一句,我是TO :-)

票数 1
EN

Stack Overflow用户

发布于 2018-03-28 16:54:13

对于在x轴上获得的样本比像素多得多的情况,而不是像LineTo那样的图形,请使用垂直线图形。

因此,根据每个渲染时间帧的采样数量和x分辨率,您应该计算eaxch x和渲染垂直线的yminymax

类似于:

代码语言:javascript
运行
复制
xs=800;
for (x0=x,i=sample_left,y0=y1=sample[i],i<sample_right;i++)
 {
 x = (i-sample_left)*xs/(sample_right-sample_left);
 y = sample[i]; // here add y scaling and offset
 if (x0!=x) { line(x0,y0,x0,y1); x0=x; y0=y; y1=y; }
 if (y0>y) y0=y;
 if (y1<y) y1=y;
 }

其中sample[]是存储值,sample_left,sample_right是要渲染的范围,xs是图x分辨率。为了加快速度,你可以为每个x预先计算y0,y1并渲染它(仅在范围或样本改变时重新计算) ...因此,正如您所看到的,您将只使用dbe行命令,这些命令应该足够快地转换xs。如果您将其重写为integer DDA样式,则可以在不进行乘法和除法的情况下完成x线性插值...

您可能会对以下QA感兴趣:

笔记

再看一眼,被删除的答案采用了同样的方法(可能是在编辑之前通过审查删除的),所以我投票支持恢复删除,即使它的质量比我的低得多,但发布得更快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49523088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档