SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4942|回复: 0
打印 上一主题 下一主题

[Plot] 使用tplot_chart绘图

[复制链接]

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
跳转到指定楼层
楼主
发表于 2016-5-26 20:50:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ancientcc 于 2016-8-12 10:48 编辑

tplot_chart用于在场景中绘图。它的特点是把要画的内容平摊到单元。它要求数据是在一个文件中,内容是以着一个自定义的块一个个铺下去。它要求块的前四字节指示一个升序的时间值。举个例子,块是以下的一个struct。
  1. struct ttemperature: public tplot_chart::titem
  2. {
  3.         int value1;
  4.         int value2;
  5.         int battery;
  6. };
复制代码

为内存和struct一致,该struct不能定义成员函数。titem是个只有时间字段的struct。
  1. struct titem
  2. {
  3.         int time;
  4. };
复制代码


使用tplot_chart绘图要经过三个步骤:生成指示单元如何画的unit_params,在大地图绘图和在小地图绘图。

步骤一:生成指示如何画单元的unit_params
它是通过调用generate。
  1. void generate(tfile& file, int used_units, int zoom)
  2. file:数据文件。
  3. used_units:可使用的单元数。
  4. zoom:每单元像素数。
复制代码

它会生成unit_params,指示单元该如何画图表。下图是当中过程。

如何计算每个单元要使用多少个样本?
假定要使用单元数(N)是固定的,样本数(M)是固定的。使用前方优先扩散法,它生成的结果余数被分摊到前面的J个单元,分摊到余数的单元增加一个样本。
  1. int integer = M / N;
  2. int can_spread = M - integer * N;
  3. for (int num = 0; num < N; num ++) {
  4.         int integer2 = integer;
  5.         if (can_spread) {
  6.                 integer2 ++;
  7.                 can_spread --;
  8.         }
  9.         // integer2指示分配给该单元的样本数
  10. }
复制代码


1、每个样本都有time字段,而且这个time值是升序。
2、样本是按时间被平均到N个单元,而不是简单按样本数。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-2 00:21 , Processed in 0.052563 second(s), 23 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表