Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2013, 17:48   #1
andrey_besp
Пользователь
 
Регистрация: 12.04.2012
Сообщений: 15
По умолчанию Вопрос по PHP (фракталы)

Решил попробовать на php сделать фрактал «дракона» Хартера-Хейтуэя. Для начала сделал его на паскали, но вот затем на php перевести его не удалось.
Pascal
Код:
program dragon;
uses graph, crt;
var gd,gm,k:integer;
procedure st(x1,y1,x2,y2,k:integer);
var xn,yn:integer;
begin
if (k>0)and(not keypressed) then
  begin
   xn:=(x1+x2) div 2+(y2-y1) div 2;
   yn:=(y1+y2) div 2-(x2-x1) div 2;
   st(x2,y2,xn,yn,k-1);
   st(x1,y1,xn,yn,k-1);
  end
else
  line(x1,y1,x2,y2);
end;
begin
writeln('vvedite poradok');
readln(k);
gd:=detect;
initgraph(gd,gm,'f:\tp7\bgi');
setcolor(15);
st(400,200,200,200,k);
readln;
end.
PHP
Код:
<?
header ('Content-Type: image/png');
$im = imagecreatetruecolor(1000, 600)
      or die('Невозможно инициализировать GD поток');
$text_color = imagecolorallocate($im, 255, 255, 255);
function st($x1,$y1,$x2,$y2,$k,$im,$text_color){
  if($k>0){
  $xn=abs(floor(($x1+$x2)/2)+(floor($y2-$y1)/2));
  $yn=abs(floor(($y1+$y2)/2)-(floor($x2-$x1)/2));
  st($x2,$y2,$xn,$yn,$k-1, $im, $text_color);
  st($x1,$y1,$xn,$yn,$k-1, $im, $text_color);
                }
    else{
imageline ( $im , $x1 ,$y1 , $x2 , $y2 ,  $text_color );
imagepng($im);
}}
$x1=400; $y1=200; $x2=200; $y2=200; $k=1;
st($x1,$y1,$x2,$y2,$k,$im,$text_color);
?>
Подскажите где я допустил ошибку?
andrey_besp вне форума Ответить с цитированием
Старый 25.03.2013, 19:08   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

В принципе.... php - не паскаль
... если серьезно то что вы сгенерировали это картинка, её надо отобразить. Если это файл img.php, то в произвольном html документе делаете
<img src="img.php">
ADSoft вне форума Ответить с цитированием
Старый 25.03.2013, 19:50   #3
andrey_besp
Пользователь
 
Регистрация: 12.04.2012
Сообщений: 15
По умолчанию

Вы меня неправильно поняли. Я знаю что код php генерирует картинку. Проблема заключается в том что, функция st является рекурсивной и она должна рисовать по несколько линий при каждом её вызови. Но по непонятной мне причине функция st рисует только одну последнюю линию. Замечу что код на pascal работает правильно.
andrey_besp вне форума Ответить с цитированием
Старый 25.03.2013, 21:24   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

ну так смотрите в код на php
у вас у рекурсии задано условие, делать если $k>0
запускаете функцию с параметром $k=1
он рисует 1 линию..... остальные ($k-1) уже не удволетворяют условию
ADSoft вне форума Ответить с цитированием
Старый 26.03.2013, 08:14   #5
andrey_besp
Пользователь
 
Регистрация: 12.04.2012
Сообщений: 15
По умолчанию

При не выполнении $k>0 срабатывает else тем самым при $k=1 он должен нарисовать две линии.
Вот скомпилированный код написанный на паскале, который при k=1 рисует две линии. drak.exe
andrey_besp вне форума Ответить с цитированием
Старый 26.03.2013, 09:02   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

ну надо ж вникать...
вот еще
в функции используется
imagepng($im); который и создает изображение...... у вас и получается только последняя линия ..... уберите эту команду из функции....
вызывать её нужно в самом конце скрипта ... после вызова функции
Код:
st($x1,$y1,$x2,$y2,$k,$im,$text_color);
imagepng($im);
?>
причем $im - должно быть глобальной переменной
ADSoft вне форума Ответить с цитированием
Старый 26.03.2013, 16:31   #7
andrey_besp
Пользователь
 
Регистрация: 12.04.2012
Сообщений: 15
По умолчанию

Все сделал, спасибо за помощь!!!
andrey_besp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фракталы. Pascal. stas45rus Помощь студентам 0 20.07.2012 21:29
Фракталы!!!!!!!!!!!!!!!!!!!!!! Яна696 Паскаль, Turbo Pascal, PascalABC.NET 3 08.11.2011 15:24
Фракталы. Перенос. stscolt Помощь студентам 1 12.12.2009 08:43