]> Creatis software - creaRigidRegistration.git/blob - lib/VectorMath.cxx
56f4b1b682d5f9b53f1df440617c66b50debda61
[creaRigidRegistration.git] / lib / VectorMath.cxx
1 #include "VectorMath.h"
2
3 VectorMath::VectorMath()
4 {
5         
6 }
7
8 VectorMath::~VectorMath()
9 {
10         
11 }
12
13 void VectorMath::SetData(std::vector<int> pointsX1, std::vector<int> pointsX2, std::vector<int> pointsY1, std::vector<int> pointsY2, std::vector<int> pointsZ1, std::vector<int> pointsZ2)
14 {
15     _pointx1a = pointsX1[0];
16         _pointx1b = pointsX1[1];
17
18         _pointx2a = pointsX2[0];
19         _pointx2b = pointsX2[1];
20
21         _pointy1a = pointsY1[0];
22         _pointy1b = pointsY1[1];
23
24         _pointy2a = pointsY2[0];
25         _pointy2b = pointsY2[1];
26
27         _pointz1a = pointsZ1[0];
28         _pointz1b = pointsZ1[1];
29
30         _pointz2a = pointsZ2[0];
31         _pointz2b = pointsZ2[1];
32 }
33
34 void VectorMath::Run()
35 {
36         _origin.clear();
37         _origin.push_back(_pointx2a);
38         _origin.push_back(_pointy2a);
39         _origin.push_back(_pointz2a);
40
41         _originReslicer.clear();
42         _originReslicer.push_back(_pointx1a);
43         _originReslicer.push_back(_pointy1a);
44         _originReslicer.push_back(_pointz1a);
45
46         double _vectorA[3];
47         _vectorA[0] =(double)(_pointx1b - _pointx1a);
48         _vectorA[1] =(double)(_pointy1b - _pointy1a);
49         _vectorA[2] =(double)(_pointz1b - _pointz1a);
50
51         double normA = vtkMath::Norm(_vectorA);
52
53         _vectorA[0] =  _vectorA[0]/normA;
54         _vectorA[1] =  _vectorA[1]/normA;
55         _vectorA[2] =  _vectorA[2]/normA;
56
57         double _vectorB[3];
58         _vectorB[0] =(double)(_pointx2b - _pointx2a - _pointx1a);
59         _vectorB[1] =(double)(_pointy2b - _pointy2a - _pointy1a);
60         _vectorB[2] =(double)(_pointz2b - _pointz2a - _pointz1a);
61
62         double normB = vtkMath::Norm(_vectorB);
63
64         _vectorB[0] =  _vectorB[0]/normB;
65         _vectorB[1] =  _vectorB[1]/normB;
66         _vectorB[2] =  _vectorB[2]/normB;
67
68         vtkMath::Cross(_vectorA, _vectorB, _result);
69
70         std::cout << "Data from vector A: X: " << _vectorA[0] << " Y: " << _vectorA[1] << " Z: " << _vectorA[2] << std::endl;
71         std::cout << "Data from vector B: X: " << _vectorB[0] << " Y: " << _vectorB[1] << " Z: " << _vectorB[2] << std::endl;
72         std::cout << "Data from result: X: " << _result[0] << " Y: " << _result[1] << " Z: " << _result[2] << std::endl;
73
74         double _vectorOrigin[3] = {0,0,0};
75
76         double distanceA = vtkMath::Distance2BetweenPoints(_vectorOrigin, _vectorA);
77         double distanceB = vtkMath::Distance2BetweenPoints(_vectorOrigin, _vectorA);
78
79         double proportion = distanceA/distanceB;
80
81         _scaleX = proportion;
82         _scaleY = proportion;
83         _scaleZ = proportion;
84
85         _angle = acos(vtkMath::Dot(_vectorA, _vectorB));
86
87         _angle = vtkMath::DegreesFromRadians(_angle);
88
89         std::cout << "Dot " << vtkMath::Dot(_vectorA, _vectorB) << std::endl;
90         std::cout << "Angle " << (double)_angle << std::endl;
91 }
92
93
94 std::vector<int> VectorMath::GetOrigin()
95 {
96         return _origin;
97 }
98
99 std::vector<int> VectorMath::GetOriginReslicer()
100 {
101         return _originReslicer;
102 }
103
104 void VectorMath::GetResult(double result[3])
105 {
106         result = _result;
107 }
108
109 double VectorMath::GetScaleX()
110 {
111         return _scaleX;
112 }
113
114 double VectorMath::GetScaleY()
115 {
116         return _scaleY;
117 }
118
119 double VectorMath::GetScaleZ()
120 {
121         return _scaleZ;
122 }
123
124 double VectorMath::GetAngle()
125 {
126         return _angle;
127 }
128