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

Jaki algortym do pełnej funkcji kwadratowej

2015-02-05 14:15
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);

Pozostało 580 znaków

2015-02-05 14:33
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);
    }     
}

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22, 2015-02-05 14:35

Pozostało 580 znaków

2015-02-05 14:45
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.

Pozostało 580 znaków

2015-02-05 14:56
1

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


            tablica_xow[i].X = i-10;

Pozostało 580 znaków

2015-02-05 15:08
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:
```csharp
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;
                }
            }

Pozostało 580 znaków

2015-02-05 15:11
0

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

Pozostało 580 znaków

2015-02-05 15:18
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.

Pozostało 580 znaków

2015-02-05 15:27
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?

Pozostało 580 znaków

2015-02-05 15:29
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...

Pozostało 580 znaków

2015-02-05 16:14

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);
}

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22, 2015-02-05 16:14

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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