Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: fpc fractal clear screen  (Прочитано 14110 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mayor
Специалист

ru
Offline Offline

« : 14-09-2007 15:23 » 

как очистить экран перед выводом нового фрактала?

Код:
program derevo;
uses graph,crt;
var gd,gm:integer; radian1,radian2:real;

procedure line1(x1,x2,x3,x4 : double);
begin
line(round(x1),round(x2),round(x3),round(x4));
end;

procedure frac1(x1,y1,x2,y2,i:double);
var x3,y3,x4,y4,dx,dy,x5,y5 : double;
begin
if (i>0) then
begin
line1(x1,y1,x2,y2);
i-=1;
dx:=(x2-x1) / 2;
dy:=(y2-y1) / 2;
x3:=x1+dx;
y3:=y1+dy;
x4:=x3+dy;
y4:=y3-dx;
x5:=x3-dy;
y5:=y3+dx;
frac1(x3,y3,x4,y4,i);
frac1(x3,y3,x5,y5,i);
end;




end;

var ii : integer;
x,y,r,a,x0,y0 : double;
begin
radian1:=-1*pi*10/180;
radian2:=pi*10/180;

initgraph(gd,gm,'c:\tp70\bgi');
x0:=100;
y0:=200;
x:=100;
y:=200;
r:=sqrt(x*x+y*y);
a:=arctan(x/y);
for ii :=1 to 100 do
begin
a+=0.1;
frac1(x0,y0,x0+r*sin(a),y0+r*cos(a),8);
delay(100);
end;
delay(5000);
exit;
frac1(50,50,430,230,8);
delay(5000);
end.

Записан

1n c0de we trust
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 14-09-2007 15:31 » 

запоминать предыдущее состояние цвета, перед выводом нового восстанавливать старое
а еще не увидел где меняется/устанавливается цвет
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 14-09-2007 15:37 » 

во блин,
а это что?

i-=1;
на каком языке?

а это зачем?
radian1:=-1*pi*10/180;

radian1:=-pi/18;

и в коде зачем?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 14-09-2007 15:45 » 

паскаль плюс плюс )
Записан

Mayor
Специалист

ru
Offline Offline

« Ответ #4 : 14-09-2007 17:43 » 

паскаль плюс плюс )

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

ваще-то запоминать цвета слишком много ресурсов требует: проще как в элите экран стереть чем нить по быстрому и снова отрисоваться

а нашел:

cleardevice();

вот только теперь фрактал мерцает Жаль

как его в буфере нарисовать а потом мгновенно на экран перекинуть?

« Последнее редактирование: 14-09-2007 17:51 от Mayor » Записан

1n c0de we trust
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 14-09-2007 18:10 » 

Mayor1, вручную пиши буфер Улыбаюсь Если видео-драйвер и видеопамять позволяют, то можно страницы видеопамяти использовать. Функции SetActivePage - для установки страницы вывода и SetVisualPage - для установки отображаемой страницы. На активной выводишь, в это время другая висит на экране, затем меняешь их местами.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Mayor
Специалист

ru
Offline Offline

« Ответ #6 : 14-09-2007 18:57 » 

Mayor1, вручную пиши буфер Улыбаюсь Если видео-драйвер и видеопамять позволяют, то можно страницы видеопамяти использовать. Функции SetActivePage - для установки страницы вывода и SetVisualPage - для установки отображаемой страницы. На активной выводишь, в это время другая висит на экране, затем меняешь их местами.

э типа не помогает Жаль
Код:
program derevo;
uses graph,crt;
var gd,gm:integer;

procedure line1(x1,x2,x3,x4 : double);
begin
line(round(x1),round(x2),round(x3),round(x4));
end;

procedure frac1(x1,y1,x2,y2,i:double);
var x3,y3,x4,y4,dx,dy,x5,y5 : double;
begin
if (i>0) then
begin
line1(x1,y1,x2,y2);
i-=1;
dx:=(x2-x1) / 1.6;
dy:=(y2-y1) / 1.6;
x3:=x1+dx;
y3:=y1+dy;
x4:=x3+dy;
y4:=y3-dx;
x5:=x3-dy;
y5:=y3+dx;
frac1(x3,y3,x4,y4,i);
frac1(x3,y3,x5,y5,i);
end;
end;

var ii,w : integer;
xc1,yc1,cc1,cc,xc,yc,x,y,r,a,x0,y0 : double;
begin
initgraph(gd,gm,'c:\tp70\bgi');
x0:=300;
y0:=400;
x:=80;
y:=50;
w:=0;
r:=sqrt(x*x+y*y);
a:=arctan(x/y);
cc:=0.7;
xc:=x0+cc*r*sin(a);
yc:=y0+cc*r*cos(a);
cc1:=0.2;
xc1:=x0+cc1*r*sin(a);
yc1:=y0+cc1*r*cos(a);
for ii :=1 to 500 do
begin
w:=1 xor w;
a+=0.05;
setactivepage(w);
x:=xc+r*sin(a);
y:=yc+r*cos(a);
x0:=xc1-cc1*r*sin(cc1+a);
y0:=yc1+cc1*r*cos(cc1+a);
xc1:=x0+cc1*r*sin(a);
yc1:=y0+cc1*r*cos(a);
frac1(x0,y0,x,y,10);
setvisualpage(w);
delay(30);
cleardevice();
end;
delay(1000);
end.

может другой юнит есть, который отделается от мерцания?

что можно почитать по 3D векторной графике для полного ньюба?

как отобразить плоскость в трехмерном пространстве?

что есть из gpl тулз для создания простых векторных изображений?



Записан

1n c0de we trust
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 15-09-2007 05:52 » 

Цитата: Mayor1
э типа не помогает
Таму, что у тебя написано, и 10 страниц не помогут - всё мерцать будет Ага Подумай на досуге, почему.

P.S. Я не вижу инициализации переменных gd, gm. Если использовать стандартные драйверы (BGI-драйверы) TP 7.0, то 2 видеостраницы поддерживаются только в EGAHi и EGALo режимах или VGAMed и VGALo. Остальное всё одностраничное.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Mayor
Специалист

ru
Offline Offline

« Ответ #8 : 15-09-2007 08:06 » 

P.S. Я не вижу инициализации переменных gd, gm. Если использовать стандартные драйверы (BGI-драйверы) TP 7.0, то 2 видеостраницы поддерживаются только в EGAHi и EGALo режимах или VGAMed и VGALo. Остальное всё одностраничное.

тоже не помогает ...

начинаю думать на досуге об языке или юните на котором можно более успешно рисовать фракталы Улыбаюсь
Записан

1n c0de we trust
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 15-09-2007 10:20 » 

Цитата: Mayo1
начинаю думать на досуге об языке или юните на котором можно более успешно рисовать фракталы
Я понимаю, что это твой подход: вместо размышлений и выявления детсадовской ошибки в собственном коде заявить, что язык, де, плохой, и надо использовать что-нибудь другое. Зато как приятно звучит фраза "Отладка не понадобилась". Прямо даже закрадывается мысль, что, быть может, автор отлаживать не умеет? Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 15-09-2007 12:02 » 

Mayor1,
у тебя: включаешь , рисуешь, показываешь, а потом стираешь видимую страницу
Код:
w:=1 xor w;
setactivepage(w);
...
setvisualpage(w);
...
cleardevice();//это надо не тут

« Последнее редактирование: 15-09-2007 12:06 от Алексей1153++ » Записан

Mayor
Специалист

ru
Offline Offline

« Ответ #11 : 15-09-2007 15:56 » 

Цитата: Mayo1
начинаю думать на досуге об языке или юните на котором можно более успешно рисовать фракталы
Я понимаю, что это твой подход: вместо размышлений и выявления детсадовской ошибки в собственном коде заявить, что язык, де, плохой, и надо использовать что-нибудь другое. Зато как приятно звучит фраза "Отладка не понадобилась". Прямо даже закрадывается мысль, что, быть может, автор отлаживать не умеет? Улыбаюсь
да дело не в языке, а в доступной электронной документации по нему, был бы нормальный учебник, то можно было бы от паскаля получить намного большее, чем после его изучения по туториалу

ты прав, давно уже не тянет сидеть долгими зимними вечерами за софтайсом Улыбаюсь
Записан

1n c0de we trust
Mayor
Специалист

ru
Offline Offline

« Ответ #12 : 15-09-2007 16:14 » 

Mayor1,
у тебя: включаешь , рисуешь, показываешь, а потом стираешь видимую страницу
Код:

w:=1 xor w;
setactivepage(w);
...
setvisualpage(w);
...
cleardevice();//это надо не тут


да тут ваще по ходу set... не работает, вот все и мерцает ... по идее нада как-то в битмеп буфере рисовать а потом его копировать, но в
такой документации хрен что полезное найдешь, все приходится тянуть из исходников
Записан

1n c0de we trust
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 15-09-2007 17:07 » 

Цитата
да тут ваще по ходу set... не работает
круто... А попробовать ? Тупо вот так:

Код:
setactivepage(0);
cleardevice();
//что то нарисовали

setactivepage(1);
cleardevice();
//что то нарисовали

setvisualpage(0);
delay(1000);
setvisualpage(1);
delay(1000);
setvisualpage(0);
delay(1000);
setvisualpage(1);
delay(1000);
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 15-09-2007 17:38 » 

Алексей1153++, IMHO, бесполезно. Прекращаю давать ему советы, подсказки, а заодно и ругаться.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 15-09-2007 18:51 » 

dimka, ты вроде и не ругался даже )
Записан

Mayor
Специалист

ru
Offline Offline

« Ответ #16 : 16-09-2007 17:08 » 

Цитата
да тут ваще по ходу set... не работает
круто... А попробовать ? Тупо вот так:

Код:
setactivepage(0);
cleardevice();
//что то нарисовали

setactivepage(1);
cleardevice();
//что то нарисовали

setvisualpage(0);
delay(1000);
setvisualpage(1);
delay(1000);
setvisualpage(0);
delay(1000);
setvisualpage(1);
delay(1000);

так тоже не работает Жаль

мда за это время я мог бы часть какой нить графической библиотеки изучить

а все таки С после паскаля, каким то низкоуровневым кажется, ни тебе сетов ни тебе строк  ...

 паскаль больше чем С подходит для студентов, когда препод рядом и учебник всегда под рукой  ... ну а как в одного с такой документацией работать я не представляю
Записан

1n c0de we trust
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 17-09-2007 06:01 » 

Mayor1, а ты в магазин ходил? Паскаль начинают изучать в школе, раньше чем основы С, учебников, методичек, исходников, exampleов куча. Попробуй то же самое сделать на С и увидишь - результат будет тот же
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Mayor
Специалист

ru
Offline Offline

« Ответ #18 : 18-09-2007 05:18 » 

Mayor1, а ты в магазин ходил? Паскаль начинают изучать в школе, раньше чем основы С, учебников, методичек, исходников, exampleов куча. Попробуй то же самое сделать на С и увидишь - результат будет тот же

результат уже увидел: на паскале проще кодить учебные задачки, чем на С благодаря встроенной поддержке многих фишек типа строк, множеств, файлов и тп

но как только начинается поиск нетривиальных решений ... вот тут юниты сливают библиотекам
Записан

1n c0de we trust
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #19 : 18-09-2007 05:41 » 

Mayor1, а что подразумевается под множествами ?
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #20 : 18-09-2007 09:29 » 

Алексей1153++, в Pascal есть тип данных "set of <базовый тип>", изнутри представляющий собой битовый массив. Каждому потенциальному элементу множества ставится в соответствие 1 бит: если бит установлен, элемент входит во множество, иначе нет. Над множествами одинакового типа можно проводить операции: конструирования (перечня элементов множества), сложения (объединения), вычитания (разности), умножения (пересечения) и проверки членства (оператор "<элемент> in <множество>"). Жаль только, что в 16-ибитных версиях Pascal множества могли включать не более 256 потенциальных элементов.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #21 : 18-09-2007 09:42 » 

dimka, ну дык... вроде несложно такую штуку в виде класса написать , навскидку день работы максимум, но можно и за несколько часов управиться (блин, это что - заразно ? Отлично )

кстати, сталкивался с необходимостью такого массива один раз в одном из проектов. Не знал, что так называется Улыбаюсь
Записан

Mayor
Специалист

ru
Offline Offline

« Ответ #22 : 20-09-2007 03:57 » 

работы максимум, но можно и за несколько часов управиться (блин, это что - заразно ? Отлично )
неа это называется спортивным программированием, когда выполняешь заказ во главу угла ставится стабильность программы, сознательно удаляешь всю оптимизацию в алгоритмах, что бы свести вероятность возникновения бага к минимому и максимально облегчить поиск бага, неожиданно обнаруженного через месяц использования программы, когда уже забыл почти все кроме основных интерфейсов ...

ну а в спортивном есть ограниченный набор тестов, оценивается в основном скорость написания, скорость алгоритма, все явные баги удаляются в процессе написания, алгоритм может меняться по ходу написания тк поощряются нетривиальные решения, скрытые баги никто не находит тк программа после тестирования не используется ...
Записан

1n c0de we trust
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #23 : 20-09-2007 04:21 » new

Mayor1, нет, я имею в виду разумное время разработки этого класса, соревноваться я и не собирался )

Насчёт багов - да, бывает иногда ошибка имеется и не проявляется до возникновения неких условий... Но в данном случаем ошибиться вреде негде

Насчёт "забыл, как работает" - на то дадены комментарии. Пиши их, и будет щасте и память.
Интерфейсы, кстати, тоже надо комментировать
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines