File: orbit.cc

package info (click to toggle)
xplanet 0.43-5
  • links: PTS
  • area: main
  • in suites: potato
  • size: 904 kB
  • ctags: 321
  • sloc: cpp: 3,041; sh: 1,977; makefile: 141
file content (103 lines) | stat: -rw-r--r-- 2,689 bytes parent folder | download
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/******************************************************************************
    orbit - orbit class
    Copyright (C) 1999 Detlev Zundel <Detlev.Zundel@stud.uni-karlsruhe.de>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

******************************************************************************/

#include <math.h>
#include "orbit.h"

Matrix operator*(const Matrix& a, const Matrix& b){
  Matrix c;
  for (int i=0; i<4; i++)
    for (int j=0; j<4; j++)
      for (int k=0; k<4; k++)
	c.el[i][j]+=a.el[i][k]*b.el[k][j];
  return c;
}

Matrix operator+(const Matrix& a, const Matrix& b){
  Matrix c;
  for (int i=0; i<4; i++)
    for (int j=0; j<4; j++)
      c.el[i][j]=a.el[i][j]+b.el[i][j];
  return c;
}

Vector operator*(const Matrix& a, const Vector& x)
{
  Vector c;
  c.el[3]=0;
  for (int i=0; i<4; i++)
    for (int j=0; j<4; j++)
      c.el[i]+=a.el[i][j]*x.el[j];
  return c;
}

Matrix Matrix::TranslateMatrix(double x, double y, double z)
{
  Matrix c;
  for (int i=0; i<4; i++)
    c.element(i,i)=1.0;
  c.element(0,3)=x;
  c.element(1,3)=y;
  c.element(2,3)=z;
  return c;
}

Matrix Matrix::RotateXMatrix(double alpha)
{
  Matrix c;
  c.element(0,0)=1;
  c.element(1,1)=c.element(2,2)=cos(alpha);
  c.element(1,2)=sin(alpha);
  c.element(2,1)=-sin(alpha);
  c.element(3,3)=1;
  return c;
}

Matrix Matrix::RotateZMatrix(double alpha)
{
  Matrix c;
  c.element(0,0)=c.element(1,1)=cos(alpha);
  c.element(0,1)=-sin(alpha);
  c.element(1,0)=sin(alpha);
  c.element(2,2)=1;
  c.element(3,3)=1;
  return c;
}

Matrix Matrix::RotateYMatrix(double alpha)
{
  Matrix c;
  c.element(1,1)=1;
  c.element(0,0)=c.element(2,2)=cos(alpha);
  c.element(0,2)=-sin(alpha);
  c.element(2,0)=sin(alpha);
  c.element(3,3)=1;
  return c;
}

Matrix Matrix::ScaleMatrix(double x, double y, double z)
{
  Matrix c;
  c.element(0,0)=x;
  c.element(1,1)=y;
  c.element(2,2)=z;
  c.element(3,3)=1.0;
  return c;
}