Почему я получаю исключение System.OverflowException? - PullRequest
0 голосов
/ 23 ноября 2018

Эта программа написана на языке c #.Предполагается отображать 3D-график function Log(x,y).Я не знаю почему, но каждый раз, когда я запускаю его, я получаю System.OverflowException, когда он начинает рисовать график, и программа останавливается.

Как я могу предотвратить это и почему это происходит?

  private void Draw_Function_Click(object sender, EventArgs e)
    {
        int size = 100;
        double accuracy = 0.09;
        int zoom = 1;
        ver = new double[size, size];
        xtag = new double[size, size];
        ytag = new double[size, size];
        function = Insert_Function.Text;
        for (int i = 0; i < 100; i++)
        {
            for (int p = 0; p < 100; p++)
            {
                ver[i, p] = Math.Log(i,p);
                xtag[i, p] = p * accuracy - i * accuracy * Math.Cos(Math.PI / 5);
                ytag[i, p] = ver[i, p] - i * accuracy * Math.Sin(Math.PI / 5);
            }
        }

        Graphics g = panel1.CreateGraphics();
        for (int i = 0; i < ver.GetLength(0) - 1; i++)
            for (int p = 1; p < ver.GetLength(1) - 1; p++)
            {
                int y0 = (panel1.Height / 2) - (int)(ytag[i, p] * zoom);
                int x0 = (int)(zoom * xtag[i, p]) + panel1.Width / 2;
                int y1 = (panel1.Height / 2) - (int)(ytag[i + 1, p + 1] * zoom);
                int x1 = (int)(zoom * xtag[i + 1, p + 1]) + panel1.Width / 2;  
                g.DrawLine(Pens.Black,
                                 (float)x0,
                                 (float)y0,
                                 (float)x1,
                                 (float)y1);
            }
    }

1 Ответ

0 голосов
/ 23 ноября 2018

Я нашел следующий ответ: https://social.msdn.microsoft.com/Forums/windows/en-US/9f2b5bba-f725-45c1-9ada-383151267c13/overflow-exception-on-drawline-method-?forum=winforms

Цитата: "Привет, минимальное значение, разрешенное для экранной координаты, равно x = -1073741376 и y = -1073740288, это граница, гдеПоверхность рабочего стола лежит, если вы идете дальше, вы входите в пустоту, поэтому вызываете переполнение ... "

Я провел ваш расчет, и кроме того факта, что он выдает значения NaN и -Infinity, он такжепроизводится очень маленькие значения, такие как -2147483503.Это причина, по которой вы получаете исключение переполнения.

...