加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在GDI中绘制坐标的难点是什么?

发布时间:2020-12-15 04:00:35 所属栏目:百科 来源:网络整理
导读:我正在渲染一个插值曲线: e.Graphics.DrawLines(new Pen(Color.Red),_interpolationPoints.ToArray()); 有时会抛出一个OverflowException. _interpolationPoints数组的检查显示科学记数法中的一些非常大的值. {X = 0.0 Y = -1.985174E 10} 我怀疑Y = -1.985
我正在渲染一个插值曲线:
e.Graphics.DrawLines(new Pen(Color.Red),_interpolationPoints.ToArray());

有时会抛出一个OverflowException.

_interpolationPoints数组的检查显示科学记数法中的一些非常大的值. {X = 0.0 Y = -1.985174E 10}

我怀疑Y = -1.985174E 10是GDI无法处理的值.很好,但是我可以绘制的最大/最小X和Y值是多少,因此限制数据(并警告用户),而不是在绘制过程中捕获溢出异常.是否记录了限制?

例如,我想做这样的事情:

if (yVal < float.MinValue || yval > float.MaxValue) 
      throw new OverflowException("Interpolation value too large to be rendered.");

在_interpolationPoints数组的群体中,并停止进程. (float mix / max不工作btw,我仍然得到例外)

解决方法

好的,我需要知道,所以我逐渐测试,并提出了这些限制:
positive:    1,073,741,951
negative:   -1,760

我使用的代码看起来像这样:

int lastGoodVal = 0;
for (int i = -1073000000; i > -1073832999; i -= 1)
{
    g.DrawLine(Pens.Blue,new Point(0,0),i));
    lastGoodVal = i;
}

上面的循环是最后的测试,通过早期测试建立的一系列负值,逐步上升1.正如你所看到的,lastGoodVal拥有最后一次成功的绘画迭代,因此我将用作一个常数的真正限制.

我试图将这些数字与.NET原语中的值相关联,但不能.每个限制都接近2 ^ 30的值,但不完全符合.任何其他的见解将不胜感激.

我也只用DrawLine方法测试. API中的其他功能可能存在不同的限制,但我还没有机会探索.

另外,在完成了这个实验之后,然后Googling的值为1073741951,我遇到了this article,这与我的发现相关.我也是found this在某种类型的Mono代码存档,它提到了一个接近但与浮动限制的精确相关性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读