2012-06-21 4 views
1

Почему этот код не рисует параболой? Это так просто, как может быть - для каждого x вычислять y, используя заданную функцию. Если y = x^2, я должен свернуть лицевую параболу с вершиной в верхнем левом углу, но она только рисует некоторые смещенные точки.Почему этот код не будет рисовать параболой?

private void DrawParabole(Graphics g) 
    { 
     for (int x = 0; x < pictureBox1.Width; x++) 
     { 
      g.DrawRectangle(
       Pens.Black, 
       x, 
       FY(x), 
       1, 
       1 
      ); 
     } 
    } 

    private int FY(int x) 
    { 
     int y = A*x^2 + B*x + C; 
     return y; 
    } 
+0

Каковы значения 'A',' B' и 'C', когда вы вызываете' FY (x) '? – 3aw5TZetdf

+0

Не обращайте внимания на этот комментарий. – 3aw5TZetdf

+0

Для простоты предположим, что A = 1, B = 0, C = 0 –

ответ

4

Причина вы получаете неправильные значения/разбросанные точки, потому что вы используете оператор XOR или ^ вместо Math.Pow().

Для того, чтобы вычислить, позволяет сказать, A*x^2 вы должны использовать Math.Pow() и не ^:

int y = A*(Math.Pow(x, 2)) + B*x + C; 
return y; 

Это должно решить для вас, если это не то использовать это:

int y = A*(Math.Pow((double)x, 2D)) + B*x + C; 
return y; 

Надеюсь, это поможет!

+0

Спасибо, это именно то, что мне нужно. –

+0

Рад, что я мог помочь! – 3aw5TZetdf

2

Если ваш код C#,^- побитовый XOR. Вместо этого используйте Math.Pow().

0

Используйте скорректированную математика MatthewRz:

private int FY(int x) 
    { 
     int y = (int)(A * (Math.Pow(x, 2)) + B * x + C); 
     return y; 
    } 

Вы до сих пор видеть только точки, хотя (так как Y изменение более чем X для каждого шага), используйте следующую петлю, чтобы получить линии между точками:

private void DrawParabole(Graphics g, int w) 
    { 
     for (int x = 0; x < w; x++) 
     { 
      g.DrawLine(
       Pens.Black, 
       x, 
       FY(x-1), 
       x, 
       FY(x)); 
     } 
    } 
Смежные вопросы