home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Photo CD Demo 1
/
Demo.bin
/
gems
/
graphics
/
binrec.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-04-09
|
1KB
|
54 lines
/*
Recording Animation in Binary Order for Progressive Temporal Refinement
by Paul Heckbert
from "Graphics Gems", Academic Press, 1990
*/
/*
* binrec.c: demonstrate binary recording order
* Paul Heckbert Jan 90
*/
#include <stdio.h>
main(ac, av)
int ac;
char **av;
{
int nframes, i, start_frame, repeat_count;
if (ac!=2) {
fprintf(stderr, "Usage: binrec <nframes>\n");
exit(1);
}
nframes = atoi(av[1]);
printf("step startframe repeatcount\n");
for (i=0; i<nframes; i++) {
inside_out(nframes, i, &start_frame, &repeat_count);
printf(" %2d %2d %2d\n", i, start_frame, repeat_count);
}
}
/*
* inside_out: turn a number "inside-out": a generalization of bit-
* reversal.
* For n = power of two, this is equivalent to bit-reversal.
*
* Turn the number a inside-out, yielding b. If 0<=a<n then 0<=b<n.
* Also return r = min(n-b, largest power of 2 dividing b)
*/
inside_out(n, a, b, r)
int n, a, *b, *r;
{
int k, m;
*r = m = n;
for (*b=0, k=1; k<n; k<<=1)
if (a<<1>=m) {
if (*b==0) *r = k;
*b += k;
a -= m+1>>1;
m >>= 1;
}
else m = m+1>>1;
if (*r>n-*b) *r = n-*b;
}