]> Creatis software - creaRigidRegistration.git/blobdiff - lib/VectorMath.cxx
Added PlaneReorientation (Muller project)
[creaRigidRegistration.git] / lib / VectorMath.cxx
index 154515470668768f8e7d825240a3d23f5067bb96..e9444c2fb5299df37984844d491c6b8f674d039c 100644 (file)
@@ -1,15 +1,18 @@
 #include "VectorMath.h"
 
+
+
 VectorMath::VectorMath()
 {
-       //_math = vtkMath::new();
+       
 }
 
 VectorMath::~VectorMath()
 {
-       if (_math != NULL ) { _math->Delete(); }
+       
 }
 
+/*Sets all the vector points*/
 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)
 {
     _pointx1a = pointsX1[0];
@@ -30,19 +33,115 @@ void VectorMath::SetData(std::vector<int> pointsX1, std::vector<int> pointsX2, s
        _pointz2a = pointsZ2[0];
        _pointz2b = pointsZ2[1];
 }
-/*
 
-int[3]* VectorMath::GetPoints()
+/*Runs the calculations*/
+void VectorMath::Run()
+{
+       _origin.clear();
+       _origin.push_back(_pointx2a);
+       _origin.push_back(_pointy2a);
+       _origin.push_back(_pointz2a);
+
+       std::cout << "Vector Math: Origin points: X = " <<  _pointx2a << " Y = " << _pointy2a << " Z = " << _pointz2a << std::endl;
+
+       _originReslicer.clear();
+       _originReslicer.push_back(_pointx1a);
+       _originReslicer.push_back(_pointy1a);
+       _originReslicer.push_back(_pointz1a);
+
+       std::cout << "Vector Math: Origin Reslicer points: X = " <<  _pointx1a << " Y = " << _pointy1a << " Z = " << _pointz1a << std::endl;
+
+       double _vectorA[3];
+       _vectorA[0] =(double)(_pointx1b - _pointx1a);
+       _vectorA[1] =(double)(_pointy1b - _pointy1a);
+       _vectorA[2] =(double)(_pointz1b - _pointz1a);
+
+       double normA = vtkMath::Norm(_vectorA);
+
+       _vectorA[0] =  _vectorA[0]/normA;
+       _vectorA[1] =  _vectorA[1]/normA;
+       _vectorA[2] =  _vectorA[2]/normA;
+
+       double _vectorB[3];
+       _vectorB[0] =(double)(_pointx2b - _pointx2a - _pointx1a);
+       _vectorB[1] =(double)(_pointy2b - _pointy2a - _pointy1a);
+       _vectorB[2] =(double)(_pointz2b - _pointz2a - _pointz1a);
+
+       double normB = vtkMath::Norm(_vectorB);
+
+       _vectorB[0] =  _vectorB[0]/normB;
+       _vectorB[1] =  _vectorB[1]/normB;
+       _vectorB[2] =  _vectorB[2]/normB;
+
+       vtkMath::Cross(_vectorA, _vectorB, _result);
+
+       std::cout << "Data from vector A: X: " << _vectorA[0] << " Y: " << _vectorA[1] << " Z: " << _vectorA[2] << std::endl;
+       std::cout << "Data from vector B: X: " << _vectorB[0] << " Y: " << _vectorB[1] << " Z: " << _vectorB[2] << std::endl;
+       std::cout << "Data from result: X: " << _result[0] << " Y: " << _result[1] << " Z: " << _result[2] << std::endl;
+
+       double _vectorOrigin[3] = {0,0,0};
+
+       double distanceA = vtkMath::Distance2BetweenPoints(_vectorOrigin, _vectorA);
+       double distanceB = vtkMath::Distance2BetweenPoints(_vectorOrigin, _vectorA);
+
+       double proportion = distanceA/distanceB;
+       /*
+       _scaleX = proportion;
+       _scaleY = proportion;
+       _scaleZ = proportion;
+       */
+
+       _scaleX = 1;
+       _scaleY = 1;
+       _scaleZ = 1;
+
+       _angle = acos(vtkMath::Dot(_vectorA, _vectorB));
+
+       _angle = vtkMath::DegreesFromRadians(_angle);
+
+       std::cout << "Dot " << vtkMath::Dot(_vectorA, _vectorB) << std::endl;
+       std::cout << "Angle " << (double)_angle << std::endl;
+}
+
+/*Returns the origin of the second vector*/
+std::vector<int> VectorMath::GetOrigin()
 {
+       return _origin;
+}
 
+/*Returns the origin of the first vector*/
+std::vector<int> VectorMath::GetOriginReslicer()
+{
+       return _originReslicer;
 }
 
-double[3]* VectorMath::GetScales()
+/*Returns the cross product of the two vectors*/
+void VectorMath::GetResult(double result[3])
 {
+       result = _result;
+}
 
+/*Scale in X*/
+double VectorMath::GetScaleX()
+{
+       return _scaleX;
+}
+
+/*Scale in Y*/
+double VectorMath::GetScaleY()
+{
+       return _scaleY;
 }
 
+/*Scale in Z*/
+double VectorMath::GetScaleZ()
+{
+       return _scaleZ;
+}
+
+/*Rotation angle (dot product)*/
 double VectorMath::GetAngle()
 {
+       return _angle;
+}
 
-}*/
\ No newline at end of file