Wątek przeniesiony 2015-02-06 01:00 z Algorytmy i struktury danych przez furious programming.

Jaki algortym do pełnej funkcji kwadratowej

0

Jak to przerobić, żeby rysowało mi obydwie krzywe tej funkcji kwadratowej? Bo teraz rysuje mi tylko tę prawą;

 
Graphics Rysownica;
Pen pioro = new Pen(Color.Red,3);
//to po prostu pióra
PointF[] tablica_xow = new PointF[20];
//tablica z xsami
        int i;
        float a, b, c;
        float kwadrat;
for (i = 0; i < tablica_xow.Length; i++)
            {
                
                tablica_xow[i].X = i;
              
                if (float.TryParse(A.Text,out a) && float.TryParse(B.Text,out b) && float.TryParse(C.Text,out c))
                {
                    kwadrat = (float)Math.Pow(tablica_xow[i].X, 2);
                    tablica_xow[i].Y =150 +  (-a) * kwadrat + b * tablica_xow[i].X + c;
                   
                }
            }
            Rysowanie.DrawLines(pioro,tablica_xow);

0

Popraw swój kod by mieć takie funkcje/metody:

delegate double Funkcja(double x);
public void rysujFunkcje(Funkcja f, double odX, double doX, double krokX) // sam napisz
public void rysujFunKwadratowa(double odX, double doX, double krokX) {
    float a, b, c;
    if (float.TryParse(A.Text,out a) && float.TryParse(B.Text,out b) && float.TryParse(C.Text,out c)) {
         rysujFunkcje( (x)=>a*x*x+*b*x+c, odX, doX, krokX);
    }     
}
0

Właśnie nie bardzo wiem jak stworzyć w jednej tablicy wartości od np -20 do 20. Musiałbym jej jakoś zainicjować, ale to było nieefektywne i bez sensu.

1

Jeżeli chcesz mieć wartości minusowe to musisz po prostu przesunąć tablicę. Np.

 
            tablica_xow[i].X = i-10;
0
krzysiek050 napisał(a):

Jeżeli chcesz mieć wartości minusowe to musisz po prostu przesunąć tablicę. Np.

 
            tablica_xow[i].X = i-10;

Zrobiłem tak, ale bez zmian:

for (i =0; i < tablica_xow.Length; i++)
            {
                
                **tablica_xow[i].X = i-20;**
              
                if (float.TryParse(A.Text,out a) && float.TryParse(B.Text,out b) && float.TryParse(C.Text,out c))
                {
                    kwadrat = (float)Math.Pow(tablica_xow[i].X, 2);
                    tablica_xow[i].Y =150 +  (-a) * kwadrat + b * tablica_xow[i].X + c;
                    //tablica_xow[i].Y = a * Math.Pow(tablica_xow[i].X, 2) + b * tablica_xow[i].X + c;
                }
            }
 
0

Na pewno bez zmian? A nie rysuje przypadkiem drugiej połowy?

0
krzysiek050 napisał(a):

Na pewno bez zmian? A nie rysuje przypadkiem drugiej połowy?

No właśnie nie. Cały czas jest ta prawa połowa.

0

Ale zakres x'ów się zmienił z 0:19 na -20:-1 więc wartości muszą być inne. Na pewno przebudowałeś program?

0
krzysiek050 napisał(a):

Ale zakres x'ów się zmienił z 0:19 na -20:-1 więc wartości muszą być inne. Na pewno przebudowałeś program?

Przebudowałem tak jak widać wyżej, ale teraz też sam eksperymentuję. Zobaczymy...

1

Rozwijając to co napisałem wcześniej:

public void rysujFunkcje(Funkcja f, double odX, double doX, double krokX) {
    Graphics poleRysowania; // tu czegoś brakuje - skopiowałem co napisałeś i poprawiłem
    Pen pioro = new Pen(Color.Red,3);
    int n = (doX-odX)/krokX;
    PointF[] punkty = new PointF[n];
    for (i = 0; i < n; i++) {
          punkty[i].x = odX+i*krokX;
          punkty[i].y = f(punkty[i].x);
    }
    poleRysowania.DrawLines(pioro,tablica_xow);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1