#3201 Fix error discovered by unit test

This commit is contained in:
Jacob Støren 2018-08-14 09:38:25 +02:00
parent fb7a7e39eb
commit 92dd375da3
2 changed files with 34 additions and 2 deletions

View File

@ -19,6 +19,7 @@
#include "RiaJCurveCalculator.h"
#include "RiaOffshoreSphericalCoords.h"
#include "cvfMatrix3.h"
#include "RiaArcCurveCalculator.h"
//--------------------------------------------------------------------------------------------------
///
@ -50,15 +51,21 @@ RiaJCurveCalculator::RiaJCurveCalculator(cvf::Vec3d p1, double azi1, double inc1
if (p2c1Length < r1)
{
// Radius is too big. We can not get to point 2 using the requested radius.
m_isCalculationOK = false;
RiaArcCurveCalculator arc(p1, t1, p2);
m_c1 = arc.center();
m_n1 = arc.normal();
m_firstArcEndpoint = p2;
return;
}
double d = sqrt( p2c1Length * p2c1Length - r1 * r1);
double betha = asin( r1/p2c1Length );
cvf::Vec3d tp2c1 = p2c1/p2c1Length;
cvf::Vec3d nc1 = t1 ^ tr1;
cvf::Vec3d tp11p2 = tp2c1.getTransformedVector(cvf::Mat3d::fromRotation(nc1, betha));
cvf::Vec3d tp11p2 = -tp2c1.getTransformedVector(cvf::Mat3d::fromRotation(nc1, betha));
m_firstArcEndpoint = p2 - d*tp11p2;
m_c1 = c1;

View File

@ -715,3 +715,28 @@ TEST(DISABLED_RiaSCurveCalculator, q_r_relation)
{ 0,0,-1000 }, M_PI/2, M_PI/2);
}
#include "RiaJCurveCalculator.h"
TEST(RiaJCurveCalculator, Basic)
{
RiaJCurveCalculator calc({ 0,0,0 }, 0, M_PI/2, 100, { 0,100,-1000 });
EXPECT_TRUE(calc.isOk() );
cvf::Vec3d p11 = calc.firstArcEndpoint();
EXPECT_NEAR( 0, p11.x(), 1e-5);
EXPECT_NEAR( 100, p11.y(), 1e-5);
EXPECT_NEAR( -100, p11.z(), 1e-5);
cvf::Vec3d n = calc.firstNormal();
EXPECT_NEAR(-1, n.x(), 1e-5);
EXPECT_NEAR( 0, n.y(), 1e-5);
EXPECT_NEAR( 0, n.z(), 1e-5);
cvf::Vec3d c = calc.firstCenter();
EXPECT_NEAR( 0, c.x(), 1e-5);
EXPECT_NEAR( 0, c.y(), 1e-5);
EXPECT_NEAR(-100, c.z(), 1e-5);
}