一个很简单的算法问题

XHWXHWXHWchuBuLai 2010-06-11 08:43:14
需要花一条曲线,曲线的点是实时采集到的数据。现在我的问题是,当数据快超过阈值时,需要图像能自动调节横纵坐标轴的范围,使曲线能够始终落在图谱区以内。
但是我又不知道怎么调整阈值最好呢?

我试了下我的算法,当前值xc>=坐标轴长度xend*80%时,就调整xend,--> xend*=1.2。

但这样做的效果比较差,坐标轴出现了小数了。而且调整的纵轴效果也不好,因为纵坐标有时候增长很快的情况下,就多次调整。不知道大家有什么好的算法呢?让轴刻度为整数,而且让曲线更美观些的范围?
...全文
139 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
noahhu 2010-06-12
  • 打赏
  • 举报
回复
楼主自己的思路就没有什么问题,这种做法可以使曲线显示于图形之中,又可以保持图的边上不会有太大的空白。可能困扰楼主的只是如何将轴刻度间距取为整数而已。如果是这样不如用ceil函数和floor函数试试。前者是将变量向大值方向取整,而后者是向小值方向取整。

而真正想动态调整图形的显示范围的话,可能最好的办法就是记录当前图形中的极值,包含新输入点。然后根据最大值和最小值来动态更新坐标轴。坐标值的起始及刻度,均可以使用前面所述的两个函数获得与目标最为最接近的整数。具体使用哪个函数就要值本身的正负了。
gz_qmc 2010-06-12
  • 打赏
  • 举报
回复
一、如果没有必要建议你别这样做,最好让曲线自己滚动。
前面的最早的数据消失,需要时从数据库调数据来画历史曲线。

二、如果你一定要集中在同一画面显示,可以这样:
1、可以开辟缓冲区域,缓冲区域按实际的坐标画。(参考双缓冲解决闪屏资料)
2、按比例在窗口画坐标。
3、把缓冲内容按比例拷贝到窗口指定区域。
4、通知窗口重画
这样你不用考虑小数,整数的问题,只考虑比例尺就可以了
windsting 2010-06-12
  • 打赏
  • 举报
回复
晕倒,csdn用的是非等宽字体,都乱了,就那个意思,凑合看吧。
windsting 2010-06-12
  • 打赏
  • 举报
回复
我怎么觉得这不是个问题呢?关键问题在于,你的解法里面,如何以及怎样确定“坐标轴刻度”,
你可以在坐标轴的长度调整以后,修改“单位长度的表示”,比如,
你当前的x轴长a,单位长度用b表示,新数据使x轴的范围变成了原来的2倍,
这时候,你的图形就会相应的变窄,这时候,你只要等比例的对b同时缩小,
不就没问题了么????如果没看明白,看图或许有点帮助:

放缩前:
|
|---- ----
| ----
+---+---+---+---+->
| 4 8 12 16
|

放缩后:
|
|-- --
| -- --
+-+-+-+-+-+-+-+-+->
| 4 8 12 ... 32
|

不知道这样是不是能解决问题呢??
公共马甲0315 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yys213 的回复:]

乘以2的方法调整好了,如果超过*0.9,就扩大坐标轴,如果低于0.45,就缩小坐标轴为原来的一半。
[/Quote]
强......,好方法呀。
圆圆木公 2010-06-11
  • 打赏
  • 举报
回复
乘以2的方法调整好了,如果超过*0.9,就扩大坐标轴,如果低于0.45,就缩小坐标轴为原来的一半。
liutengfeigo 2010-06-11
  • 打赏
  • 举报
回复

//。。。。无语~
z569362161 2010-06-11
  • 打赏
  • 举报
回复
我虽然不会,但真的希望高人给指点,我也想学习一下。

比直接要作业的强多了

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧