X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FVectorMath.cxx;h=e9444c2fb5299df37984844d491c6b8f674d039c;hb=5c1d82df7d12e76cf8c9330a3248be594bab9b27;hp=154515470668768f8e7d825240a3d23f5067bb96;hpb=aa1b23f7a0b103bc3fd8989c0e60b97697adbbc3;p=creaRigidRegistration.git diff --git a/lib/VectorMath.cxx b/lib/VectorMath.cxx index 1545154..e9444c2 100644 --- a/lib/VectorMath.cxx +++ b/lib/VectorMath.cxx @@ -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 pointsX1, std::vector pointsX2, std::vector pointsY1, std::vector pointsY2, std::vector pointsZ1, std::vector pointsZ2) { _pointx1a = pointsX1[0]; @@ -30,19 +33,115 @@ void VectorMath::SetData(std::vector pointsX1, std::vector 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 VectorMath::GetOrigin() { + return _origin; +} +/*Returns the origin of the first vector*/ +std::vector 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