~ubuntu-branches/ubuntu/saucy/gfan/saucy-proposed

« back to all changes in this revision

Viewing changes to app_xfigconstruction.cpp

  • Committer: Package Import Robot
  • Author(s): Cédric Boutillier
  • Date: 2013-07-09 10:44:01 UTC
  • mfrom: (2.1.2 experimental)
  • Revision ID: package-import@ubuntu.com-20130709104401-5q66ozz5j5af0dak
Tags: 0.5+dfsg-3
* Upload to unstable.
* modify remove_failing_tests_on_32bits.patch to replace command of
  0009RenderStairCase test with an empty one instead of deleting it.
* remove lintian override about spelling error

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#include "vektor.h"
2
 
#include "printer.h"
3
 
#include "parser.h"
4
 
#include "gfanapplication.h"
5
 
 
6
 
class XfigConstructionApplication : public GFanApplication
7
 
{
8
 
public:
9
 
  bool includeInDefaultInstallation()
10
 
  {
11
 
    return false;
12
 
  }
13
 
  XfigConstructionApplication()
14
 
  {
15
 
    registerOptions();
16
 
  }
17
 
  char *name()
18
 
  {
19
 
    return "_xfigconstruction";
20
 
  }
21
 
  int main()
22
 
  {
23
 
    int dimension=4;
24
 
    FileParser P(Stdin);
25
 
    IntegerVectorList a=P.parseIntegerVectorList();
26
 
    IntegerVectorList b=P.parseIntegerVectorList();
27
 
    IntegerVector invertVector=P.parseIntegerVector();
28
 
 
29
 
    int nEdges=a.begin()->size();
30
 
    int nCycles=a.size()/dimension;
31
 
    fprintf(Stderr,"nEdges %i nCycles %i\n",nEdges,nCycles);
32
 
 
33
 
    for(int i=0;i<nEdges;i++)
34
 
      {
35
 
        IntegerVector direction(dimension);
36
 
 
37
 
        IntegerVectorList::const_iterator J=a.begin();
38
 
        for(int j=0;j<nCycles;j++)
39
 
          {
40
 
            for(int k=0;k<dimension;k++)
41
 
              {
42
 
                direction[k]=(*J)[i];
43
 
                J++;
44
 
              }
45
 
            if(dot(direction,direction))break;
46
 
          }
47
 
        direction=invertVector[i]*direction;
48
 
        IntegerVector scaleVectorSum(dimension);
49
 
        if(dot(direction,direction))
50
 
          {
51
 
            IntegerVectorList::const_iterator J=a.begin();
52
 
            for(int j=0;j<nCycles;j++)
53
 
              {
54
 
                IntegerVector cycleVector(dimension);
55
 
                for(int k=0;k<dimension;k++)
56
 
                  {
57
 
                    cycleVector[k]=(*J)[i];
58
 
                    J++;
59
 
                  }
60
 
                int sign=dot(cycleVector,direction)/dot(direction,direction);
61
 
                
62
 
                IntegerVector scaleVector(dimension);
63
 
                for(int k=0;k<dimension;k++)
64
 
                  {
65
 
                    scaleVector[k]=(*b.begin())[j*4+k];
66
 
                  }
67
 
                scaleVectorSum+=sign*scaleVector;
68
 
              }
69
 
            if(!scaleVectorSum.isZero())
70
 
              {
71
 
                fprintf(Stderr,"%i:",i);
72
 
                AsciiPrinter(Stderr).printVector(direction);
73
 
                AsciiPrinter(Stderr).printVector(scaleVectorSum);
74
 
                
75
 
                fprintf(Stderr," %i\n",dot(direction,scaleVectorSum));
76
 
                fprintf(Stdout,"4 0 0 50 -1 0 6 0.0000 6 480 2805 3375 3675 ");
77
 
                fprintf(Stdout,"$\\\\left(\\\\begin{tabular}{c}");
78
 
                for(int k=0;k<dimension;k++)
79
 
                  {
80
 
                    if(k)fprintf(Stdout,"\\\\\\\\");
81
 
                    fprintf(Stdout," %i ",scaleVectorSum[k]);
82
 
                  }
83
 
                fprintf(Stdout,"\\\\end{tabular}\\\\right)");
84
 
                fprintf(Stdout,"\\\\cdot s_{%i}",i);
85
 
                fprintf(Stdout,"\\\\left(\\\\begin{tabular}{c}");
86
 
                for(int k=0;k<dimension;k++)
87
 
                  {
88
 
                    if(k)fprintf(Stdout,"\\\\\\\\");
89
 
                    fprintf(Stdout," %i ",direction[k]);
90
 
                  }
91
 
                fprintf(Stdout,"\\\\end{tabular}\\\\right)$");
92
 
                fprintf(Stdout,"\\001\n");
93
 
                
94
 
              }     
95
 
          }
96
 
      }
97
 
 
98
 
    AsciiPrinter(Stdout).printVectorList(multiplyIntegerVectorList(a,b));
99
 
    return 0;
100
 
  }
101
 
  const char *helpText()
102
 
  {
103
 
    return "This program should not be in the final release. It is used for generating xfig files for showing non realizable state polyhedra.\n";
104
 
  }
105
 
};
106
 
 
107
 
static XfigConstructionApplication theApplication;