PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: построить график по формуле, которая задается в форме
BiDiFo
Отправлено: 16 Августа, 2011 - 14:30:52
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Задача - Построить график некой функции, которую пользователь задает в форме.
Есть форма, в которой пользователь задает длину оси Х и формулу графика (например ($x/10)*($x/10) ). Есть фунция для построения графика
CODE (php):
скопировать код в буфер обмена
  1. ...
  2. function grafiki ($x) { // функция, график которой рисуем
  3.         // $x - значение аргумента функции
  4.         // возвращаемое значение - значение функции от данного аргумента
  5.        
  6.         return ($x/10)*($x/10);
  7. }
  8. ...
  9. for ($x = 0.001; $x < $x0; $x += $ks) {
  10.         if (
  11.                 /* функция, начало */
  12.                         $y = grafiki($x)
  13.                 /* функция, конец */
  14.         ) {
  15.                 if ($x >= 0) $d = 1;
  16.                 else $d = 0;
  17.                 $qx = $x * $m;
  18.                 $y = $y * $m;
  19.                 imageline($img, 50 + $d + $qx, 550 - $y*10, 50 + $d + $qx, 550 - $y*10, $grcolor);
  20.         }
  21. ...
  22. }

Вопрос - как сделать так, что бы grafiki($x) возвращала значение заданное в форме пользователем?
При этом форма передает методом post данные, заданные пользователем, в файл ***.php - отвечающий за построение графика.
 
 Top
fredrsf
Отправлено: 16 Августа, 2011 - 15:19:34
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. $length = !empty($_POST['length']) ? trim($_POST['length']) : null;
  2. grafiki($length);

(Отредактировано автором: 16 Августа, 2011 - 15:20:34)

 
 Top
BiDiFo
Отправлено: 16 Августа, 2011 - 15:24:57
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




fredrsf
извиняюсь, наверно, не понятно объяснил, что мне нужно...
function grafiki ($x) {

return ($x/10)*($x/10); //мне нужно что бы эта функция была задана формой
}

Т.е сейчас если я в файле ***.php изменю ($x/10)*($x/10) на ,скажем, pow($x,3), то получу кубическую параболу, а как сделать, что бы формула задавалась бы с формы, а не редактированием файла ***.php ?

(Отредактировано автором: 16 Августа, 2011 - 15:30:29)

 
 Top
SAD
Отправлено: 16 Августа, 2011 - 15:29:48
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2511
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




?
 
 Top
White
Отправлено: 16 Августа, 2011 - 15:31:19
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




BiDiFo eval() естественно не использовать? какие возможные действия в функции(умножение, сложение...) и насколько я понимаю она задается только одним парметром х?


-----
if(time()>1356048000) die();
 
 Top
fredrsf
Отправлено: 16 Августа, 2011 - 15:37:54
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




Как тут можно обойти eval()?
 
 Top
BiDiFo
Отправлено: 16 Августа, 2011 - 15:40:59
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




пытаюсь воткнуть eval(); как то не получается ...
PHP:
скопировать код в буфер обмена
  1.         eval("\$funk = \"$funk\";");
  2.         return $funk;

Действия - все поддерживаемые пхп (например такое - exp(-pow(($x-12),2)/(2*16)) )
Параметр да, только один.
Используемые средства не ограничен.

Так, а не может ли быть где - то сдесь ошибки ?
PHP:
скопировать код в буфер обмена
  1. //вот тут мы вводим формулу
  2. <form action="4.php" method="post">
  3. Введите формулу для построения графика: <input type=text name="funk" size="40" value="($x/10)*($x/10)"><br>
  4. //вот тут ее получаем в фале 4.php
  5. $funk = $_POST["funk"];
  6. //тут пытаемся использовать
  7. function grafiki ($x) {
  8.         eval("\$funk = \"$funk\";");
  9.         return $funk;
  10. }


Так, на сколько я понял eval() возвращает строку с подстановкой, а мне нужно выражение ...
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $x = '11';
  3. $str = 'sin(-pow(($x-12),2)/(2*16))<br>';
  4. echo $str;
  5. eval ("\$str = \"$str\";");
  6. echo $str;
  7. $s = $str+1;
  8. echo $s;
  9. ?>
  10.  

имеет вывод
sin(-pow(($x-12),2)/(2*16))
sin(-pow((11-12),2)/(2*16))
1

$str+1 !=1; похоже eval() не подойдет (

(Отредактировано автором: 16 Августа, 2011 - 16:26:46)

 
 Top
illy
Отправлено: 16 Августа, 2011 - 16:09:22
Post Id



Участник


Покинул форум
Сообщений всего: 1119
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




давай весь код


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
BiDiFo
Отправлено: 16 Августа, 2011 - 16:11:32
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Спойлер (Отобразить)

4.php
Спойлер (Отобразить)
 
 Top
illy
Отправлено: 16 Августа, 2011 - 17:57:47
Post Id



Участник


Покинул форум
Сообщений всего: 1119
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




Создай пустой файл z.php

Файл 4.php измени на:
Спойлер (Отобразить)


Вот такие пироги Ха-ха

(Отредактировано автором: 16 Августа, 2011 - 18:05:29)



-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
BiDiFo
Отправлено: 16 Августа, 2011 - 18:08:53
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




угу, спасибо(пишет пока сообщений мало что бы спасибо добавить...), теперь как я пониамю функция grafiki вообще не нужна ?
 
 Top
illy
Отправлено: 16 Августа, 2011 - 18:11:30
Post Id



Участник


Покинул форум
Сообщений всего: 1119
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




Да. Она теперь нафиг не нужна Ха-ха
Вот код:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $insert='<?PHP
  3. // настройки
  4. $x0 = 600; // абсцисса точки начала отсчёта
  5. $y0 = 350; // ордината точки начала отсчёта
  6. $ks = $_POST["to4"]; // точность рисования графика
  7. $m = 5; // масштаб (1|2.5|5)
  8. // начало программы
  9. set_time_limit(90);
  10. $m = $m * 10;
  11. // создаём изображение
  12. $img = imagecreate($x0 * 2 + 20, $y0 * 2 + 10);
  13. // настраиваем цвета
  14. $bgcolor = imagecolorallocate($img, 245, 245, 245); // цвет фона
  15. $lncolor = imagecolorallocate($img, 230, 230, 230); // цвет сетки
  16. $odcolor = imagecolorallocate($img, 0, 0, 0); // цвет осей
  17. $grcolor = imagecolorallocate($img, 0, 0, 255); // цвет графика
  18. // фон
  19. imagefill($img, 0, 0, $bgcolor);
  20. // рисуем координатную сетку
  21. for ($i = 0; $i <= $x0 * 2; $i++) {
  22.        // линии
  23.        imageline($img, $i * $m, 0, $i * $m, $y0 * 2, $lncolor);
  24.        imageline($img, 0, $i * $m, $x0 * 2, $i * $m, $lncolor);
  25.        // чёрточки
  26.        imageline($img, $i * $m, $y0*2-152, $i * $m, $y0*2-148, $odcolor);
  27.        imageline($img, 50-2,  $i * $m, 50+2, $i * $m, $odcolor);
  28. }
  29. // рисуем циферки
  30. $minval = $_POST["minval"];
  31. for ($i = 0; $i <= $x0; $i++) {
  32.        if (($i - ($x0 / $m) != 0)&&($i - ($x0 / $m) > 0)) imagettftext($img, 8, 0, $i * $m - 550, $y0*2-137, $odcolor, "fonts/tahoma.ttf", $i - ($x0 / $m)+$minval);
  33.        if ((- ($i - ($y0 / 35)) != 0)&&(- ($i - ($y0 / 35)) > 0)) imagettftext($img, 8, 0, 10, $i * $m + 62, $odcolor, "fonts/tahoma.ttf", - ($i - ($y0 / 35))/10);
  34. }
  35. // рисуем координатные оси
  36. imageline($img, 50, 10, 50, $y0 * 2, $odcolor);
  37. imageline($img, 0, $y0*2-150, $x0 * 2, $y0*2-150, $odcolor);
  38. // рисуем график функции
  39. for ($x = 0.001; $x < $x0; $x += $ks) {
  40.        if (/* функция */ $y ='.$_POST['funk'].'){
  41.                if ($x >= 0) $d = 1;
  42.                else $d = 0;
  43.                $qx = $x * $m;
  44.                $y = $y * $m;
  45.                imageline($img, 50 + $d + $qx - $minval*$m, 550 - $y*10, 50 + $d + $qx - $minval*$m, 550 - $y*10, $grcolor);
  46.        }
  47. }
  48. header("content-type: image/png");
  49. imagepng($img);
  50. imagedestroy($img);
  51. // завершаем программу
  52. exit();
  53. ?>';
  54. $f=fopen('z.php','w');
  55. fputs($f,$insert);
  56. fclose($f);
  57. include('z.php');
  58.  


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB