summaryrefslogtreecommitdiff
path: root/ao-tools/lib/cc-integrate.c
diff options
context:
space:
mode:
authorBdale Garbee <bdale@gag.com>2009-09-20 09:19:28 -0600
committerBdale Garbee <bdale@gag.com>2009-09-20 09:19:28 -0600
commitdf42ccaaf468cdc5d93cbd1c001f58df58419722 (patch)
tree8699b949083d347bc00219bbbbefdf8ead3b8e16 /ao-tools/lib/cc-integrate.c
parent0b24e4034f93010372a3d084668d10f0e4a2c2e1 (diff)
parent078e9cdbdb388b22c6151f76ff0660fc14b8ef55 (diff)
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
Diffstat (limited to 'ao-tools/lib/cc-integrate.c')
-rw-r--r--ao-tools/lib/cc-integrate.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/ao-tools/lib/cc-integrate.c b/ao-tools/lib/cc-integrate.c
index f9793dcd..ba50761b 100644
--- a/ao-tools/lib/cc-integrate.c
+++ b/ao-tools/lib/cc-integrate.c
@@ -37,24 +37,27 @@ cc_timedata_convert(struct cc_timedata *d, double (*f)(double v, double a), doub
}
struct cc_timedata *
-cc_timedata_integrate(struct cc_timedata *d)
+cc_timedata_integrate(struct cc_timedata *d, double min_time, double max_time)
{
struct cc_timedata *i;
- int n;
+ int n, m;
+ int start, stop;
+ cc_timedata_limits(d, min_time, max_time, &start, &stop);
i = calloc (1, sizeof (struct cc_timedata));
- i->num = d->num;
- i->size = d->num;
+ i->num = stop - start + 1;
+ i->size = i->num;
i->data = calloc (i->size, sizeof (struct cc_timedataelt));
- i->time_offset = d->time_offset;
- for (n = 0; n < d->num; n++) {
- i->data[n].time = d->data[n].time;
+ i->time_offset = d->data[start].time;
+ for (n = 0; n < i->num; n++) {
+ m = n + start;
+ i->data[n].time = d->data[m].time;
if (n == 0) {
i->data[n].value = 0;
} else {
i->data[n].value = i->data[n-1].value +
- (d->data[n].value + d->data[n-1].value) / 2 *
- ((d->data[n].time - d->data[n-1].time) / 100.0);
+ (d->data[m].value + d->data[m-1].value) / 2 *
+ ((d->data[m].time - d->data[m-1].time) / 100.0);
}
}
return i;