SpaceClaim二次开发(6)

目录

第八章 Accuracy(准确性)

        8.1 线性和角度分辨率

        8.2 比较长度和角度

        8.3  比较XYZ对象

        8.4 比较UV对象

        8.5 比较几何体


本篇介绍SpaceClaim二次开发文档的第八章。(使用的翻译,如有错误,敬请指正)。

第八章 Accuracy(精确性)

        8.1 线性和角度分辨率

        在内部,执行几何计算以加工双精度。比较计算结果时,应始终在特定分辨率范围内比较数值。这些分辨率由准确度等级提供:

        如果两个长度之差小于LinearResolution,则认为它们相等。

        如果两个角度之差小于AngularResolution,则认为它们相等。

        例如,当调用ContainsPoint以确定点是否位于曲面中时,可能会在内部计算到曲面的距离,如果此距离小于LinearResolution,则结果为true。

        8.2 比较长度和角度

        Accuracy类提供比较长度和角度的方法。CompareLn方法接受两个参数lengthA和lengthB,并返回一个整数结果:

       -1  长度A小于长度B。

        0  lengthA等于lengthB,在线性分辨率内。

        +1 长度A大于长度B。

        此方法提供两个长度的一般比较,但对于常见情况,例如与零比较,或测试两个值是否相等,可以使用更简单,更可读的方法:

public static void Example(double lengthA, double lengthB) {

// same as CompareLengths(lengthA, lengthB) == 0
bool equalLengths = Accuracy.EqualLengths(lengthA, lengthB);

// same as CompareLengths(lengthA, 0) == 0
bool lengthIsZero = Accuracy.LengthIsZero(lengthA);

// same as CompareLengths(lengthA, 0) > 0
bool lengthIsPositive = Accuracy.LengthIsPositive(lengthA);

// same as CompareLengths(lengthA, 0) < 0
bool lengthIsNegative = Accuracy.LengthIsNegative(lengthA);
}

        为角度提供了相应的方法:CompareAngles、CompreAngles、AngleIsZero、AngleIsPositive和AngleIsNegative。

        8.3  比较XYZ对象

        基本的XYZ类型(Point、Vector、Direction、Box和Frame)都内置了分辨率测试,因此可以使用==运算符比较对象。例如,如果两个点之间的距离小于线性分辨率,则两个点相等;如果两个点之间的角度小于角分辨率,则两个方向相等。

public static void Example(Plane plane, Point point) {

// project point onto plane 将点投影到平面上
SurfaceEvaluation eval = plane.ProjectPoint(point);
Point pointOnPlane = eval.Point;

// points are the same if less than linear resolution apart 如果间隔小于线性分辨率,则点相同
bool planeContainsPoint = point == pointOnPlane;

// ContainsPoint is more efficient, but gives the same result
Debug.Assert(planeContainsPoint == plane.ContainsPoint(point));
}
        8.4 比较UV对象

        对于曲面参数UV类型PointUV、VectorUV、DirectionUV和BoxUV或曲线参数类型Interval,情况并非如此。这些类型不知道它们表示的参数化是线性的、角度的还是其他类型。例如,对于平面,U参数化是线性的,但对于圆柱体,U参数化是有角度的。对于NURBS曲面,U参数化既不是线性的,也不是角度的。

        因此,不应该对这些类型使用==运算符。比较参数时,应对每个U和V值使用适当的长度或角度比较方法。对于NURBS参数化,可以使用角度比较,但最安全的方法是计算点并比较这些点。

        8.5 比较几何体

        说两个曲面或两条曲线相等是模棱两可的,因为对这个概念有不止一种解释。例如,对于两个平面:

        它们可以共面,但法线可以相反。

        它们可以是共面的,法线具有相同的意义,但它们的框架以及它们的参数化可能不同。

        他们可能在各个方面都是一样的。

        不应该对曲面和曲线类型使用==运算符,因为这只会测试参照相等性。

        提供了Geometry.IsCoincident和ITrimmedCurve.lsCoincident以进行比较。他们只测试巧合,这意味着上述任何情况都会通过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值