OCC建立一个球体,计算球体上两个点的最短距离

最近在学OpenCasCade7.6 的Geometry部分,看完之后导师给了个题目让建立一个球体,并计算球体上两个点的最短距离以及显示,思考了一下将其整理如下:

  DisplayType TheDisplayType = No2D3D;
  PreProcess(aDoc, TheDisplayType);
  //建立球体 
  Standard_Real radius = 5;
  Handle(Geom_SphericalSurface) SP = new Geom_SphericalSurface(gp_Ax3(gp::XOY()),  radius);
  //根据参数随意取两个点
  gp_Pnt P1 = SP->Value(2, 3);
  gp_Pnt P2 = SP->Value(3, 5);
  DisplayPoint(aDoc, P1, "P1", false, 0.5);
  DisplayPoint(aDoc, P2, "P2", false, 0.5);
  DisplaySurface(aDoc, SP);
  
  //球面上两点最短距离,为最大圆,过直径的圆,建立坐标系构建最大圆
  gp_Vec v1(gp::Origin(), P1);
  gp_Vec v2(gp::Origin(), P2);
  gp_Vec V3 = v1.Crossed(v2);
  gp_Ax2 ax(gp_Pnt(0,0,0),V3); //球心为原点,与p1p2构成的面为xoy面建立坐标系!!!
  Handle(Geom_Circle) C = new Geom_Circle(ax,radius);
  //DisplayCurve(aDoc, C, Quantity_NOC_RED, false);
  GeomAPI_ProjectPointOnCurve PPC1(P1, C);
  GeomAPI_ProjectPointOnCurve PPC2(P2, C); //计算参数,点在曲线上的参数
  //GeomAPI_IntCS
  Standard_Real U, V;
  if (PPC1.NbPoints() > 0)
  {
         U = PPC1.LowerDistanceParameter();
  }
  if (PPC2.NbPoints() > 0)
  {
         V = PPC2.LowerDistanceParameter();
  }
  Handle(Geom_TrimmedCurve)CT = new Geom_TrimmedCurve(C, U, V); //根据参数,计算裁剪最大圆,只显示最短距离部分
  DisplayCurve(aDoc,CT, Quantity_NOC_RED, false);
  GeomAdaptor_Curve GC(C);
  Standard_Real Lower_dist = GCPnts_AbscissaPoint::Length(GC,  CT->FirstParameter(), CT->LastParameter()); //计算3D曲线的长度GCPnts_AbscissaPoint类
  TCollection_AsciiString Message2(Lower_dist);
  Message += Message2;
  //====================work3=========================================
  PostProcess(aDoc, ID_BUTTON_Test_10, TheDisplayType, Message);

其结果如下(欢迎讨论):

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值