曲线和曲面的构造
抽象的曲线和曲面
曲线
直线
AMCAX::MakeLine2 用于创建一条二维直线, AMCAX::MakeLine3 用于创建一条三维直线。需要注意的是这里创建的直线都是无限长的,所以若想输出文件,需要借助 AMCAX::MakeEdge2d 和 AMCAX::MakeEdge ,并且设置起始参数和结束参数。
Class of making a 2D edge
定义 MakeEdge2d.hpp:22
Class of making an edge
定义 MakeEdge.hpp:24
构造二维直线的类
定义 MakeLine2.hpp:13
构造三维直线的类
定义 MakeLine3.hpp:13
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::MakeEdge2d 和 AMCAX::MakeEdge (设置起始参数和结束参数可选)。
构造二维圆的类
定义 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(设置起始参数和结束参数可选)。
构造二维椭圆的类
定义 MakeEllipse2.hpp:13
构造三维椭圆的类
定义 MakeEllipse3.hpp:13
EllipseS< 2 > Ellipse2
二维椭圆
定义 EllipseT.hpp:249
EllipseS< 3 > Ellipse3
三维椭圆
定义 EllipseT.hpp:252
双曲线
AMCAX::MakeHyperbola2 用于创建二维双曲线, AMCAX::MakeHyperbola3 用于创建三维双曲线。需要注意的是双曲线是无限的,所以若想输出文件,需使用 AMCAX::MakeEdge2d 和 AMCAX::MakeEdge ,并且设置起始参数和结束参数。
构造二维双曲线的类
定义 MakeHyperbola2.hpp:13
构造三维双曲线的类
定义 MakeHyperbola3.hpp:13
HyperbolaS< 2 > Hyperbola2
二维双曲线
定义 HyperbolaT.hpp:298
HyperbolaS< 3 > Hyperbola3
三维双曲线
定义 HyperbolaT.hpp:301
抛物线
AMCAX::MakeParabola2 用于创建二维抛物线, AMCAX::MakeParabola3 用于创建三维抛物线。需要注意的是抛物线是无限的,所以若想输出文件,需使用 AMCAX::MakeEdge2d 和 AMCAX::MakeEdge ,并且设置起始参数和结束参数。
构造二维抛物线的类
定义 MakeParabola2.hpp:13
构造三维抛物线的类
定义 MakeParabola3.hpp:13
ParabolaS< 2 > Parabola2
二维抛物线
定义 ParabolaT.hpp:195
ParabolaS< 3 > Parabola3
三维抛物线
定义 ParabolaT.hpp:198
曲面
平面
AMCAX::MakePlane3 用于创建三维平面。需要注意的是平面是无限的,所以若想输出文件,需使用 AMCAX::MakeFace ,并且设置 u 方向和 v 方向上的起始参数和结束参数。
Class of making a face
定义 MakeFace.hpp:22
构造三维平面的类
定义 MakePlane3.hpp:13
圆锥面
AMCAX::MakeCone3 用于创建圆锥面。需要注意的是圆锥面是无限的,所以若想输出文件,需使用 AMCAX::MakeFace ,并且设置 u 方向和 v 方向上的起始参数和结束参数。
构造圆锥的类
定义 MakeCone3.hpp:14
圆柱面
AMCAX::MakeCylinder3 用于创建圆柱面,需要注意的是圆柱面是无限的,所以若想输出文件,需使用 AMCAX::MakeFace ,并且设置 u 方向和 v 方向上的起始参数和结束参数。
构造圆柱的类
定义 MakeCylinder3.hpp:14
完整的几何曲线和曲面
曲线
直线
AMCAX::MakeGeom2Line 用于创建二维几何直线, AMCAX::MakeGeom3Line 用于创建三维几何直线。
std::shared_ptr< AMCAX::Geom2Line > geomline2d = geom2line.Value();
std::shared_ptr< AMCAX::Geom3Line > geomline3d = geom3line.Value();
构造二维几何直线的类
定义 MakeGeom2Line.hpp:13
构造三维几何直线的类
定义 MakeGeom3Line.hpp:15
圆
AMCAX::MakeGeom2Circle 用于创建二维几何圆, AMCAX::MakeGeom3Circle 用于创建三维几何圆。
std::shared_ptr< AMCAX::Geom2Circle > geomcircle2d = geom2circle.Value();
std::shared_ptr< AMCAX::Geom3Circle > geomcircle3d = geom3circle.Value();
构造二维几何圆的类
定义 MakeGeom2Circle.hpp:13
构造三维几何圆的类
定义 MakeGeom3Circle.hpp:13
椭圆
AMCAX::MakeGeom2Ellipse 用于创建二维几何椭圆, AMCAX::MakeGeom3Ellipse 用于创建三维几何椭圆。
std::shared_ptr< AMCAX::Geom2Ellipse >geomellipse2d = geom2ellipse.Value();
std::shared_ptr< AMCAX::Geom3Ellipse >geomellipse3d = geom3ellipse.Value();
构造二维几何椭圆的类
定义 MakeGeom2Ellipse.hpp:13
构造三维几何椭圆的类
定义 MakeGeom3Ellipse.hpp:13
双曲线
AMCAX::MakeGeom2Hyperbola 用于创建二维几何双曲线, AMCAX::MakeGeom3Hyperbola 用于创建三维几何双曲线。
std::shared_ptr< AMCAX::Geom2Hyperbola > geomhyperbola2d = geom2hyperbola.Value();
std::shared_ptr< AMCAX::Geom3Hyperbola > geomhyperbola3d = geom3hyperbola.Value();
构造二维几何双曲线的类
定义 MakeGeom2Hyperbola.hpp:13
构造三维几何双曲线的类
定义 MakeGeom3Hyperbola.hpp:13
抛物线
AMCAX::MakeGeom2Parabola 用于创建二维几何抛物线, AMCAX::MakeGeom3Parabola 用于创建三维几何抛物线。
std::shared_ptr< AMCAX::Geom2Parabola > geomparabola2d = geom2parabola.Value();
std::shared_ptr< AMCAX::Geom3Parabola > geomparabola3d = geom3parabola.Value();
构造二维几何抛物线的类
定义 MakeGeom2Parabola.hpp:13
构造三维几何抛物线的类
定义 MakeGeom3Parabola.hpp:13
曲面
平面
AMCAX::MakeGeom3Plane 用于创建几何平面。
std::shared_ptr< AMCAX::Geom3Plane > geomplane = geom3plane.Value();
构造三维几何平面的类
定义 MakeGeom3Plane.hpp:13
static constexpr double Confusion() noexcept
获取混淆容差
定义 Precision.hpp:122
圆锥面
AMCAX::MakeGeom3ConicalSurface 用于创建几何圆锥面。
std::shared_ptr< AMCAX::Geom3ConicalSurface > geomconicalsurface = geom3conicalsurface.Value();
构造几何圆锥曲面的类
定义 MakeGeom3ConicalSurface.hpp:13
圆柱面
AMCAX::MakeGeom3CylindricalSurface 用于创建几何圆柱面。
std::shared_ptr< AMCAX::Geom3CylindricalSurface > geomcylindricalsurface = geom3cylindersurface.Value();
构造几何圆柱曲面的类
定义 MakeGeom3CylindricalSurface.hpp:14
参数域修剪过的曲线和曲面
曲线
线段
AMCAX::MakeSegment2d 用于创建二维线段, AMCAX::MakeSegment 用于创建三维线段。
std::shared_ptr< AMCAX::Geom2TrimmedCurve > segment2d = makesegment2d.Value();
std::shared_ptr< AMCAX::Geom3TrimmedCurve > segment3d = makesegment.Value();
构造二维线段的类
定义 MakeSegment2d.hpp:17
构造三维线段的类
定义 MakeSegment.hpp:17
圆弧
AMCAX::MakeArcOfCircle2d 用于创建二维圆弧, AMCAX::MakeArcOfCircle 用于创建三维圆弧。
std::shared_ptr< AMCAX::Geom2TrimmedCurve >arcofcircle2d = makearcofcircle2d.Value();
std::shared_ptr< AMCAX::Geom3TrimmedCurve >arcofcircle3d = makearcofcircle.Value();
构造二维圆弧的类
定义 MakeArcOfCircle2d.hpp:17
构造三维圆弧的类
定义 MakeArcOfCircle.hpp:17
椭圆弧
AMCAX::MakeArcOfEllipse2d 用于创建二维椭圆弧, AMCAX::MakeArcOfEllipse 用于创建三维椭圆弧。
std::shared_ptr< AMCAX::Geom2TrimmedCurve > arcofellipse2d = makearcofellipse2d.Value();
std::shared_ptr< AMCAX::Geom3TrimmedCurve > arcofellipse3d = makearcofellipse.Value();
构造二维椭圆弧的类
定义 MakeArcOfEllipse2d.hpp:17
构造三维椭圆弧的类
定义 MakeArcOfEllipse.hpp:17
双曲线弧
AMCAX::MakeArcOfHyperbola2d 用于创建二维双曲线弧, AMCAX::MakeArcOfHyperbola 用于创建三维双曲线弧。
std::shared_ptr< AMCAX::Geom2TrimmedCurve > arcofhyperbola2d = makearcofhyperbola2d.Value();
std::shared_ptr< AMCAX::Geom3TrimmedCurve > arcofhyperbola3d = makearcofhyperbola.Value();
构造二维双曲线弧的类
定义 MakeArcOfHyperbola2d.hpp:17
构造三维双曲线弧的类
定义 MakeArcOfHyperbola.hpp:17
抛物线弧
AMCAX::MakeArcOfParabola2d 用于创建二维抛物线弧, AMCAX::MakeArcOfParabola 用于创建三维抛物线弧。
std::shared_ptr< AMCAX::Geom2TrimmedCurve > arcofparabola2d = makearcofparabola2d.Value();
std::shared_ptr< AMCAX::Geom3TrimmedCurve > arcofparabola3d = makearcofparabola.Value();
构造二维抛物线弧的类
定义 MakeArcOfParabola2d.hpp:17
构造三维抛物线弧的类
定义 MakeArcOfParabola.hpp:17
曲面
修剪圆锥面
AMCAX::MakeTrimmedCone 用于创建修剪圆锥面。
std::shared_ptr< AMCAX::Geom3TrimmedSurface > trimmedcone = maketrimmedcone.Value();
构造修剪圆锥的类
定义 MakeTrimmedCone.hpp:17
修剪圆柱面
AMCAX::MakeTrimmedCylinder 用于创建修剪圆柱面。
std::shared_ptr< AMCAX::Geom3TrimmedSurface > trimmedcylinder = maketrimmedcylinder.Value();
构造修剪圆柱的类
定义 MakeTrimmedCylinder.hpp:17
曲线和曲面的求值
曲线和曲面的求值可以通过 Value() 或 D0() 来实现。
std::shared_ptr< AMCAX::Geom3TrimmedSurface > trimmedcylinder = maketrimmedcylinder.Value();
double u = 2., v = 0.9;
trimmedcylinder->
D0(u, v, P);
std::cout << "P:" << P << std::endl;
std::cout << trimmedcylinder->
Value(u, v) << std::endl;
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 = {
};
std::vector<double> parameters = { 0.0, 0.25, 0.5, 0.75, 1.0 };
bool periodic = false;
interpolate.Perform();
if (interpolate.IsDone())
{
std::shared_ptr<AMCAX::Geom2BSplineCurve> curve2d = interpolate.Curve();
}
else
std::cout << "error:interpolate failed" << std::endl;
根据二维点计算出一条插值曲线的类
定义 GeomAPIInterpolate2.hpp:18
另外还可以通过 AMCAX::GeomAPIInterpolate2::Load 实现在插值过程中添加切向量约束条件,从而控制生成曲线的形状。可以添加所有点的切向量作为约束条件,也可以仅添加起始点和结束点的切向量作为约束条件。 以上述例子为例:
添加所有点的切向量作为约束条件:
std::vector<AMCAX::Vector2> tangents1 = {
};
std::vector<bool> tangentFlags1 = { true, true, true, true, true };
interpolate.Load(tangents1, tangentFlags1, true);
VectorT< double, 2 > Vector2
二维向量
定义 VectorT.hpp:704
添加起始点和结束点的切向量作为约束条件:
interpolate.Load(firstTangent, lastTangent, true);
三维插值曲线
AMCAX::GeomAPIInterpolate3 用于计算三维插值曲线。
std::vector<AMCAX::Point3> points2 = {
};
std::vector<double> parameters2 = { 0.0, 0.25, 0.5, 0.75, 1.0 };
bool periodic2 = false;
interpolate2.Perform();
if (interpolate2.IsDone()) {
std::shared_ptr<AMCAX::Geom3BSplineCurve> curve3d = interpolate2.Curve();
}
else {
std::cout << "error: interpolate failed" << std::endl;
}
根据三维点计算出一条插值曲线的类
定义 GeomAPIInterpolate3.hpp:18
另外还可以通过 AMCAX::GeomAPIInterpolate3::Load 实现在插值过程中添加切向量约束条件,从而控制生成曲线的形状。可以添加所有点的切向量作为约束条件,也可以仅添加起始点和结束点的切向量作为约束条件。 以上述例子为例:
添加所有点的切向量作为约束条件:
std::vector<AMCAX::Vector3> tangents2 = {
};
std::vector<bool> tangentFlags2 = { true, true, true, true, true };
interpolate2.Load(tangents2, tangentFlags2, true);
VectorT< double, 3 > Vector3
三维向量
定义 VectorT.hpp:707
添加起始点和结束点的切向量作为约束条件:
interpolate2.Load(firstTangent3, lastTangent3, true);
拟合曲线
二维拟合曲线
AMCAX::GeomAPIPointsToBSpline2 用于计算二维拟合曲线。
std::vector<AMCAX::Point2> points3 = {
};
std::vector<double> parameters3 = { 0.0, 0.25, 0.5, 0.75, 1.0 };
int degMin1 = 3;
int degMax1 = 8;
double tol1 = 1e-3;
if (bsplineFitter1.IsDone()) {
std::shared_ptr<AMCAX::Geom2BSplineCurve> BSplineCurve2d = bsplineFitter1.Curve();
}
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;
if (bsplineFitter2.IsDone()) {
std::shared_ptr<AMCAX::Geom2BSplineCurve> BSplineCurve2d_2 = bsplineFitter2.Curve();
}
else {
std::cout << "error: Bspline curve fitting failed" << std::endl;
}
三维拟合曲线
AMCAX::GeomAPIPointsToBSpline3 用于计算三维拟合曲线。
std::vector<AMCAX::Point3> points5 = {
};
std::vector<double> parameters4 = { 0.0, 0.25, 0.5, 0.75, 1.0 };
int degMin2 = 3;
int degMax2 = 8;
double tol2 = 1e-3;
if (bsplineFitter2.IsDone()) {
std::shared_ptr<AMCAX::Geom3BSplineCurve> BSplineCurve3d = bsplineFitter3.Curve();
}
else {
std::cout << "error: Bspline curve fitting failed" << std::endl;
}
根据三维点拟合一条 B 样条曲线的类
定义 GeomAPIPointsToBSpline3.hpp:19
拟合曲面
AMCAX::GeomAPIPointsToBSplineSurface 用于计算拟合曲面。
if (bsplineSurfaceFitter.IsDone()) {
std::shared_ptr<AMCAX::Geom3BSplineSurface> bsplinesurface = bsplineSurfaceFitter.Surface();
}
else {
std::cout << "error: Bspline surface fitting failed" << std::endl;
}
根据点拟合一个 B 样条曲面的类
定义 GeomAPIPointsToBSplineSurface.hpp:19
另外还可以根据起始点的 x 坐标和 y 坐标、x 坐标和 y 坐标的恒定增加值,以及 z 坐标的点集拟合一个 B 样条曲面。
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;
if (bsplineSurfaceFitter2.IsDone()) {
std::shared_ptr<AMCAX::Geom3BSplineSurface> bsplinesurface2 = bsplineSurfaceFitter2.Surface();
}
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() 来获取。
std::vector<AMCAX::Point2> pts1 = {
};
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);
auto circle = std::make_shared<AMCAX::Geom2Circle>(frame, 1.0);
std::cout << cc.NPoints() << std::endl;
std::cout << cc.Point(0) << std::endl;
std::cout << cc.Point(1) << std::endl;
std::cout << cc.ParamOnCurve1(0) << std::endl;
std::cout << cc.ParamOnCurve1(1) << std::endl;
std::cout << cc.ParamOnCurve2(0) << std::endl;
std::cout << cc.ParamOnCurve2(1) << std::endl;
auto trimline1 = std::make_shared<AMCAX::Geom2TrimmedCurve>(line1, 0.0, 3.0);
auto trimline2 = std::make_shared<AMCAX::Geom2TrimmedCurve>(line2, 2.0, 4.0);
std::cout << cc2.NSegments() << std::endl;
std::pair< double, double > paramOnCurve1;
std::pair< double, double > paramOnCurve2;
cc2.Segment(0, paramOnCurve1, paramOnCurve2);
std::cout << paramOnCurve1.first << std::endl;
std::cout << paramOnCurve1.second << std::endl;
std::cout << paramOnCurve2.first << std::endl;
std::cout << paramOnCurve2.second << std::endl;
计算两条二维曲线交点的类
定义 GeomAPIIntCurveCurve2.hpp:17
此外 AMCAX::GeomAPIIntCurveCurve2 还可用于判断二维曲线是否自交,计算二维曲线自交点的数目。
std::vector<AMCAX::Point2> pts2 = {
};
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;
曲线曲面相交
AMCAX::GeomAPIIntCurveSurface 用于计算曲线和曲面相交的结果,结果可能是交点或者线段。
如果相交结果为交点,则可以通过 AMCAX::GeomAPIIntCurveSurface::NPoints() 获取交点的数目,通过 AMCAX::GeomAPIIntCurveSurface::Point() 获取交点坐标,另外还可以通过 AMCAX::GeomAPIIntCurveSurface::Parameters() 获取曲线和曲面上交点的参数。
如果相交结果为线段,则可以通过 AMCAX::GeomAPIIntCurveSurface::NSegments() 获取线段的数目,若想获取某个线段,可以通过 AMCAX::GeomAPIIntCurveSurface::Segment() 来获取。
std::vector<AMCAX::Point3> pts3 = {
};
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);
cs.Perform(bezier, TrimmedSurface);
std::cout << cs.IsDone() << std::endl;
std::cout << cs.NPoints() << std::endl;
double u = 0., v = 0., w = 0.;
cs.Parameters(0, u, v, w);
std::cout << "u:" << u << std::endl;
std::cout << "v:" << v << std::endl;
std::cout << "w:" << w << std::endl;
std::cout << "point:" << cs.Point(0) << std::endl;
计算曲线与曲面相交的类
定义 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.);
std::cout << ss.IsDone() << std::endl;
std::cout << ss.NLines() << std::endl;
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 = {
};
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) {
}
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())
{
double dist = ex.LowerDistance();
}
else
{
if (ex.NExtrema() > 0)
{
ex.NearestPoints(p1, p2);
double param1, param2;
ex.LowerDistanceParameters(param1, param2);
double nearestdist = ex.LowerDistance();
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 << "nearestdist:" << nearestdist << std::endl;
}
for (int i = 0; i < ex.NExtrema(); i++)
{
ex.Points(i, p1, p2);
double param1, param2;
ex.Parameters(i, param1, param2);
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
三维曲线之间的极值
建设中。
曲线和曲面之间的极值
建设中。