Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Нарисовать график y=cos(x)
Форумы портала PHP.SU » » Вопросы новичков » Нарисовать график y=cos(x)

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

1. lawer85 - 01 Марта, 2013 - 01:33:50 - перейти к сообщению
Вобщем нужно построить график именно в виде рисунка y=cos(x) причем Х должен меняться от 0 до 3PI.


Пытаюсь это сделать, но сам понимаю что выходит чушь полная у меня.

Каков должен быть код чтоб выполнить это задание?
3. lawer85 - 01 Марта, 2013 - 13:06:36 - перейти к сообщению
Мне нужно именно на PHP это сделать без java и без БД
4. DlTA - 01 Марта, 2013 - 13:39:07 - перейти к сообщению
тут все графические функции
особое внимание обратить на рисование линии потому что именно ею лучше делать прорисовку, во избежании разрывов в графике

ну а формулу вы знаете
так же надо учеть что в пыхе углы изменяются в радианах, а не в градусах
5. lawer85 - 01 Марта, 2013 - 13:45:09 - перейти к сообщению
Вопрос в том, что все это я знаю. НО сам код не получается написать при условии Х должен меняться от 0 до 3PI.
6. DeepVarvar - 01 Марта, 2013 - 13:50:18 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. for ($x = 0; $x < (3*3.14); $x += 0.01) {
  2.   // код который ты знаешь
  3. }
7. lawer85 - 01 Марта, 2013 - 13:55:34 - перейти к сообщению
DeepVarvar пишет:
PHP:
скопировать код в буфер обмена
  1. for ($x = 0; $x < (3*3.14); $x += 0.01) {
  2.   // код который ты знаешь
  3. }


Спасибо. Попробую дальше сам.
8. LIME - 01 Марта, 2013 - 14:38:26 - перейти к сообщению
http://www.php.net/manual/ru/function.pi.php
9. DlTA - 01 Марта, 2013 - 15:06:01 - перейти к сообщению
DeepVarvar пишет:
for ($x = 0; $x < (3*3.14); $x += 0.01) {

не то

у вас шаг должен быть в 1 пиксел, и вопрос в том чему это растояние соответствует

короче говоря нужно определиться с масштабом и т.д.
10. lawer85 - 01 Марта, 2013 - 21:47:35 - перейти к сообщению
Вот на что меня хватает

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $im = imagecreatetruecolor(800, 800);
  3. $c = imagecolorallocate($im, 120, 220, 150);
  4. imageline($im, 0, 0, imagesx($im), imagesy($im), $c);
  5. for ($x = 0; $x < (3*3.14); $x += 0.01) {
  6. $y = cos($x);
  7. $i = imagecreatetruecolor($x, $y);
  8. imageline($im, imagesx($i), imagesy($i), imagesx($i), imagesy($i), $c);
  9. }
  10. header("Content-type: image/png");
  11. imagepng($im);
  12.  
  13. ?>
  14.  


Я же говорю выходит чушь полная. Не могу понять как именно надо сделать.
11. OrmaJever - 01 Марта, 2013 - 22:34:03 - перейти к сообщению
Значит первое, как уже сказал DlTA шаг может быть только 1px.
второе, насколько я помню математику cos и sin не может быть больше 1, здесь вспоминаем правило первое, но можно добавить множитель.
PHP:
скопировать код в буфер обмена
  1. $mx = 10;
  2. $mc = 1;
  3. $im = imagecreatetruecolor(800, 800);
  4. $c = imagecolorallocate($im, 120, 220, 150);
  5. imageline($im, 0, 400, 800, 400, $c);
  6. imageline($im, 400, 0, 400, 800, $c);
  7.  
  8. for ($x=400+round(-3*3.14)*$mx; $x<=400+round(3*3.14)*$mx;) {
  9.         $i = imagecolorallocate($im, 255, 255, 255);
  10.         imageline($im, $x, round(400+cos($x)*$mx), $x+=$mc, round(400+cos($x)*$mx), $i);
  11. }
  12.  
  13. header("Content-type: image/png");
  14. imagepng($im);

$mx тот самый множитель для $y что бы значение хоть как-то изменялось, а вот $mc... этот множитель я добавил что бы немного растянуть график по горизонтали, но получил интересный эфект! Попробуйте добавлять по одной еденице к mc, и увидите интересные эффекты ;)
12. DeepVarvar - 01 Марта, 2013 - 22:46:04 - перейти к сообщению
DlTA пишет:
не то

у вас шаг должен быть в 1 пиксел
Правильно, я написал лишь принцип.
OrmaJever пишет:
насколько я помню математику cos и sin не может быть больше 1

1 - sin = cos и наоборот, 1 - tg = ctg и наоборот.
Это четыре четверти еденичной окружности, т.е. окружности, радиус которой равет еденице.
Тогда ничего не стоит расчитать zoom под себя, это же простые пропорции.
Человек же говорит что с этим то у него все нормально.
И как выясняется - не нормально.
(Добавление)
LIME пишет:
http://www.php.net/manual/ru/function.pi.php
Ну, я во всяком случае попытался заставить его думать самостоятельно.
13. lawer85 - 01 Марта, 2013 - 22:50:20 - перейти к сообщению
OrmaJever пишет:
Значит первое, как уже сказал DlTA шаг может быть только 1px.
второе, насколько я помню математику cos и sin не может быть больше 1, здесь вспоминаем правило первое, но можно добавить множитель.
PHP:
скопировать код в буфер обмена
  1. $mx = 10;
  2. $mc = 1;
  3. $im = imagecreatetruecolor(800, 800);
  4. $c = imagecolorallocate($im, 120, 220, 150);
  5. imageline($im, 0, 400, 800, 400, $c);
  6. imageline($im, 400, 0, 400, 800, $c);
  7.  
  8. for ($x=400+round(-3*3.14)*$mx; $x<=400+round(3*3.14)*$mx;) {
  9.         $i = imagecolorallocate($im, 255, 255, 255);
  10.         imageline($im, $x, round(400+cos($x)*$mx), $x+=$mc, round(400+cos($x)*$mx), $i);
  11. }
  12.  
  13. header("Content-type: image/png");
  14. imagepng($im);

$mx тот самый множитель для $y что бы значение хоть как-то изменялось, а вот $mc... этот множитель я добавил что бы немного растянуть график по горизонтали, но получил интересный эфект! Попробуйте добавлять по одной еденице к mc, и увидите интересные эффекты ;)


Спасибо большое.
(Добавление)
DeepVarvar пишет:
DlTA пишет:
не то

у вас шаг должен быть в 1 пиксел
Правильно, я написал лишь принцип.
OrmaJever пишет:
насколько я помню математику cos и sin не может быть больше 1

1 - sin = cos и наоборот, 1 - tg = ctg и наоборот.
Это четыре четверти еденичной окружности, т.е. окружности, радиус которой равет еденице.
Тогда ничего не стоит расчитать zoom под себя, это же простые пропорции.
Человек же говорит что с этим то у него все нормально.
И как выясняется - не нормально.
(Добавление)
LIME пишет:
http://www.php.net/manual/ru/function.pi.php
Ну, я во всяком случае попытался заставить его думать самостоятельно.


Просто мне уже 27 лет, а школу я закончил ну скажем так давно, хоть тогда я и отлично понимал алгебру.
14. DeepVarvar - 01 Марта, 2013 - 23:53:12 - перейти к сообщению
lawer85 пишет:
Просто мне уже 27 лет, а школу я закончил ну скажем так давно, хоть тогда я и отлично понимал алгебру.
Не простительно.
Мне 30 и у меня только 9 кл. вечерней школы.
Синусы-косинусы мне вообще учить не довелось, т.к. это 10-11 кл.
Не посчитайте что хвалюсь.
Посчитайте за пинок в правильную сторону - как минимум вспомнить старое, как максимум познать новое.
И не надо искать себе оправданий - они только тормозят работу над собой.
OrmaJever тоже не имеет какого либо профильного образования, насколько я знаю.
15. OrmaJever - 01 Марта, 2013 - 23:59:59 - перейти к сообщению
DeepVarvar пишет:
OrmaJever тоже не имеет какого либо профильного образования, насколько я знаю.

Да, и иногда ломаю голову из-за математики. Хотя с изображениями очень даже нравится работать Подмигивание

 

Powered by ExBB FM 1.0 RC1