Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Układ równań wykres
Forum PHP.pl > Forum > PHP
kamil1114
Chciałbym narysować w php wykres rozwiązania układu równań.

Na przykład żeby wyglądał tak jak na tej stronie: http://r065.prv.pl/ , czyli dwie osie x i y i prosta. Proszę o pomoc.

Tu mam kod , który tylko rozwiązuje układ równań , jak by ktoś mógł rzucić okiem , czy wszystko jest w nim ok:

  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <form method="get">
  6. Podaj a:<br/>
  7. <input type="text" name="a"><br/>
  8. Podaj b:<br/>
  9. <input type="text" name="b"><br/>
  10. Podaj c:<br/>
  11. <input type="text" name="c"><br/>
  12. Podaj d:<br/>
  13. <input type="text" name="d"><br/>
  14. Podaj e:<br/>
  15. <input type="text" name="e"><br/>
  16. Podaj f:<br/>
  17. <input type="text" name="f"><br/>
  18. <input type="submit" value="Oblicz">
  19. </form>
  20.  
  21. <?php
  22. $a=$_GET['a'];
  23. $b=$_GET['b'];
  24. $c=$_GET['c'];
  25. $d=$_GET['d'];
  26. $e=$_GET['e'];
  27. $f=$_GET['f'];
  28.  
  29.  
  30.  
  31. if(isset($a) && $a != 0 && isset($b) && $b != 0 && isset($c) && $c != 0 && isset($d) && $d !=0 && isset($e) && $e !=0 && isset($f) && $f !=0){
  32.  
  33.  
  34. if($a != $d && $b != $e && $c != $f){
  35.  
  36.  
  37.  
  38.  
  39. $x = ($e * $c - $f * $b) / ($d * $b - $e * $a);
  40. $y = ($f * $a - $d * $c) / ($d * $b - $e * $a);
  41.  
  42.  
  43.  
  44. echo "x= $x<br/>";
  45. echo "y= $y";
  46.  
  47. }
  48.  
  49. else echo ("Proste pokrywaja się");
  50.  
  51. }
  52.  
  53. else echo ("Wprowadz dane");
  54.  
  55.  
  56.  
  57. ?>
  58.  
  59. </body>
  60. </html>


EDIT:

Zrobiłem już coś takiego:

  1. <?
  2.  
  3. $obrazek=ImageCreate(500,500);
  4. $czerwony=ImageColorAllocate($obrazek,255 ,255 ,255);
  5. $czarny=ImageColorAllocate($obrazek,0 ,0 ,0);
  6. ImageFill($obrazek,1,1,$czerwony);
  7.  
  8. ImageLine($obrazek,250,0,250,500,$czarny);
  9. ImageLine($obrazek,500,250,0,250,$czarny);
  10.  
  11. $j=-5;
  12. $l=5;
  13.  
  14. //-----------------------------------
  15. $a=30;
  16. $b=45;
  17. $c=65;
  18. $d=45663;
  19. $e=434;
  20. $f=34;
  21. //-----------------------------------
  22.  
  23. $p1=(-1*($a*$j)-1*$c)/$b;
  24. $p3=(-1*($a*$l)-1*$c)/$b;
  25.  
  26. $p4=250+($p1*50);
  27. $p5=250+($p3*50);
  28.  
  29. $p6=(-1*($d*$j)-1*$f)/$e;
  30. $p7=(-1*($d*$l)-1*$f)/$e;
  31.  
  32. $p8=250+($p6*50);
  33. $p9=250+($p7*50);
  34.  
  35.  
  36. ImageLine($obrazek,$p4,$p4,$p5,$p5,$czarny);
  37. ImageLine($obrazek,$p8,$p8,$p9,$p9,$czarny);
  38.  
  39.  
  40. Header("Content-type: image/jpeg");
  41. ImageJPEG($obrazek);
  42.  
  43. ?>


Rysować rysuje , tylko nie tak jak trzeba , proszę pomóżcie co robię źle , wykres po prostu wychodzi zły.

nospor
Cytat
, wykres po prostu wychodzi zły.
Zagladam w szklaną kulę i widzę...widzę... no faktycznie wychodzi zły. Teraz ty zajrzyj do swojej szklanej kuli i odczytaj jakie siedzi rozwiązanie w mojej głowie smile.gif
kamil1114
Heh , zły w tym sensie , że po prostu z matematycznego punktu widzenia jest nie poprawny , linie się rysują , ale w złym miejscu na wykresie. Nie dodałem jeszcze skali , bo nie wiem jak to zrobić , domyślam się że najlepiej pętlą for , ale nie umiem.
nospor
sądziłem ze jednak lepiej zrozumiesz moją jakze zabawną (och, nie trzeba klaskac winksmiley.jpg ) aluzję...
No nic, napiszę ci więc dosłownie:
Podaj jak wygląda wykres prawidlowy (link do strony nie dziala) - pokaż nam obrazek
Podaj jak wyglada zly wykres - zrob obrazek

Oba obrazki umiesc w odpowiednim serwisie i daj linka do nich.
kamil1114
Wybacz , jakoś nie skojarzyłem smile.gif

Tak powinno to wyglądać: http://img204.imageshack.us/i/image011c.gif/
a wygląda tak: http://img51.imageshack.us/i/wykresphp.jpg/

nie wiem czemu wyszła jedna długa linia , powinny być dwie i mniej więcej w takim ułożeniu jak na zdjęciu pierwszym
nospor
No, to skoro już opanowales sztukę czytania aluzji (winksmiley.jpg) przejdziemy teraz do sztuki szukania bledu:
a sprawdzales czy Twoje wyliczenia są słuszne? Jesli nie są, to już wiesz czemu wykres wychodzi zły. Jesli zas są słuszne, to juz wiemy ze wina lezy po stronie rysowania smile.gif
kamil1114
Tak , wyliczenia się zgadzają. Błąd jest gdzieś w rysowaniu


Błąd jest gdzieś tutaj , tylko nie mogę go znaleźć:

  1. $p4=250+($p1*50);
  2. $p5=250+($p3*50);
  3. $p6=(-1*($d*$j)-1*$f)/$e;
  4. $p7=(-1*($d*$l)-1*$f)/$e;
  5. $p8=250+($p6*50);
  6. $p9=250+($p7*50);
  7.  
  8. ImageLine($obrazek,$p4,$p4,$p5,$p5,$czarny);
  9.  
  10. ImageLine($obrazek,$p8,$p8,$p9,$p9,$czarny);
nospor
ImageLine($obrazek,$p4,$p4,$p5,$p5,$czarny);
czy napewno za x1 i y1 ma byc ta sama wartosc $p4 a za x2 i y2 ma byc ta sama wartosc $p5 ? Ja tam zawsze sądziłem ze x i y to wspolrzedne w miare nie zalezne i nie zawsze muszą wynosic dokladnie tyle samo.
kamil1114
Masz rację , tu jest błąd , tylko co za to mogę wpisać ? Mam pustkę w głowie. Proszę o pomoc
nospor
No przeciez rozwiązałes to równanie wiec to ty powinienes wiedziec co w nim jest X a co w nim jest Y.
kamil1114
Niby tak , ale ten program ma rozwiązywać każde równanie i rysować wykres dla każdego równania.

Udało mi się już zrobić coś takiego:

  1. <?
  2.  
  3. $obrazek=ImageCreate(500,500);
  4. $czerwony=ImageColorAllocate($obrazek,255 ,255 ,255);
  5. $czarny=ImageColorAllocate($obrazek,0 ,0 ,0);
  6. ImageFill($obrazek,1,1,$czerwony);
  7.  
  8. ImageLine($obrazek,250,0,250,500,$czarny);
  9. ImageLine($obrazek,500,250,0,250,$czarny);
  10.  
  11. $j=-10;
  12. $l=10;
  13.  
  14. //-----------------------------------
  15. $a=1;
  16. $b=1;
  17. $c=3;
  18. $d=0.5;
  19. $e=1;
  20. $f=1;
  21. //-----------------------------------
  22.  
  23. $p1=(-1*($a*$j)-1*$c)/$b;
  24. $p3=(-1*($a*$l)-1*$c)/$b;
  25.  
  26. $p4=250+($p1*50);
  27. $p5=250+($p3*50);
  28.  
  29. $p6=(-1*($d*$j)-1*$f)/$e;
  30. $p7=(-1*($d*$l)-1*$f)/$e;
  31.  
  32. $p8=250+($p6*50);
  33. $p9=250+($p7*50);
  34.  
  35.  
  36. ImageLine($obrazek,250+$j,$p4,250+$l,$p5,$czarny);
  37. ImageLine($obrazek,$p8,250+$j,$p9,250+$l,$czarny);
  38.  
  39.  
  40. Header("Content-type: image/jpeg");
  41. ImageJPEG($obrazek);
  42.  
  43. ?>


Zmieniłem trochę kod , linie już się nie pokrywają , ale nadal nie są prawidłowo ułożone.
Teraz to wygląda tak: http://img532.imageshack.us/i/wykresphp.jpg/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.