AMCAX Kernel
Geometry kernel for CAD/CAE/CAM
九韶内核 1.0.0.0
载入中...
搜索中...
未找到
几何建模

曲线和曲面的构造

抽象的曲线和曲面

曲线

直线

AMCAX::MakeLine2 用于创建一条二维直线, AMCAX::MakeLine3 用于创建一条三维直线。需要注意的是这里创建的直线都是无限长的,所以若想输出文件,需要借助 AMCAX::MakeEdge2dAMCAX::MakeEdge ,并且设置起始参数和结束参数。

//2d
AMCAX::Point2 p(1., 2.);
AMCAX::Line2 l1 = l.Value();
AMCAX::TopoShape line2d = AMCAX::MakeEdge2d(l1, 0., 1.);
AMCAX::OCCTIO::OCCTTool::Write(line2d, "./lind2d.brep");
//3d
AMCAX::Point3 p2(1., 2., 3.);
AMCAX::MakeLine3 ll(p2, d2);
AMCAX::Line3 l2 = ll.Value();
AMCAX::TopoShape line3d = AMCAX::MakeEdge(l2, 0., 1.);
AMCAX::OCCTIO::OCCTTool::Write(line3d, "./lind3d.brep");
Class of making a 2D edge
定义 MakeEdge2d.hpp:22
Class of making an edge
定义 MakeEdge.hpp:24
构造二维直线的类
定义 MakeLine2.hpp:13
构造三维直线的类
定义 MakeLine3.hpp:13
static AMCAX_API bool Write(const TopoShape &s, std::ostream &os, int format=3)
Write a shape to a stream
Base class of shape, containing an underlying shape with a location and an orientation
定义 TopoShape.hpp:15
LineS< 2 > Line2
二维直线
定义 LineT.hpp:454
LineS< 3 > Line3
三维直线
定义 LineT.hpp:457
DirectionT< double, 2 > Direction2
二维方向
定义 DirectionT.hpp:584
DirectionT< double, 3 > Direction3
三维方向
定义 DirectionT.hpp:587
PointT< double, 3 > Point3
三维点
定义 PointT.hpp:459
PointT< double, 2 > Point2
二维点
定义 PointT.hpp:456

AMCAX::MakeCircle2 用于创建二维圆, AMCAX::MakeCircle3 用于创建三维圆。若想输出文件,需使用 AMCAX::MakeEdge2dAMCAX::MakeEdge (设置起始参数和结束参数可选)。

//2d
AMCAX::Frame2 frame2d;
AMCAX::MakeCircle2 c(frame2d, 2.0);
AMCAX::Circle2 c1 = c.Value();
AMCAX::OCCTIO::OCCTTool::Write(circle2d, "./circle2d.brep");
//3d
AMCAX::Frame3 frame3d;
AMCAX::MakeCircle3 cc(frame3d, 2.0);
AMCAX::Circle3 c2 = cc.Value();
AMCAX::OCCTIO::OCCTTool::Write(circle3d, "./circle3d.brep");
构造二维圆的类
定义 MakeCircle2.hpp:13
构造三维圆的类
定义 MakeCircle3.hpp:15
CircleS< 3 > Circle3
三维圆
定义 CircleT.hpp:178
FrameT< double, 2 > Frame2
二维标架
定义 FrameT.hpp:882
CircleS< 2 > Circle2
二维圆
定义 CircleT.hpp:175
FrameT< double, 3 > Frame3
三维标架
定义 FrameT.hpp:885

椭圆

AMCAX::MakeEllipse2 用于创建二维椭圆, AMCAX::MakeEllipse3 用于创建三维椭圆。若想输出文件,需使用 AMCAX::MakeEdge2d 和 AMCAX::MakeEdge(设置起始参数和结束参数可选)。

//2d
AMCAX::Frame2 frame2d;
AMCAX::MakeEllipse2 e(frame2d, 2.0,1.0);
AMCAX::Ellipse2 e1 = e.Value();
AMCAX::OCCTIO::OCCTTool::Write(ellipse2d, "./ellipse2d.brep");
//3d
AMCAX::Frame3 frame3d;
AMCAX::MakeEllipse3 ee(frame3d, 2.0,1.0);
AMCAX::Ellipse3 e2 = ee.Value();
AMCAX::OCCTIO::OCCTTool::Write(ellipse3d, "./ellipse3d.brep");
构造二维椭圆的类
定义 MakeEllipse2.hpp:13
构造三维椭圆的类
定义 MakeEllipse3.hpp:13
EllipseS< 2 > Ellipse2
二维椭圆
定义 EllipseT.hpp:249
EllipseS< 3 > Ellipse3
三维椭圆
定义 EllipseT.hpp:252

双曲线

AMCAX::MakeHyperbola2 用于创建二维双曲线, AMCAX::MakeHyperbola3 用于创建三维双曲线。需要注意的是双曲线是无限的,所以若想输出文件,需使用 AMCAX::MakeEdge2dAMCAX::MakeEdge ,并且设置起始参数和结束参数。

//2d
AMCAX::Frame2 frame2d;
AMCAX::MakeHyperbola2 h(frame2d, 2.0, 1.0);
AMCAX::Hyperbola2 h1 = h.Value();
AMCAX::TopoShape hyperbola2d = AMCAX::MakeEdge2d(h1,-1.,1.);
AMCAX::OCCTIO::OCCTTool::Write(hyperbola2d, "./hyperbola2d.brep");
//3d
AMCAX::Frame3 frame3d;
AMCAX::MakeHyperbola3 hh(frame3d, 2.0, 1.0);
AMCAX::Hyperbola3 h2 = hh.Value();
AMCAX::TopoShape hyperbola3d = AMCAX::MakeEdge(h2, -1., 1.);
AMCAX::OCCTIO::OCCTTool::Write(hyperbola3d, "./hyperbola3d.brep");
构造二维双曲线的类
定义 MakeHyperbola2.hpp:13
构造三维双曲线的类
定义 MakeHyperbola3.hpp:13
HyperbolaS< 2 > Hyperbola2
二维双曲线
定义 HyperbolaT.hpp:298
HyperbolaS< 3 > Hyperbola3
三维双曲线
定义 HyperbolaT.hpp:301

抛物线

AMCAX::MakeParabola2 用于创建二维抛物线, AMCAX::MakeParabola3 用于创建三维抛物线。需要注意的是抛物线是无限的,所以若想输出文件,需使用 AMCAX::MakeEdge2dAMCAX::MakeEdge ,并且设置起始参数和结束参数。

//2d
AMCAX::Frame2 frame2d;
AMCAX::MakeParabola2 pa(frame2d, 2.0);
AMCAX::Parabola2 pa1 = pa.Value();
AMCAX::TopoShape parabola2d = AMCAX::MakeEdge2d(pa1, -1., 1.);
AMCAX::OCCTIO::OCCTTool::Write(parabola2d, "./parabola2d.brep");
//3d
AMCAX::Frame3 frame3d;
AMCAX::MakeParabola3 paa(frame3d, 2.0);
AMCAX::Parabola3 pa2 = paa.Value();
AMCAX::TopoShape Parabola3d = AMCAX::MakeEdge(pa2, -1., 1.);
AMCAX::OCCTIO::OCCTTool::Write(Parabola3d, "./Parabola3d.brep");
构造二维抛物线的类
定义 MakeParabola2.hpp:13
构造三维抛物线的类
定义 MakeParabola3.hpp:13
ParabolaS< 2 > Parabola2
二维抛物线
定义 ParabolaT.hpp:195
ParabolaS< 3 > Parabola3
三维抛物线
定义 ParabolaT.hpp:198

曲面

平面

AMCAX::MakePlane3 用于创建三维平面。需要注意的是平面是无限的,所以若想输出文件,需使用 AMCAX::MakeFace ,并且设置 u 方向和 v 方向上的起始参数和结束参数。

AMCAX::Frame3 frame3d;
AMCAX::MakePlane3 pl(frame3d);
AMCAX::Plane pl1 = pl.Value();
AMCAX::TopoShape plane3d = AMCAX::MakeFace(pl1,0.,2.,0.,2.);
AMCAX::OCCTIO::OCCTTool::Write(plane3d, "./plane3d.brep");
Class of making a face
定义 MakeFace.hpp:22
构造三维平面的类
定义 MakePlane3.hpp:13
平面类
定义 Plane.hpp:13

圆锥面

AMCAX::MakeCone3 用于创建圆锥面。需要注意的是圆锥面是无限的,所以若想输出文件,需使用 AMCAX::MakeFace ,并且设置 u 方向和 v 方向上的起始参数和结束参数。

AMCAX::Point3 pp1(0., 0., 0.);
AMCAX::Point3 pp2(1., 2., 3.);
AMCAX::MakeCone3 co(pp1,pp2,2.0,1.0);
AMCAX::Cone co1 = co.Value();
AMCAX::TopoShape cone3d = AMCAX::MakeFace(co1, 0., 2., 0., 2.);
AMCAX::OCCTIO::OCCTTool::Write(cone3d, "./cone3d.brep");
圆锥类
定义 Cone.hpp:12
构造圆锥的类
定义 MakeCone3.hpp:14

圆柱面

AMCAX::MakeCylinder3 用于创建圆柱面,需要注意的是圆柱面是无限的,所以若想输出文件,需使用 AMCAX::MakeFace ,并且设置 u 方向和 v 方向上的起始参数和结束参数。

AMCAX::Frame3 frame3d;
AMCAX::MakeCylinder3 cy(frame3d, 2.0);
AMCAX::Cylinder cy1 = cy.Value();
AMCAX::TopoShape cylinder3d = AMCAX::MakeFace(cy1, 0., 2., 0., 2.);
AMCAX::OCCTIO::OCCTTool::Write(cylinder3d, "./cylinder3d.brep");
圆柱类
定义 Cylinder.hpp:12
构造圆柱的类
定义 MakeCylinder3.hpp:14

完整的几何曲线和曲面

曲线

直线

AMCAX::MakeGeom2Line 用于创建二维几何直线, AMCAX::MakeGeom3Line 用于创建三维几何直线。

//2d
AMCAX::MakeGeom2Line geom2line(AMCAX::Point2(0.0, 0.0), AMCAX::Direction2(1.0, 0.0));
std::shared_ptr< AMCAX::Geom2Line > geomline2d = geom2line.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge2d(geomline2d, 0., 1.),"geomline2d.brep");
//3d
AMCAX::MakeGeom3Line geom3line(AMCAX::Point3(0.0, 0.0,0.0), AMCAX::Direction3(1.0, 0.0,0.0));
std::shared_ptr< AMCAX::Geom3Line > geomline3d = geom3line.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge(geomline3d, 0., 1.), "geomline3d.brep");
构造二维几何直线的类
定义 MakeGeom2Line.hpp:13
构造三维几何直线的类
定义 MakeGeom3Line.hpp:15

AMCAX::MakeGeom2Circle 用于创建二维几何圆, AMCAX::MakeGeom3Circle 用于创建三维几何圆。

//2d
AMCAX::Frame2 frame2d;
AMCAX::MakeGeom2Circle geom2circle(frame2d, 3.0);
std::shared_ptr< AMCAX::Geom2Circle > geomcircle2d = geom2circle.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge2d(geomcircle2d), "geomcircle2d.brep");
//3d
AMCAX::Frame3 frame3d;
AMCAX::MakeGeom3Circle geom3circle(frame3d, 2.0);
std::shared_ptr< AMCAX::Geom3Circle > geomcircle3d = geom3circle.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge(geomcircle3d), "geomcircle3d.brep");
构造二维几何圆的类
定义 MakeGeom2Circle.hpp:13
构造三维几何圆的类
定义 MakeGeom3Circle.hpp:13

椭圆

AMCAX::MakeGeom2Ellipse 用于创建二维几何椭圆, AMCAX::MakeGeom3Ellipse 用于创建三维几何椭圆。

//2d
AMCAX::Frame2 frame2d;
AMCAX::MakeGeom2Ellipse geom2ellipse(frame2d, 2.0, 1.0);
std::shared_ptr< AMCAX::Geom2Ellipse >geomellipse2d = geom2ellipse.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge2d(geomellipse2d), "geomellipse2d.brep");
//3d
AMCAX::Frame3 frame3d;
AMCAX::MakeGeom3Ellipse geom3ellipse(frame3d, 4.0, 2.0);
std::shared_ptr< AMCAX::Geom3Ellipse >geomellipse3d = geom3ellipse.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge(geomellipse3d), "geomellipse3d.brep");
构造二维几何椭圆的类
定义 MakeGeom2Ellipse.hpp:13
构造三维几何椭圆的类
定义 MakeGeom3Ellipse.hpp:13

双曲线

AMCAX::MakeGeom2Hyperbola 用于创建二维几何双曲线, AMCAX::MakeGeom3Hyperbola 用于创建三维几何双曲线。

//2d
AMCAX::Frame2 frame2d;
AMCAX::MakeGeom2Hyperbola geom2hyperbola(frame2d, 2.0, 1.0);
std::shared_ptr< AMCAX::Geom2Hyperbola > geomhyperbola2d = geom2hyperbola.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge2d(geomhyperbola2d,-1.0,1.0), "geomhyperbola2d.brep");
//3d
AMCAX::Frame3 frame3d;
AMCAX::MakeGeom3Hyperbola geom3hyperbola(frame3d, 4.0, 2.0);
std::shared_ptr< AMCAX::Geom3Hyperbola > geomhyperbola3d = geom3hyperbola.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge(geomhyperbola3d, -1.0, 1.0), "geomhyperbola3d.brep");
构造二维几何双曲线的类
定义 MakeGeom2Hyperbola.hpp:13
构造三维几何双曲线的类
定义 MakeGeom3Hyperbola.hpp:13

抛物线

AMCAX::MakeGeom2Parabola 用于创建二维几何抛物线, AMCAX::MakeGeom3Parabola 用于创建三维几何抛物线。

//2d
AMCAX::Frame2 frame2d;
AMCAX::MakeGeom2Parabola geom2parabola(frame2d, 2.0);
std::shared_ptr< AMCAX::Geom2Parabola > geomparabola2d = geom2parabola.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge2d(geomparabola2d, -3.0, 3.0), "geomparabola2d.brep");
//3d
AMCAX::Frame3 frame3d;
AMCAX::MakeGeom3Parabola geom3parabola(frame3d, 4.0);
std::shared_ptr< AMCAX::Geom3Parabola > geomparabola3d = geom3parabola.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge(geomparabola3d, -5.0, 5.0), "geomparabola3d.brep");
构造二维几何抛物线的类
定义 MakeGeom2Parabola.hpp:13
构造三维几何抛物线的类
定义 MakeGeom3Parabola.hpp:13

曲面

平面

AMCAX::MakeGeom3Plane 用于创建几何平面。

AMCAX::MakeGeom3Plane geom3plane(AMCAX::Point3(0.0,0.0,1.0),AMCAX::Direction3(1.,2.,3.));
std::shared_ptr< AMCAX::Geom3Plane > geomplane = geom3plane.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeFace(geomplane, -1., 1., -1., 1., AMCAX::Precision::Confusion()),"./geompalne.brep");
构造三维几何平面的类
定义 MakeGeom3Plane.hpp:13
static constexpr double Confusion() noexcept
获取混淆容差
定义 Precision.hpp:122

圆锥面

AMCAX::MakeGeom3ConicalSurface 用于创建几何圆锥面。

AMCAX::Frame3 frame3d;
AMCAX::MakeGeom3ConicalSurface geom3conicalsurface(frame3d, 2.0, M_PI_4);
std::shared_ptr< AMCAX::Geom3ConicalSurface > geomconicalsurface = geom3conicalsurface.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeFace(geomconicalsurface, 0., 2 * M_PI * 2.0, 0., 100., AMCAX::Precision::Confusion()), "./geomconicalsurface.brep");
构造几何圆锥曲面的类
定义 MakeGeom3ConicalSurface.hpp:13

圆柱面

AMCAX::MakeGeom3CylindricalSurface 用于创建几何圆柱面。

std::shared_ptr< AMCAX::Geom3CylindricalSurface > geomcylindricalsurface = geom3cylindersurface.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeFace(geomcylindricalsurface, 0., 2*2.0*M_PI, 0., 3., AMCAX::Precision::Confusion()), "./geomcylindricalsurface.brep");
构造几何圆柱曲面的类
定义 MakeGeom3CylindricalSurface.hpp:14

参数域修剪过的曲线和曲面

曲线

线段

AMCAX::MakeSegment2d 用于创建二维线段, AMCAX::MakeSegment 用于创建三维线段。

//2d
AMCAX::Point2 P2(1., 3.);
AMCAX::MakeSegment2d makesegment2d(P1, P2);
std::shared_ptr< AMCAX::Geom2TrimmedCurve > segment2d = makesegment2d.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge2d(segment2d), "./segment2d.brep");
//3d
AMCAX::Point3 P4(1.,2.,3.);
AMCAX::MakeSegment makesegment(P3,P4);
std::shared_ptr< AMCAX::Geom3TrimmedCurve > segment3d = makesegment.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge(segment3d), "./segment3d.brep");
构造二维线段的类
定义 MakeSegment2d.hpp:17
构造三维线段的类
定义 MakeSegment.hpp:17

圆弧

AMCAX::MakeArcOfCircle2d 用于创建二维圆弧, AMCAX::MakeArcOfCircle 用于创建三维圆弧。

//2d
AMCAX::MakeCircle2 makecircle2(AMCAX::Frame2(), 2.0);
AMCAX::MakeArcOfCircle2d makearcofcircle2d(makecircle2.Value(), 0., 2.,true);
std::shared_ptr< AMCAX::Geom2TrimmedCurve >arcofcircle2d = makearcofcircle2d.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge2d(arcofcircle2d), "./arcofcircle2d.brep");
//3d
AMCAX::MakeCircle3 makecircle3(AMCAX::Frame3(), 3.0);
AMCAX::MakeArcOfCircle makearcofcircle(makecircle3.Value(), 0., 3.,true);
std::shared_ptr< AMCAX::Geom3TrimmedCurve >arcofcircle3d = makearcofcircle.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge(arcofcircle3d), "./arcofcircle3d.brep");
构造二维圆弧的类
定义 MakeArcOfCircle2d.hpp:17
构造三维圆弧的类
定义 MakeArcOfCircle.hpp:17

椭圆弧

AMCAX::MakeArcOfEllipse2d 用于创建二维椭圆弧, AMCAX::MakeArcOfEllipse 用于创建三维椭圆弧。

//2d
AMCAX::MakeEllipse2 makeellipse2(AMCAX::Frame2(), 2., 1.);
AMCAX::MakeArcOfEllipse2d makearcofellipse2d(makeellipse2.Value(), 0., 2.,true);
std::shared_ptr< AMCAX::Geom2TrimmedCurve > arcofellipse2d = makearcofellipse2d.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge2d(arcofellipse2d), "./arcofellipse2d.brep");
//3d
AMCAX::MakeEllipse3 makeellipse3(AMCAX::Frame3(), 3., 2.);
AMCAX::MakeArcOfEllipse makearcofellipse(makeellipse3.Value(), 0., 2.,true);
std::shared_ptr< AMCAX::Geom3TrimmedCurve > arcofellipse3d = makearcofellipse.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge(arcofellipse3d), "./arcofellipse3d.brep");
构造二维椭圆弧的类
定义 MakeArcOfEllipse2d.hpp:17
构造三维椭圆弧的类
定义 MakeArcOfEllipse.hpp:17

双曲线弧

AMCAX::MakeArcOfHyperbola2d 用于创建二维双曲线弧, AMCAX::MakeArcOfHyperbola 用于创建三维双曲线弧。

//2d
AMCAX::MakeHyperbola2 makehyperbola2(AMCAX::Frame2(), 2., 1.);
AMCAX::MakeArcOfHyperbola2d makearcofhyperbola2d(makehyperbola2.Value(), 0., 2.,true);
std::shared_ptr< AMCAX::Geom2TrimmedCurve > arcofhyperbola2d = makearcofhyperbola2d.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge2d(arcofhyperbola2d), "./arcofhyperbola2d.brep");
//3d
AMCAX::MakeHyperbola3 makehyperbola3(AMCAX::Frame3(), 3., 2.);
AMCAX::MakeArcOfHyperbola makearcofhyperbola(makehyperbola3.Value(), 0., 2.,true);
std::shared_ptr< AMCAX::Geom3TrimmedCurve > arcofhyperbola3d = makearcofhyperbola.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge(arcofhyperbola3d), "./arcofhyperbola3d.brep");
构造二维双曲线弧的类
定义 MakeArcOfHyperbola2d.hpp:17
构造三维双曲线弧的类
定义 MakeArcOfHyperbola.hpp:17

抛物线弧

AMCAX::MakeArcOfParabola2d 用于创建二维抛物线弧, AMCAX::MakeArcOfParabola 用于创建三维抛物线弧。

//2d
AMCAX::MakeParabola2 makeparabola2(AMCAX::Frame2(), 2.);
AMCAX::MakeArcOfParabola2d makearcofparabola2d(makeparabola2.Value(), 0., 2.,true);
std::shared_ptr< AMCAX::Geom2TrimmedCurve > arcofparabola2d = makearcofparabola2d.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge2d(arcofparabola2d), "./arcofparabola2d.brep");
//3d
AMCAX::MakeParabola3 makeparabola3(AMCAX::Frame3(), 3.);
AMCAX::MakeArcOfParabola makearcofparabola(makeparabola3.Value(), 0., 2.,true);
std::shared_ptr< AMCAX::Geom3TrimmedCurve > arcofparabola3d = makearcofparabola.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge(arcofparabola3d), "./arcofparabola3d.brep");
构造二维抛物线弧的类
定义 MakeArcOfParabola2d.hpp:17
构造三维抛物线弧的类
定义 MakeArcOfParabola.hpp:17

曲面

修剪圆锥面

AMCAX::MakeTrimmedCone 用于创建修剪圆锥面。

AMCAX::MakeTrimmedCone maketrimmedcone(AMCAX::Point3(), AMCAX::Point3(0., 0., 1.), 2., 1.);
std::shared_ptr< AMCAX::Geom3TrimmedSurface > trimmedcone = maketrimmedcone.Value();
构造修剪圆锥的类
定义 MakeTrimmedCone.hpp:17

修剪圆柱面

AMCAX::MakeTrimmedCylinder 用于创建修剪圆柱面。

AMCAX::MakeTrimmedCylinder maketrimmedcylinder(AMCAX::Point3(), AMCAX::Point3(0., 0., 2.), AMCAX::Point3(2., 0., 0.));
std::shared_ptr< AMCAX::Geom3TrimmedSurface > trimmedcylinder = maketrimmedcylinder.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeFace(trimmedcylinder, AMCAX::Precision::Confusion()), "./trimmedcylinder.brep");
构造修剪圆柱的类
定义 MakeTrimmedCylinder.hpp:17

曲线和曲面的求值

曲线和曲面的求值可以通过 Value() 或 D0() 来实现。

AMCAX::MakeTrimmedCylinder maketrimmedcylinder(AMCAX::Point3(), AMCAX::Point3(0., 0., 2.), AMCAX::Point3(2., 0., 0.));
std::shared_ptr< AMCAX::Geom3TrimmedSurface > trimmedcylinder = maketrimmedcylinder.Value();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeFace(trimmedcylinder, AMCAX::Precision::Confusion()), "./trimmedcylinder.brep");
std::cout << trimmedcylinder->FirstUParameter();//0
std::cout << trimmedcylinder->LastUParameter();//6.28319
std::cout << trimmedcylinder->FirstVParameter();//0
std::cout << trimmedcylinder->LastVParameter();//2
//1
double u = 2., v = 0.9;
trimmedcylinder->D0(u, v, P);
std::cout << "P:" << P << std::endl;//P:-0.832294 1.81859 0.9
//2
std::cout << trimmedcylinder->Value(u, v) << std::endl;//-0.832294 1.81859 0.9
virtual AMCAX_API Point3 Value(double u, double v) const
计算给定参数处的点
AMCAX_API void D0(double u, double v, Point3 &p) const override
计算给定参数处的点
AMCAX_API double LastVParameter() const override
获取结束 v 参数
AMCAX_API double FirstVParameter() const override
获取起始 v 参数
AMCAX_API double FirstUParameter() const override
获取起始 u 参数
AMCAX_API double LastUParameter() const override
获取结束 u 参数

通过插值和拟合创建参数化曲线和曲面

插值曲线

二维插值曲线

AMCAX::GeomAPIInterpolate2 用于计算二维插值曲线。

std::vector<AMCAX::Point2> points = {
AMCAX::Point2(0.0, 0.0),
AMCAX::Point2(1.0, 1.0),
AMCAX::Point2(2.0, 0.0),
AMCAX::Point2(3.0, -1.0),
AMCAX::Point2(4.0, 0.0)
};
std::vector<double> parameters = { 0.0, 0.25, 0.5, 0.75, 1.0 };
bool periodic = false;
AMCAX::GeomAPIInterpolate2 interpolate(points, parameters, periodic, AMCAX::Precision::Confusion());
interpolate.Perform();
if (interpolate.IsDone())
{
std::shared_ptr<AMCAX::Geom2BSplineCurve> curve2d = interpolate.Curve();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge2d(curve2d, AMCAX::Point2(0.0, 0.0), AMCAX::Point2(4.0, 0.0)), "./curve2d.brep");
}
else
std::cout << "error:interpolate failed" << std::endl;
根据二维点计算出一条插值曲线的类
定义 GeomAPIInterpolate2.hpp:18

另外还可以通过 AMCAX::GeomAPIInterpolate2::Load 实现在插值过程中添加切向量约束条件,从而控制生成曲线的形状。可以添加所有点的切向量作为约束条件,也可以仅添加起始点和结束点的切向量作为约束条件。 以上述例子为例:
添加所有点的切向量作为约束条件:

std::vector<AMCAX::Vector2> tangents1 = {
AMCAX::Vector2(1.0, 0.0),
AMCAX::Vector2(0.0, 1.0),
AMCAX::Vector2(-1.0, 0.0),
AMCAX::Vector2(0.0, -1.0),
AMCAX::Vector2(1.0, 0.0)
};
std::vector<bool> tangentFlags1 = { true, true, true, true, true };
interpolate.Load(tangents1, tangentFlags1, true);
VectorT< double, 2 > Vector2
二维向量
定义 VectorT.hpp:704

添加起始点和结束点的切向量作为约束条件:

AMCAX::Vector2 firstTangent(1.0, 0.0);
AMCAX::Vector2 lastTangent(0.0, -1.0);
interpolate.Load(firstTangent, lastTangent, true);

三维插值曲线

AMCAX::GeomAPIInterpolate3 用于计算三维插值曲线。

std::vector<AMCAX::Point3> points2 = {
AMCAX::Point3(0.0, 0.0, 0.0),
AMCAX::Point3(1.0, 1.0, 1.0),
AMCAX::Point3(2.0, 0.0, 2.0),
AMCAX::Point3(3.0, -1.0, 3.0),
AMCAX::Point3(4.0, 0.0, 4.0)
};
std::vector<double> parameters2 = { 0.0, 0.25, 0.5, 0.75, 1.0 };
bool periodic2 = false;
AMCAX::GeomAPIInterpolate3 interpolate2(points2, parameters2, periodic2, AMCAX::Precision::Confusion());
interpolate2.Perform();
if (interpolate2.IsDone()) {
std::shared_ptr<AMCAX::Geom3BSplineCurve> curve3d = interpolate2.Curve();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge(curve3d, AMCAX::Point3(0.0, 0.0, 0.0), AMCAX::Point3(4.0, 0.0, 4.0)), "./curve3d.brep");
}
else {
std::cout << "error: interpolate failed" << std::endl;
}
根据三维点计算出一条插值曲线的类
定义 GeomAPIInterpolate3.hpp:18

另外还可以通过 AMCAX::GeomAPIInterpolate3::Load 实现在插值过程中添加切向量约束条件,从而控制生成曲线的形状。可以添加所有点的切向量作为约束条件,也可以仅添加起始点和结束点的切向量作为约束条件。 以上述例子为例:
添加所有点的切向量作为约束条件:

std::vector<AMCAX::Vector3> tangents2 = {
AMCAX::Vector3(1.0, 0.0, 0.0),
AMCAX::Vector3(0.0, 1.0, 0.0),
AMCAX::Vector3(0.0, 0.0, 1.0),
AMCAX::Vector3(-1.0, 0.0, 0.0),
AMCAX::Vector3(0.0, -1.0, 0.0)
};
std::vector<bool> tangentFlags2 = { true, true, true, true, true };
interpolate2.Load(tangents2, tangentFlags2, true);
VectorT< double, 3 > Vector3
三维向量
定义 VectorT.hpp:707

添加起始点和结束点的切向量作为约束条件:

AMCAX::Vector3 firstTangent3(1.0, 0.0, 0.0);
AMCAX::Vector3 lastTangent3(0.0, -1.0, 0.0);
interpolate2.Load(firstTangent3, lastTangent3, true);

拟合曲线

二维拟合曲线

AMCAX::GeomAPIPointsToBSpline2 用于计算二维拟合曲线。

std::vector<AMCAX::Point2> points3 = {
AMCAX::Point2(0.0, 0.0),
AMCAX::Point2(1.0, 1.0),
AMCAX::Point2(2.0, 0.0),
AMCAX::Point2(3.0, -1.0),
AMCAX::Point2(4.0, 0.0)
};
std::vector<double> parameters3 = { 0.0, 0.25, 0.5, 0.75, 1.0 };
int degMin1 = 3;
int degMax1 = 8;
AMCAX::ContinuityType continuity1 = AMCAX::ContinuityType::C2;
double tol1 = 1e-3;
AMCAX::GeomAPIPointsToBSpline2 bsplineFitter1(points3, parameters3, degMin1, degMax1, continuity1, tol1);
if (bsplineFitter1.IsDone()) {
std::shared_ptr<AMCAX::Geom2BSplineCurve> BSplineCurve2d = bsplineFitter1.Curve();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge2d(BSplineCurve2d, AMCAX::Point2(0.0, 0.0), AMCAX::Point2(4.0, 0.0)), "./BSplineCurve2d.brep");
}
else {
std::cout << "error: Bspline curve fitting failed" << std::endl;
}
根据二维点拟合一条 B 样条曲线的类
定义 GeomAPIPointsToBSpline2.hpp:19
ContinuityType
连续性类型
定义 GeometryMacros.hpp:84

另外还可以根据起始点 x 坐标、 x 坐标恒定增加值,以及 y 坐标的点集拟合一条 B 样条曲线。在以下示例中,起始点的 x 坐标为 0.0,x 坐标恒定增加值为 1.0,而 y 坐标的点集大小为 5,那么可以推断出结束点的 x 坐标为 4.0。

std::vector<double> yValues = {
0.0, 1.0, 0.5, 2.0, 1.5
};
double x0 = 0.0;
double dx = 1.0;
AMCAX::GeomAPIPointsToBSpline2 bsplineFitter2(yValues, x0, dx, 3, 8, AMCAX::ContinuityType::C2, 1e-6);
if (bsplineFitter2.IsDone()) {
std::shared_ptr<AMCAX::Geom2BSplineCurve> BSplineCurve2d_2 = bsplineFitter2.Curve();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge2d(BSplineCurve2d_2), "./BSplineCurve2d_2.brep");
}
else {
std::cout << "error: Bspline curve fitting failed" << std::endl;
}

三维拟合曲线

AMCAX::GeomAPIPointsToBSpline3 用于计算三维拟合曲线。

std::vector<AMCAX::Point3> points5 = {
AMCAX::Point3(0.0, 0.0, 0.0),
AMCAX::Point3(1.0, 1.0, 1.0),
AMCAX::Point3(2.0, 0.0, 2.0),
AMCAX::Point3(3.0, -1.0, 3.0),
AMCAX::Point3(4.0, 0.0, 4.0)
};
std::vector<double> parameters4 = { 0.0, 0.25, 0.5, 0.75, 1.0 };
int degMin2 = 3;
int degMax2 = 8;
AMCAX::ContinuityType continuity2 = AMCAX::ContinuityType::C2;
double tol2 = 1e-3;
AMCAX::GeomAPIPointsToBSpline3 bsplineFitter3(points5, parameters4, degMin2, degMax2, continuity2, tol2);
if (bsplineFitter2.IsDone()) {
std::shared_ptr<AMCAX::Geom3BSplineCurve> BSplineCurve3d = bsplineFitter3.Curve();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge(BSplineCurve3d, AMCAX::Point3(0.0, 0.0, 0.0), AMCAX::Point3(4.0, 0.0, 4.0)), "./BSplineCurve3d.brep");
}
else {
std::cout << "error: Bspline curve fitting failed" << std::endl;
}
根据三维点拟合一条 B 样条曲线的类
定义 GeomAPIPointsToBSpline3.hpp:19

拟合曲面

AMCAX::GeomAPIPointsToBSplineSurface 用于计算拟合曲面。

controls(0, 0) = AMCAX::Point3(-6., -6., 0.);
controls(0, 1) = AMCAX::Point3(-3., -6., -2.);
controls(0, 2) = AMCAX::Point3(3., -6., -2.);
controls(0, 3) = AMCAX::Point3(6., -6., 0.);
controls(1, 0) = AMCAX::Point3(-6., -3., -2.);
controls(1, 1) = AMCAX::Point3(-3., -3., -2.);
controls(1, 2) = AMCAX::Point3(3., -3., 2.);
controls(1, 3) = AMCAX::Point3(6., -3., 2.);
controls(2, 0) = AMCAX::Point3(-6., 3., -2.);
controls(2, 1) = AMCAX::Point3(-3., 3., 2.);
controls(2, 2) = AMCAX::Point3(3., 3., -2.);
controls(2, 3) = AMCAX::Point3(6., 3., 2.);
controls(3, 0) = AMCAX::Point3(-6., 6., 0.);
controls(3, 1) = AMCAX::Point3(-3., 6., 2.);
controls(3, 2) = AMCAX::Point3(3., 6., 2.);
controls(3, 3) = AMCAX::Point3(6., 6., 0.);
AMCAX::GeomAPIPointsToBSplineSurface bsplineSurfaceFitter(controls, 3, 8, AMCAX::ContinuityType::C2, 1e-3);
if (bsplineSurfaceFitter.IsDone()) {
std::shared_ptr<AMCAX::Geom3BSplineSurface> bsplinesurface = bsplineSurfaceFitter.Surface();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeFace(bsplinesurface,AMCAX::Precision::Confusion()), "./BSplineSurface.brep");
}
else {
std::cout << "error: Bspline surface fitting failed" << std::endl;
}
二维数组模板类
定义 Array2.hpp:17
根据点拟合一个 B 样条曲面的类
定义 GeomAPIPointsToBSplineSurface.hpp:19

另外还可以根据起始点的 x 坐标和 y 坐标、x 坐标和 y 坐标的恒定增加值,以及 z 坐标的点集拟合一个 B 样条曲面。

AMCAX::Array2<double> zPoints(3, 3);
zPoints(0, 0) = 0.0; zPoints(0, 1) = 1.0; zPoints(0, 2) = 0.0;
zPoints(1, 0) = 1.0; zPoints(1, 1) = 2.0; zPoints(1, 2) = 1.0;
zPoints(2, 0) = 0.0; zPoints(2, 1) = 1.0; zPoints(2, 2) = 0.0;
double x0 = 0.0;
double dx = 1.0;
double y0 = 0.0;
double dy = 1.0;
AMCAX::GeomAPIPointsToBSplineSurface bsplineSurfaceFitter2(zPoints, x0, dx, y0, dy, 3, 8, AMCAX::ContinuityType::C2, 1e-3);
if (bsplineSurfaceFitter2.IsDone()) {
std::shared_ptr<AMCAX::Geom3BSplineSurface> bsplinesurface2 = bsplineSurfaceFitter2.Surface();
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeFace(bsplinesurface2, AMCAX::Precision::Confusion()), "./BSplineSurface2.brep");
}
else {
std::cout << "error: Bspline surface fitting failed" << std::endl;
}

二维曲线相交,曲线曲面相交和曲面曲面相交

二维曲线相交

AMCAX::GeomAPIIntCurveCurve2 用于计算两条二维曲线相交的结果,结果可能是交点或者线段。
如果相交结果为交点,则可以通过 AMCAX::GeomAPIIntCurveCurve2::NPoints() 获取交点的数目,通过 AMCAX::GeomAPIIntCurveCurve2::Point() 获取交点坐标,另外还可以通过 AMCAX::GeomAPIIntCurveCurve2::ParamOnCurve1 () 和 AMCAX::GeomAPIIntCurveCurve2::ParamOnCurve2() 分别获取曲线上的交点参数。
如果相交结果为线段,则可以通过 AMCAX::GeomAPIIntCurveCurve2::NSegments () 获取线段的数目,若想获取某个线段,可以通过 AMCAX::GeomAPIIntCurveCurve2::Segment() 来获取。

//point
std::vector<AMCAX::Point2> pts1 = {
AMCAX::Point2(0.0, 2.0),
AMCAX::Point2(1.0, 3.0),
AMCAX::Point2(2.0, 1.0),
AMCAX::Point2(3.0, 3.0),
AMCAX::Point2(4.0, 1.0),
AMCAX::Point2(5.0, 3.0),
AMCAX::Point2(6.0, 2.0)
};
std::vector<double> knots1 = { 0.0, 0.2, 0.4, 0.6, 0.8, 1.0 };
std::vector<int> mults1 = { 4, 1, 1, 1, 1, 4 };
auto bspline1 = std::make_shared< AMCAX::Geom2BSplineCurve>(pts1, knots1, mults1, 4);
AMCAX::Frame2 frame(AMCAX::Point2(3.0, 3.0), AMCAX::Direction2(1.0, 0.0),AMCAX::Direction2(0.0,1.0));
auto circle = std::make_shared<AMCAX::Geom2Circle>(frame, 1.0);
std::cout << cc.NPoints() << std::endl;//2
std::cout << cc.Point(0) << std::endl;//2.59489 2.08573
std::cout << cc.Point(1) << std::endl;//3.40511 2.08573
std::cout << cc.ParamOnCurve1(0) << std::endl;//0.420769
std::cout << cc.ParamOnCurve1(1) << std::endl;//0.579231
std::cout << cc.ParamOnCurve2(0) << std::endl;//4.29529
std::cout << cc.ParamOnCurve2(1) << std::endl;//5.12949
//segment
auto line1 = std::make_shared<AMCAX::Geom2Line>(AMCAX::Point2(0., 0.), AMCAX::Direction2(1., 0.));
auto trimline1 = std::make_shared<AMCAX::Geom2TrimmedCurve>(line1, 0.0, 3.0);
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge2d(trimline1), "trimline1.brep");
auto line2 = std::make_shared<AMCAX::Geom2Line>(AMCAX::Point2(0., 0.), AMCAX::Direction2(1., 0.));
auto trimline2 = std::make_shared<AMCAX::Geom2TrimmedCurve>(line2, 2.0, 4.0);
AMCAX::OCCTIO::OCCTTool::Write(AMCAX::MakeEdge2d(trimline2), "trimline2.brep");
std::cout << cc2.NSegments() << std::endl;//1
std::pair< double, double > paramOnCurve1;
std::pair< double, double > paramOnCurve2;
cc2.Segment(0, paramOnCurve1, paramOnCurve2);
std::cout << paramOnCurve1.first << std::endl;//2
std::cout << paramOnCurve1.second << std::endl;//3
std::cout << paramOnCurve2.first << std::endl;//2
std::cout << paramOnCurve2.second << std::endl;//3
计算两条二维曲线交点的类
定义 GeomAPIIntCurveCurve2.hpp:17

此外 AMCAX::GeomAPIIntCurveCurve2 还可用于判断二维曲线是否自交,计算二维曲线自交点的数目。

std::vector<AMCAX::Point2> pts2 = {
AMCAX::Point2(0.5, 0.5),
AMCAX::Point2(1.0, 3.0),
AMCAX::Point2(3.0, 1.0),
AMCAX::Point2(3.8,2.0),
AMCAX::Point2(2.5,3.5),
AMCAX::Point2(1.0,0.5),
AMCAX::Point2(0.3,2.0)
};
std::vector<double> knots2 = { 0.0, 0.25, 0.5,0.75,1.0 };
std::vector<int> mults2 = { 4, 1, 1,1,4 };
auto bspline = std::make_shared< AMCAX::Geom2BSplineCurve>(pts2, knots2, mults2, 3);
std::cout << cc3.NPoints() << std::endl;//2

曲线曲面相交

AMCAX::GeomAPIIntCurveSurface 用于计算曲线和曲面相交的结果,结果可能是交点或者线段。
如果相交结果为交点,则可以通过 AMCAX::GeomAPIIntCurveSurface::NPoints() 获取交点的数目,通过 AMCAX::GeomAPIIntCurveSurface::Point() 获取交点坐标,另外还可以通过 AMCAX::GeomAPIIntCurveSurface::Parameters() 获取曲线和曲面上交点的参数。
如果相交结果为线段,则可以通过 AMCAX::GeomAPIIntCurveSurface::NSegments() 获取线段的数目,若想获取某个线段,可以通过 AMCAX::GeomAPIIntCurveSurface::Segment() 来获取。

//point
std::vector<AMCAX::Point3> pts3 = {
AMCAX::Point3(0.0, 0.0,0.0),
AMCAX::Point3(2.0, 2.0,2.0),
AMCAX::Point3(4.0, 3.0,5.0),
AMCAX::Point3(6.0,2.0,4.0)
};
auto bezier = std::make_shared<AMCAX::Geom3BezierCurve>(pts3);
std::shared_ptr<AMCAX::Geom3CylindricalSurface> CylindricalSurface = std::make_shared< AMCAX::Geom3CylindricalSurface>(AMCAX::Frame3(), 3.0);
std::shared_ptr<AMCAX::Geom3TrimmedSurface> TrimmedSurface = std::make_shared<AMCAX::Geom3TrimmedSurface>(CylindricalSurface, 0., 5., false);
AMCAX::GeomAPIIntCurveSurface cs(bezier, TrimmedSurface);
cs.Perform(bezier, TrimmedSurface);
std::cout << cs.IsDone() << std::endl;//1
std::cout << cs.NPoints() << std::endl;//1
double u = 0., v = 0., w = 0.;
cs.Parameters(0, u, v, w);
std::cout << "u:" << u << std::endl;//u:0.660279
std::cout << "v:" << v << std::endl;//v:2.52939
std::cout << "w:" << w << std::endl;//w:0.394911
std::cout << "point:" << cs.Point(0) << std::endl;//point:2.36946 1.84001 2.52939
计算曲线与曲面相交的类
定义 GeomAPIIntCurveSurface.hpp:18

曲面曲面相交

AMCAX::GeomAPIIntSurfaceSurface 用于计算曲面和曲面相交的结果,可以通过 AMCAX::GeomAPIIntSurfaceSurface::NLines() 获取交线的数目,如果想获取交线,则可以通过 AMCAX::GeomAPIIntSurfaceSurface::Line() 来获取。

std::shared_ptr<AMCAX::Geom3CylindricalSurface> CylindricalSurface3 = std::make_shared< AMCAX::Geom3CylindricalSurface>(AMCAX::Frame3(), 2.0);
std::shared_ptr<AMCAX::Geom3TrimmedSurface> trimcylinder = std::make_shared<AMCAX::Geom3TrimmedSurface>(CylindricalSurface3, 0., 5., false);
auto plane2 = std::make_shared<AMCAX::Geom3Plane>(frame2);
std::shared_ptr<AMCAX::Geom3TrimmedSurface> trimplane2 = std::make_shared<AMCAX::Geom3TrimmedSurface>(plane2, 0., 5., 0., 5.);
ss.Perform(trimcylinder, trimplane2, AMCAX::Precision::Confusion());
std::cout << ss.IsDone() << std::endl;//1
std::cout << ss.NLines() << std::endl;//1
std::shared_ptr< AMCAX::Geom3Curve >line3 = ss.Line(0);
计算两个曲面交线的类
定义 GeomAPIIntSurfaceSurface.hpp:18

计算几何对象之间的极值

二维曲线之间的极值

AMCAX::GeomAPIExtremaCurveCurve2 用于计算两条二维曲线之间距离的极小值点。对于输入的两条曲线,可以先通过 AMCAX::GeomAPIExtremaCurveCurve2::IsParallel 来判断两条曲线是否平行,若两条曲线平行,则极值点不存在,此时 NExtrema() 返回 1,当获取最近距离或获取最近点时会抛 OutOfRange 异常。如果两条曲线不平行,则可以通过以下方法获取信息:

AMCAX::GeomAPIExtremaCurveCurve2::NExtrema 用于获得极小值点的个数;
AMCAX::GeomAPIExtremaCurveCurve2::Points 用于获得极小值点;
AMCAX::GeomAPIExtremaCurveCurve2::Distance 用于获得极小值点之间的距离;
AMCAX::GeomAPIExtremaCurveCurve2::Parameters 用于获得极小值点的参数;
AMCAX::GeomAPIExtremaCurveCurve2::LowerDistance 用于获得极小值点之间的最小距离;
AMCAX::GeomAPIExtremaCurveCurve2::LowerDistanceParameters 用于获得两条曲线上距离最小的极小值点的参数。

std::vector<AMCAX::Point2> pts1 = {
AMCAX::Point2(0.0, 2.0),
AMCAX::Point2(1.0, 3.0),
AMCAX::Point2(2.0, 1.0),
AMCAX::Point2(3.0, 3.0),
AMCAX::Point2(4.0, 1.0),
AMCAX::Point2(5.0, 3.0),
AMCAX::Point2(6.0, 2.0)
};
std::vector<double> knots1 = { 0.0, 0.2, 0.4, 0.6, 0.8, 1.0 };
std::vector<int> mults1 = { 4, 1, 1, 1, 1, 4 };
auto bspline1 = std::make_shared< AMCAX::Geom2BSplineCurve>(pts1, knots1, mults1, 4);
std::vector<AMCAX::Point2> pts2;
for (const auto& pt : pts1) {
pts2.push_back(AMCAX::Point2(pt.X() , -pt.Y()));
}
auto bspline2 = std::make_shared<AMCAX::Geom2BSplineCurve>(pts2, knots1, mults1, 4);
AMCAX::GeomAPIExtremaCurveCurve2 ex(bspline1, bspline2, bspline1->FirstParameter(), bspline1->LastParameter(), bspline2->FirstParameter(), bspline2->LastParameter());
if (ex.IsParallel()) // parallel case, no extremal points, only extremal distance
{
double dist = ex.LowerDistance(); // minimum distance
}
else
{
if (ex.NExtrema() > 0)
{
AMCAX::Point2 p1, p2;
ex.NearestPoints(p1, p2); // get nearest points
double param1, param2;
ex.LowerDistanceParameters(param1, param2); // get parameters of nearest points
double nearestdist = ex.LowerDistance(); // get nearest distance
std::cout << "p1:" << p1 << std::endl;//p1:2.07541 1.9023
std::cout << "p2:" << p2 << std::endl;//p2:2.07541 -1.9023
std::cout << "param1:" << param1 << std::endl;//p1:2.07541 1.9023
std::cout << "param2:" << param2 << std::endl;//p2:2.07541 -1.9023
std::cout << "nearestdist:" << nearestdist << std::endl;//p2:2.07541 -1.9023
}
for (int i = 0; i < ex.NExtrema(); i++)
{
AMCAX::Point2 p1, p2;
ex.Points(i, p1, p2); // get the i-th extremal points
double param1, param2;
ex.Parameters(i, param1, param2); // get the i-th parameters of extremal points
double dist = ex.Distance(i); // get the i-th extremal distance
std::cout << "the" <<" " << i <<" " << "extremal point:" << std::endl;
std::cout << "p1: " << p1 << std::endl;
std::cout << "p2: " << p2 << std::endl;
std::cout << "param1: " << param1 << std::endl;
std::cout << "param2: " << param2 << std::endl;
std::cout << "dist: " << dist << std::endl;
std::cout << std::endl;
}
}
计算两条二维曲线上极值点的类
定义 GeomAPIExtremaCurveCurve2.hpp:20
auto Distance(const PointT< OtherScalar, DIM > &other) const noexcept
计算该点与其他点的欧几里得距离
定义 PointT.hpp:180

三维曲线之间的极值

建设中。

曲线和曲面之间的极值

建设中。