关于两个圆弧距离计算接口函数测试的补充测试

TEST(AlgDistance_GeometryDistance, BUG_GGPUSER_2187)
{
    CCurve2d * pCurve3 = (CCurve2d*)(CGeometry::LoadFromStr("{TYPE=2,CenterPt=[100 -95],Radius=90,Range=[-90 438],ClockSing=1}"));
    CCurve2d * pCurve4 = (CCurve2d*)(CGeometry::LoadFromStr("{TYPE=2,CenterPt=[60 77],Radius=75,Range=[44 398],ClockSing=1}"));
    CVector2d point3, point4;
    double dis2 = GeometryDistance(pCurve3, pCurve4, point3, point4);
    EXPECT_TRUE(dis2 <= 11.589920437156030 + g_DistEpsilon);
    pCurve3->Free(); pCurve3 = nullptr;
    pCurve4->Free(); pCurve4 = nullptr;

    CCurve2d * pCurve1 = (CCurve2d*)(CGeometry::LoadFromStr("{TYPE=2,CenterPt=[3023.45929051638177043060 -27295.75076304540925775655],Radius=56500.00001108201104216278,Range=[-85420.32274669427715707570 267319.64717813942115753889],ClockSing=1}"));
    CCurve2d * pCurve2 = (CCurve2d*)(CGeometry::LoadFromStr("{TYPE=2,CenterPt=[51960.38388947439671028405 40977.07176306098699569702],Radius=27500.00002730466803768650,Range=[26644.58641092732796096243 198332.18252883403329178691],ClockSing=1}"));
    CVector2d point1, point2;
    double dis = GeometryDistance(pCurve1, pCurve2, point1, point2);

    EXPECT_TRUE(dis <= 0.2777 +g_DistEpsilon);
    pCurve1->Free(); pCurve1 = nullptr;
    pCurve2->Free(); pCurve2 = nullptr;

}

// 两个圆弧相切
TEST(AlgDistance_GeometryDistance, BUG_GGPUSER_2187_1)
{
    CVector2d centerPt1(0.0, 0.0);
    CArc2d arc1(centerPt1, 41421.35623731, 0, M_2PI, 1);
    CArc2d *pArc1 = &arc1;

    CVector2d centerPt2(100000.0, 100000.0);
    CArc2d arc2(centerPt2, 100000, 0, M_2PI, 1);
    CArc2d *pArc2 = &arc2;

    CVector2d point1, point2;
    double dis = GeometryDistance(pArc1, pArc2, point1, point2);

    EXPECT_TRUE(dis <= g_DistEpsilon && dis >= - g_DistEpsilon);
}

// 随机生成圆弧
TEST(AlgDistance_GeometryDistance, DISABLED_BUG_GGPUSER_2187_2)
{
    std::string strFilePath = CFileHelper::GetFilePath("arc2ddistance.txt", g_CaseRecordDir);
    FILE * fp = CFileHelper::WriteBegin(strFilePath, true);

    CRandom r(0);
    for(int i = 0; i < 100; i ++)
    {
        CArc2d arc1 = g_oGeometryBuildMgr.randomArc2d(r, 100.0, 100.0, 1000.0);
        CArc2d arc2 = g_oGeometryBuildMgr.randomArc2d(r, 100.0, 100.0, 1000.0);

        CArc2d *pArc1 = &arc1;
        CArc2d *pArc2 = &arc2;

        double dis1 = g_oGeometryBuildMgr.getArcDistance(arc1, arc2, 1000);

        CVector2d point1, point2;
        double dis2 = GeometryDistance(pArc1, pArc2, point1, point2);

        if(dis1 <= dis2 - g_DistEpsilon)
        {
            CFileHelper::WriteString(fp, "pair-----------------------------------", true);
            CFileHelper::WriteString(fp, arc1.AsString(), true);
            CFileHelper::WriteString(fp, arc2.AsString(), true);
            CFileHelper::WriteString(fp, "end-----------------------------------", true);
        }

        EXPECT_TRUE(dis1 > dis2 - g_DistEpsilon);
    }  
    CFileHelper::WriteEnd(fp);

}

// 两个圆弧相交
TEST(AlgDistance_GeometryDistance, DISABLED_BUG_GGPUSER_2187_3)
{
    CCurve2d * pCurve1 = (CCurve2d*)(CGeometry::LoadFromStr("{TYPE=2,CenterPt=[63.39609973448897100000 20.40467543565172200000],Radius=3180.63905758842750000000,Range=[0.00000000000000000000 16211.10249063620500000000],ClockSing=1}"));
    CCurve2d * pCurve2 = (CCurve2d*)(CGeometry::LoadFromStr("{TYPE=2,CenterPt=[40.20813623462630200000 19.17172765282143500000],Radius=3167.82128360850860000000,Range=[0.00000000000000000000 8283.06085587324200000000],ClockSing=1}"));
    CVector2d point1, point2;
    double dis = GeometryDistance(pCurve1, pCurve2, point1, point2);
    EXPECT_TRUE(dis <= g_DistEpsilon && dis >= -g_DistEpsilon);
    pCurve1->Free(); pCurve1 = nullptr;
    pCurve2->Free(); pCurve2 = nullptr;
}

// 最小距离在两个圆弧的端点处取得
TEST(AlgDistance_GeometryDistance, BUG_GGPUSER_2187_4)
{
    CVector2d centerPt1(0.0, 0.0);
    CArc2d arc1(centerPt1, 41421.35623731, 0.0, M_PI_2, -1);
    CArc2d *pArc1 = &arc1;

    CVector2d centerPt2(100000.0, 100000.0);
    CArc2d arc2(centerPt2, 90000, 0.0, M_PI_2, 1);
    CArc2d *pArc2 = &arc2;

    CVector2d point1, point2;
    double dis = GeometryDistance(pArc1, pArc2, point1, point2);

    double dis_real = sqrt(pow(190000.0 - 41421.35623731, 2) + pow(100000.0, 2));

    EXPECT_TRUE(dis <= dis_real + g_DistEpsilon && dis >= dis_real - g_DistEpsilon);
}

// 最小距离在一个圆弧的端点和另一个圆弧的中点取得
TEST(AlgDistance_GeometryDistance, BUG_GGPUSER_2187_5)
{
    CVector2d centerPt1(0.0, 0.0);
    CArc2d arc1(centerPt1, 41421.35623731, 0.0, M_PI_4, -1);
    CArc2d *pArc1 = &arc1;

    CVector2d centerPt2(100000.0, 100000.0);
    CArc2d arc2(centerPt2, 90000, M_PI_2, M_2PI, 1);
    CArc2d *pArc2 = &arc2;

    CVector2d point1, point2;
    double dis = GeometryDistance(pArc1, pArc2, point1, point2);

    double dis_real = 10000;

    EXPECT_TRUE(dis <= dis_real + g_DistEpsilon && dis >= dis_real - g_DistEpsilon);
}

// 随机生成椭圆
TEST(AlgDistance_GeometryDistance, DISABLED_BUG_GGPUSER_2187_6)
{
    std::string strFilePath = CFileHelper::GetFilePath("ellipse2ddistance.txt", g_CaseRecordDir);
    FILE * fp = CFileHelper::WriteBegin(strFilePath, true);

    CRandom r(0);
    for(int i = 0; i < 100; i ++)
    {
        CEllipse2d elli1 = g_oGeometryBuildMgr.randomEllipse2d(r, 100.0, 100.0, 1000.0);
        CEllipse2d elli2 = g_oGeometryBuildMgr.randomEllipse2d(r, 100.0, 100.0, 1000.0);

        CEllipse2d *pElli1 = &elli1;
        CEllipse2d *pElli2 = &elli2;

        double dis1 = g_oGeometryBuildMgr.getEllipseDistance(elli1, elli2, 1000);

        CVector2d point1, point2;
        double dis2 = GeometryDistance(pElli1, pElli2, point1, point2);

        if(dis1 <= dis2 - g_DistEpsilon)
        {
            CFileHelper::WriteString(fp, "pair-----------------------------------", true);
            CFileHelper::WriteString(fp, elli1.AsString(), true);
            CFileHelper::WriteString(fp, elli2.AsString(), true);
            CFileHelper::WriteString(fp, "end-----------------------------------", true);
        }

        EXPECT_TRUE(dis1 > dis2 - g_DistEpsilon);
    }    

}

// 两个椭圆相交
TEST(AlgDistance_GeometryDistance, DISABLED_BUG_GGPUSER_2187_7)
{
    CEllipse2d * pElli1 = (CEllipse2d*)(CGeometry::LoadFromStr("{TYPE=4,CenterPt=[43.57127597888120400000 -41.78289132358775500000],MajorAxis=[1.00000000000000000000 0.00000000000000000000],MajorRadius=935.39231543931396000000,MinorRadius=640.40040284432507000000,Range=[-5256.33918609364540000000 -2589.62258887608230000000],ClockSing=-1}"));
    CEllipse2d * pElli2 = (CEllipse2d*)(CGeometry::LoadFromStr("{TYPE=4,CenterPt=[-0.54628131962034843000 12.54005554368724500000],MajorAxis=[1.00000000000000000000 0.00000000000000000000],MajorRadius=934.44624164555808000000,MinorRadius=271.00436414685510000000,Range=[-4984.12802956934500000000 -1565.21805685325900000000],ClockSing=-1}"));
    CVector2d point1, point2;
    double dis = GeometryDistance(pElli1, pElli2, point1, point2);
    EXPECT_TRUE(dis <= g_DistEpsilon && dis >= -g_DistEpsilon);
    pElli1->Free(); pElli1 = nullptr;
    pElli2->Free(); pElli2 = nullptr;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值