X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FVectorMath.cxx;h=56f4b1b682d5f9b53f1df440617c66b50debda61;hb=86c3482ce714b8d4201c8d819a10b59e4e4440c4;hp=9fc0a75da1586fde320cc772981fffdb12057f30;hpb=caf70b171caba0cb8c1e4c00688b27844f93e31b;p=creaRigidRegistration.git diff --git a/lib/VectorMath.cxx b/lib/VectorMath.cxx index 9fc0a75..56f4b1b 100644 --- a/lib/VectorMath.cxx +++ b/lib/VectorMath.cxx @@ -2,12 +2,12 @@ VectorMath::VectorMath() { - //_math = vtkMath::new(); + } VectorMath::~VectorMath() { - if (_math != NULL ) { _math->Delete(); } + } void VectorMath::SetData(std::vector pointsX1, std::vector pointsX2, std::vector pointsY1, std::vector pointsY2, std::vector pointsZ1, std::vector pointsZ2) @@ -30,20 +30,99 @@ void VectorMath::SetData(std::vector pointsX1, std::vector pointsX2, s _pointz2a = pointsZ2[0]; _pointz2b = pointsZ2[1]; } -/* -int[3]* VectorMath::GetPoints() +void VectorMath::Run() { + _origin.clear(); + _origin.push_back(_pointx2a); + _origin.push_back(_pointy2a); + _origin.push_back(_pointz2a); + _originReslicer.clear(); + _originReslicer.push_back(_pointx1a); + _originReslicer.push_back(_pointy1a); + _originReslicer.push_back(_pointz1a); + + 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; + + _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; +} + + +std::vector VectorMath::GetOrigin() +{ + return _origin; } -double[3]* VectorMath::GetScales() +std::vector VectorMath::GetOriginReslicer() { + return _originReslicer; +} +void VectorMath::GetResult(double result[3]) +{ + result = _result; } -double VectorMath::GetAngle() +double VectorMath::GetScaleX() +{ + return _scaleX; +} + +double VectorMath::GetScaleY() +{ + return _scaleY; +} + +double VectorMath::GetScaleZ() { + return _scaleZ; +} -}*/ +double VectorMath::GetAngle() +{ + return _angle; +}