我在过滤 Arc 值时遇到问题。
当我绘制位图(dxf 文件转换为 bmp)时,无论我使用什么文件,总会有具有相同值的额外弧。
图书馆: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,但没有。
浮点数和等式不太适合,至少不是你期望的那样。这里的要点是,并不是每个十进制数(例如 270.565033310363)都可以准确地表示为浮点数。您几乎总会得到该数字的近似值,例如 270.565033310364。
因此,为了比较浮点数(例如类型为
double
的数字),您需要处理一个非常小的范围,在该范围内您认为两个数字相等,通常称为epsilon。
所以你可以用这个代替:
var epsilon = 0.000001;
if (Math.Abs(arc.StartAngle - 270.565033310363) < epsilon)
return;