source: Sophya/trunk/SophyaLib/Samba/vector3d.h@ 518

Last change on this file since 518 was 518, checked in by ansari, 26 years ago

Introduction de SpherePosition and SphereCoordSys, and Initiator for module Samba - Reza+I. Grivell 26/10/99

File size: 3.0 KB
RevLine 
[262]1#ifndef VECTOR3D_H_SEEN
2#define VECTOR3D_H_SEEN
3
4#include <math.h>
5#include <iostream.h>
6#include <stdio.h>
7#include <string.h>
[517]8#ifdef __MWERKS__
9 #include "mwerksmath.h"
10// #include "unixmac.h"
11#endif
[262]12#include "longlat.h"
13
14/*
15 Geometrie en dimension 3.
16 Tous les calculs sont faits en radians
17 et en coordonnees spheriques theta,phi
18 pour les rotations (angles d'Euler) ma source est
19 "Classical Mechanics" 2nd edition, H. Goldstein, Addison Wesley
20*/
21
22class Vector3d
23{
24
25 public:
26
27 Vector3d();
28 Vector3d(double x, double y, double z);
29 Vector3d(double theta, double phi);
30 Vector3d(const LongLat&);
31 Vector3d(const Vector3d&);
32
[518]33// To manipulate the vector
34 virtual void Setxyz(double x, double y, double z);
35 virtual void SetThetaPhi(double theta, double phi);
36 virtual void ThetaPhi2xyz();
37 virtual void xyz2ThetaPhi();
[262]38
[518]39// Acces to coordinates
40 inline double Theta() const {return _theta;}
41 inline double Phi() const {return _phi;}
42 inline double X() const {return _x;}
43 inline double Y() const {return _y;}
44 inline double Z() const {return _z;}
[262]45
[518]46 virtual Vector3d& Normalize();
47 virtual double Norm() const;
48
[262]49 // produit scalaire
[518]50 virtual double Psc(const Vector3d&) const;
[262]51
52 // ecart angulaire entre 2 vecteurs dans [0,Pi]
[518]53 virtual double SepAngle(const Vector3d&) const;
[262]54
55 // produit vectoriel
[518]56 virtual Vector3d Vect(const Vector3d&) const;
[262]57
58 // vecteur perpendiculaire de meme phi
[518]59 virtual Vector3d VperpPhi() const;
[262]60
61 // vecteur perpendiculaire de meme theta
[518]62 virtual Vector3d VperpTheta() const;
[262]63
[518]64 virtual Vector3d ETheta() const;
65 virtual Vector3d EPhi() const;
[262]66
[518]67 // rotations d Euler
68 virtual Vector3d Euler(double, double, double) const;
[262]69
70 // rotation inverse
71 Vector3d InvEuler(double, double, double) const;
72
[518]73 // rotation d angle phi autour d'un axe omega (regle du tire-bouchon)
[262]74 Vector3d Rotate(const Vector3d& omega,double phi);
75
76 virtual Vector3d& operator=(const Vector3d&);
77 virtual Vector3d& operator+=(const Vector3d&);
78 virtual Vector3d& operator-=(const Vector3d&);
79 virtual Vector3d operator+(const Vector3d&) const;
80 virtual Vector3d operator-(const Vector3d&) const;
81
[518]82 virtual Vector3d& operator+=(double);
83 virtual Vector3d& operator/=(double);
84 virtual Vector3d& operator*=(double);
[262]85
[518]86 virtual Vector3d operator+(double) const;
87 virtual Vector3d operator-(double) const;
88 virtual Vector3d operator*(double) const;
89 virtual Vector3d operator/(double) const;
90
91 virtual Vector3d operator^(const Vector3d&) const; // produit vectoriel
92 virtual double operator*(const Vector3d&) const; // produit scalaire
93
[262]94 bool operator==(const Vector3d&);
95
96 virtual void Print(ostream& os) const;
97
98 protected:
99
100 double _x;
101 double _y;
102 double _z;
103 double _theta;
104 double _phi;
105
106};
107
108inline ostream& operator<<(ostream& s, const Vector3d& v)
109{
110 v.Print(s);
111 return s;
112}
113
114// fonctions globales
115
116inline Vector3d operator*(double d, const Vector3d& v)
117{
118 return v*d;
119}
120
121inline Vector3d operator+(double d, const Vector3d& v)
122{
123 return v+d;
124}
125
126#endif
127
128
Note: See TracBrowser for help on using the repository browser.