File: generate.cpp

package info (click to toggle)
coin3 4.0.0%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 52,388 kB
  • sloc: cpp: 254,256; ansic: 23,018; makefile: 8,672; sh: 3,141; perl: 1,504; lex: 1,372; lisp: 1,247; pascal: 961; xml: 604; yacc: 388; sed: 68
file content (59 lines) | stat: -rw-r--r-- 1,714 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/************************************************************************
 *
 * Generate a set of "valid" matrices (i.e. matrices put together from
 * a set of valid translations, scalevectors and rotations) on stdout.
 *
 ************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <Inventor/SoDB.h>
#include <Inventor/SbLinear.h>

float
rndf(void)
{
  return (float(rand()) / float(RAND_MAX) - 0.5f) * 4.0f;
}

int
main(int argc, char ** argv)
{
  if (argc != 2) {
    (void)fprintf(stderr,
                  "\n\n\tUsage: %s NUM\n\n"
                  "\tNUM = number of matrices to output.\n\n",
                  argv[0]);
    exit(1);
  }

  SoDB::init();

  srand(19720408);
  int num = atoi(argv[1]);
  for (int i=0; i < num; i++) {
    SbMatrix m;
    m.setTransform(// translation
                   SbVec3f(rndf(), rndf(), rndf()),
                   // rotation
                   SbRotation(SbVec3f(rndf(), rndf(), rndf()), rndf()),
                   // scalevec
                   SbVec3f(rndf(), rndf(), rndf()),
                   // scaleorientation
                   SbRotation(SbVec3f(rndf(), rndf(), rndf()), rndf()),
                   // center
                   SbVec3f(rndf(), rndf(), rndf()));

    (void)fprintf(stdout,
                  "%.3f %.3f %.3f %.3f "
                  "%.3f %.3f %.3f %.3f "
                  "%.3f %.3f %.3f %.3f "
                  "%.3f %.3f %.3f %.3f\n",
                  m[0][0], m[0][1], m[0][2], m[0][3],
                  m[1][0], m[1][1], m[1][2], m[1][3],
                  m[2][0], m[2][1], m[2][2], m[2][3],
                  m[3][0], m[3][1], m[3][2], m[3][3]);
  }

  return 0;
}