在c#中过滤Arc值

问题描述 投票:0回答:1

我在过滤 Arc 值时遇到问题。

当我绘制位图(dxf 文件转换为 bmp)时,无论我使用什么文件,总会有具有相同值的额外弧。 The extra arc

图书馆:netDxf

 else if (entity is Arc arc)
 {
     
     double sweepAngle = arc.EndAngle - arc.StartAngle;
     arc.EndAngle = sweepAngle;
                 
     
     entityInfo = $"Processing Arc: Start Angle=({arc.StartAngle}), End Angle=({arc.EndAngle}), Radius={arc.Radius}, Sweep Angle =({sweepAngle})";

     graphics.DrawArc(Pens.Black, (float)(arc.Center.X - arc.Radius), (float)(arc.Center.Y - arc.Radius),

     (float)(2 * arc.Radius), (float)(2 * arc.Radius), (float)arc.StartAngle, (float)arc.EndAngle); 
 
                         
 }

之后我将删除entityInfo,我用它只是为了获取额外弧的arc.StartAngle值..

我已经尝试过这个

if (arc.StartAngle == 270.565033310363) return ;
,希望它能进入if,但没有。

c# filter dxf
1个回答
0
投票

浮点数和等式不太适合,至少不是你期望的那样。这里的要点是,并不是每个十进制数(例如 270.565033310363)都可以准确地表示为浮点数。您几乎总会得到该数字的近似值,例如 270.565033310364。

因此,为了比较浮点数(例如类型为

double
的数字),您需要处理一个非常小的范围,在该范围内您认为两个数字相等,通常称为epsilon

所以你可以用这个代替:

var epsilon = 0.000001;
if (Math.Abs(arc.StartAngle - 270.565033310363) < epsilon)
    return;
© www.soinside.com 2019 - 2024. All rights reserved.