DataSeries.java
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2008, AIST, the University of Tokyo and General Robotix Inc.
3  * All rights reserved. This program is made available under the terms of the
4  * Eclipse Public License v1.0 which accompanies this distribution, and is
5  * available at http://www.eclipse.org/legal/epl-v10.html
6  * Contributors:
7  * General Robotix Inc.
8  * National Institute of Advanced Industrial Science and Technology (AIST)
9  */
10 package com.generalrobotix.ui.view.graph;
11 
18 public class DataSeries {
19 
20  // -----------------------------------------------------------------
21  // インスタンス変数
22  private int size_; // データ点数
23  private double[/*size_*/] data_; // データのY座標値(Double.NaNはデータの欠落を示す)
24  private int headPos_; // データ先頭添字
25  private double xOffset_; // X座標値オフセット
26  private double xStep_; // X座標値刻み幅
27 
28  // -----------------------------------------------------------------
29  // コンストラクタ
37  public DataSeries(
38  int size,
39  double xOffset,
40  double xStep
41  ) {
42  size_ = size;
43  xOffset_ = xOffset;
44  xStep_ = xStep;
45  headPos_ = 0;
46  data_ = new double[size];
47  for (int i = 0; i < size; i++) {
48  data_[i] = Double.NaN;
49  }
50  }
51 
52  // -----------------------------------------------------------------
53  // インスタンスメソッド
59  public void setSize(
60  int size
61  ) {
62  size_ = size;
63  headPos_ = 0;
64  data_ = new double[size];
65  for (int i = 0; i < size; i++) {
66  data_[i] = Double.NaN;
67  }
68  }
69 
75  public void setXOffset(
76  double xOffset
77  ) {
78  xOffset_ = xOffset;
79  }
80 
86  public void setXStep(
87  double xStep
88  ) {
89  xStep_ = xStep;
90  }
91 
97  public int getSize() {
98  return size_;
99  }
100 
106  public double getXOffset() {
107  return xOffset_;
108  }
109 
115  public double getXStep() {
116  return xStep_;
117  }
118 
124  public double[] getData() {
125  return data_;
126  }
127 
133  public int getHeadPos() {
134  return headPos_;
135  }
136 
145  public void setHead(
146  int pos,
147  double[] data
148  ) {
149  // 配列長チェック
150  int len = data.length;
151  if (len < 1) { // 空の配列?
152  return; // なにもしない
153  }
154 
155  // 開始位置チェック
156  if (pos >= size_) { // 開始位置が不正?
157  return; // なにもしない
158  }
159  int ofs = 0;
160  if (pos < 0) {
161  if (len <= -pos) { // 長さが足りない(先頭に届かない)?
162  return; // なにもしない
163  }
164  ofs = -pos; // オフセット設定
165  pos = 0; // 開始位置更新
166  len -= ofs; // 配列長更新
167  }
168 
169  // 配列長チェック
170  if (len > size_ - pos) { // 与えられた配列が長すぎる?
171  len = size_ - pos; // 長さをカット
172  }
173 
174  // データのコピー
175  int former = size_ - headPos_;
176  if (pos < former) { // 開始位置が前半にある?
177  int remain = former - pos;
178  if (len <= remain) { // 全て前半に収まる?
179  System.arraycopy(
180  data, ofs,
181  data_, headPos_ + pos,
182  len
183  ); // 全て前半にコピー
184  } else {
185  System.arraycopy(
186  data, ofs,
187  data_, headPos_ + pos,
188  remain
189  ); // 前半にコピー
190  System.arraycopy(
191  data, ofs + remain,
192  data_, 0,
193  len - remain
194  ); // 後半にコピー
195  }
196  } else { // 開始位置が後半にある?
197  System.arraycopy(
198  data, ofs,
199  data_, pos - former,
200  len
201  ); // 全て後半にコピー
202  }
203  }
204 
213  public void setTail(
214  int pos,
215  double[] data
216  ) {
217  setHead(size_ - 1 - pos, data);
218  }
219 
232  public void shift(
233  int count
234  ) {
235  // 移動量チェック
236  if (count == 0) { // 移動しない?
237  return; // なにもしない
238  }
239  xOffset_ += xStep_ * count; // X座標値オフセット更新
240  if (count >= size_ || count <= -size_) { // 配列長を超える移動?
241  for (int i = 0; i < size_; i++) { // NaNクリア
242  data_[i] = Double.NaN;
243  }
244  return;
245  }
246 
247  // シフト
248  int prevHead = headPos_; // 古い先頭位置
249  int newHead = prevHead + count; // 新しい先頭位置
250  if (count > 0) { // 正の移動?
251  for (int i = prevHead; i < newHead; i++) { // 新たにできた場所をループ
252  data_[i % size_] = Double.NaN; // NaNクリア
253  }
254  headPos_ = newHead % size_; // 先頭位置更新
255  } else { // 負の移動?
256  int ind;
257  for (int i = newHead; i < prevHead; i++) { // 新たにできた場所をループ
258  ind = i % size_;
259  if (ind < 0) {
260  ind += size_;
261  }
262  data_[ind] = Double.NaN; // NaNクリア
263  }
264  // 先頭位置更新
265  headPos_ = newHead % size_;
266  if (headPos_ < 0) {
267  headPos_ += size_;
268  }
269  }
270  }
271 
279  public void addLast(
280  double value
281  ) {
282  xOffset_ += xStep_; // X座標値オフセット更新
283  data_[headPos_] = value; // データ書込み
284  headPos_ = (headPos_ + 1) % size_; // 先頭位置移動
285  }
286 
294  public void set(
295  int pos,
296  double value
297  ) {
298  int setPos = (headPos_ + pos) % size_;
299  data_[setPos] = value;
300  }
301 }
png_uint_32 size
Definition: png.h:1521
png_voidp int value
Definition: png.h:2113
png_uint_32 i
Definition: png.h:2735
void setHead(int pos, double[] data)
DataSeries(int size, double xOffset, double xStep)
Definition: DataSeries.java:37
void setTail(int pos, double[] data)
JSAMPIMAGE data
Definition: jpeglib.h:945


openhrp3
Author(s): AIST, General Robotix Inc., Nakamura Lab of Dept. of Mechano Informatics at University of Tokyo
autogenerated on Thu Sep 8 2022 02:24:02