Search code examples
c#quadratic-curve

Drawing the quadratic equation curve in c#


I am very new to c# System Draw so please do help me on my code. i am trying to plot the quadratic equation curve and is using the "for" loop in order to dot 10 coordinates for the curve. i have tested out this code many times and nothing ever appears when i start the code. Also whenever i run the code, i get the message ArgumentException was Unhandled, Parameter is not valid with the code " g.DrawCurve(aPen, Points);" highlighted. please help me on this problem i have spent many days trying to fix.

{
    public Form1()
    {
        InitializeComponent();
    }

    protected override void OnPaint(PaintEventArgs e)
    {

        float a = 10, b = 30, c = 10;
        double x1, x2, delta, cx1, cx2, y1, y2;
        int icx1, iy1, icx2, iy2;
        delta = (b * b) - (4 * a * c);
        x1 = ((b * (-1)) + Math.Sqrt(delta)) / (2 * a);
        x2 = ((b * (-1)) - Math.Sqrt(delta)) / (2 * a);
        for (int i = (-10); i <= 10; i = i + 1)
        {
            cx1 = i * x1;
            cx2 = i * x2;
            y1 = (cx1 * cx1 * a) + (cx1 * b) + c;
            y2 = (cx2 * cx2 * a) + (cx2 * b) + c;
            icx1 = Convert.ToInt32(cx1);
            iy1 = Convert.ToInt32(y1);
            icx2 = Convert.ToInt32(cx2);
            iy2 = Convert.ToInt32(y2);


            Graphics g = e.Graphics;
            Pen aPen = new Pen(Color.Blue, 1);
            Point point1 = new Point(icx1, iy1);
            Point point2 = new Point(icx2, iy2);
            Point[] Points = { point1,point2 };
            g.DrawCurve(aPen, Points);
            aPen.Dispose();
            g.Dispose();


        }

Solution

  • The key problem is that the code disposes the Graphics object. On the second iteration the Graphics object has been disposed and the call to DrawCurve will fail.

    And as mentioned in the comments, the DrawCurve method expects 3 points in the array. See under Remarks on the MSDN Page for DrawCurve

    All other Dispose calls for the Pen should be reduced as much as possible to prevent re-creating so many pens.

    As for the graph: I am not entirely sure what you are trying to do but if you are trying to draw a parabola, you should not solve the quadric equation but instead put the x value in the equation.

    Pseudo code:

    for x = -10 to 10 step 3
    
        if SavePoint == null
    
            x1 = x
            y1 = a * x1 * x1 + b * x1 + c
    
            point1 = TransformToLocalCoordinates(x1, y1)
    
        Else
    
            point1 = SavePoint
    
        End if
    
        x2 = x + 1
        y2 = a * x2 * x2 + b * x2 + c
    
        point2 = TransformToLocalCoordinates(x2, y2)
    
        x3 = x + 2
        y3 = a * x3 * x3 + b * x3 + c
    
        point3 = TransformToLocalCoordinates(x3, y3)
    
        DrawCurve point1, point2, point3
    
        SavePoint = point3
    
    next