вывод рисунка с некоторыми дефектами

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

вывод рисунка с некоторыми дефектами

Сообщение фыва » 24.11.2008 00:23:10

Запукаю программу в FPC, программа должна рисовать 2 графика... и она их рисует, НО местами идут полосы, в которых ничего не отображается... т.е. представьте себе: график начерчен нормально, а потом мы берём в руки стирашку и стираем в некоторых местах...и получаем то что у меня на экране...
Если дололнительно задать программе нарисовать простую линию в областях "протёртых стирашкой" , то прога её там нарисует... но графики не хочет в этих областях отображать...
Причём обидно то, что пробовал у приятеля запускать свою программу на том же FPC и у него всё работает как надо...
Кто-нибудь знает как мне избавиться от этого глюка и глюк ли это вообще :?:
фыва
незнакомец
 
Сообщения: 5
Зарегистрирован: 23.11.2008 23:57:57

Re: вывод рисунка с некоторыми дефектами

Сообщение SAK » 24.11.2008 01:23:02

Программу в студию. Скорее всего глюк в самой программе, учитывая, что отдельные линии всёже рисуются.
SAK
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Re: вывод рисунка с некоторыми дефектами

Сообщение фыва » 24.11.2008 22:47:01

Код: Выделить всё
program oo;
uses crt, graph;

const
  gamma=0.0;
  w0=1;
  n=1000;
  dt=0.01;
var
fi,v,a0,t,E,E0,fi0,v0,fi_n,v_n,fi1,v1:extended;
i,gd,gm: integer;


function fun(v,fi:extended):extended;
   begin
fun:=-2*gamma*v-sqr(w0)*sin(fi);
   end;


begin

     gd:=detect;
     initgraph(gd,gm, '');
     v:=1;fi:=1;t:=0;E0:=sqr(v)/2-sqr(w0)*cos(fi);

   repeat
    fi0:=fi;v0:=v;a0:=fun(v0,fi0);
  {  fi:=fi+v*dt;
    v:=v+a0*dt;      }

    fi1:=fi+v*dt;
    v1:=v+fun(v,fi)*dt;
    fi_n:=fi+dt*(v+v1)/2;
    v_n:=v+dt/2*(fun(v,fi)+fun(v1,fi1));
    fi:=fi_n;
    v:=v_n;

    E:=sqr(v)/2-sqr(w0)*cos(fi);
    t:=t+dt;

     line(320,0,320,480);
    line(0,240,640,240);

    putpixel(320+trunc(fi*100),240-trunc(v*100), green);
    putpixel(320+trunc(t*5),240-trunc((E/E0-1)*500000), red);

   until keypressed;

   readln;
end.

модератор: учимся использовать тег code
фыва
незнакомец
 
Сообщения: 5
Зарегистрирован: 23.11.2008 23:57:57

Re: вывод рисунка с некоторыми дефектами

Сообщение SAK » 24.11.2008 23:22:22

Так она и должна с разрывами рисовать при быстром изменении значения функции, график-то рисуется точками.
Рисовать графики стоит не одновременно, а сначала полностью один, затем другой. Это позволит использовать LineTo вместо PutPixel. Разрывы будут исключены. Можно рисовать и одновременно оба, но для каждой функции надо будет помнить предыдущее значение и использовать Line для рисования.

Добавлено спустя 31 минуту 42 секунды:
Вот немного переделал:
Код: Выделить всё
program oo;
uses crt, graph;
const
  gamma=0.0;
  w0=1;
  n=1000;
  dt=0.01;
var
  fi,v,a0,t,E,E0,fi0,v0,fi_n,v_n,fi1,v1:extended;
  i,gd,gm: integer;
  xa,ya,xb,yb,x,y: integer;
  first: boolean;

function fun(v,fi:extended):extended;
begin
  fun:=-2*gamma*v-sqr(w0)*sin(fi);
end;

begin
  gd:=detect;
  initgraph(gd,gm, '');
  v:=1;fi:=1;t:=0;E0:=sqr(v)/2-sqr(w0)*cos(fi);
  first:=true;

  repeat
    fi0:=fi;v0:=v;a0:=fun(v0,fi0);
    { fi:=fi+v*dt;
    v:=v+a0*dt; }

    fi1:=fi+v*dt;
    v1:=v+fun(v,fi)*dt;
    fi_n:=fi+dt*(v+v1)/2;
    v_n:=v+dt/2*(fun(v,fi)+fun(v1,fi1));
    fi:=fi_n;
    v:=v_n;

    E:=sqr(v)/2-sqr(w0)*cos(fi);
    t:=t+dt;

    if first then
     begin
       line(320,0,320,480);
       line(0,240,640,240);
       xa:=320+trunc(fi*100);
       ya:=240-trunc(v*100);
       xb:=320+trunc(t*5);
       yb:=240-trunc((E/E0-1)*500000);
       first:= false;
       continue
     end;

    x:=320+trunc(fi*100);
    y:=240-trunc(v*100);
    setcolor(green); line(xa,ya,x,y);
    xa:=x; ya:=y;

    x:=320+trunc(t*5);
    y:=240-trunc((E/E0-1)*500000);
    Setcolor(red); line(xb,yb,x,y);
    xb:=x; yb:=y;

until keypressed;

readln;
end.

Советую посмотреть ещё здесь viewtopic.php?f=1&t=2053
SAK
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Re: вывод рисунка с некоторыми дефектами

Сообщение фыва » 25.11.2008 01:19:43

Запускал твою программу, но всё происходит по-старому...полосы не исчезают...((((
фыва
незнакомец
 
Сообщения: 5
Зарегистрирован: 23.11.2008 23:57:57

Re: вывод рисунка с некоторыми дефектами

Сообщение SAK » 25.11.2008 19:00:38

Скриншот покажи. И чем компилишь FPC или Turbo Pascal?
SAK
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Re: вывод рисунка с некоторыми дефектами

Сообщение фыва » 26.11.2008 20:21:25

http://radikal.ru/F/s44.radikal.ru/i104 ... f.jpg.html
это вывод
http://s39.radikal.ru/i084/0811/fd/09e3688d3b64.jpg
это окно появляется после



компелирую FTP
фыва
незнакомец
 
Сообщения: 5
Зарегистрирован: 23.11.2008 23:57:57

Re: вывод рисунка с некоторыми дефектами

Сообщение SAK » 26.11.2008 20:58:29

Да, странный вид. А если попробовать перенести на другой компьютер уже откомпилированную программу, что бы определиться с источником проблемы: компилятор или железо/операционная система. И ещё странно что оси координат нарисованы поверх графиков, если это вариант предложенный мной, то графики должны быть поверх осей нарисованы.

Добавлено спустя 13 минут 6 секунд:
То окно появляется возможно по той причине, что рано или поздно в программе происходит переполнение, т.к. она наращивает значение переменных до нажатия клавиши. Ограничить бы надо количество интераций, например заменой "until keypressed" на "until xb>2000"

Добавлено спустя 9 минут 45 секунд:
А что вообще должна нарисовать эта программа? Мне просто непонятен смысл тех вычислений, может можно сделать всё иначе.
SAK
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Re: вывод рисунка с некоторыми дефектами

Сообщение фыва » 26.11.2008 21:35:58

я же говорил что у моего приятеля(у него такой же компьютер, такая же винда, такая же версия FPC) программа работает исправно, и не рисует подобное... В том то и парадокс что у нас с ним всё тоже самое по части железа, винды, компилятора...

а вообще графики - это фазовый портрет( угла от угл скорости) для свободных незатухающих колебаний(диффур 2го порядка). метод Эйлера-Кронера
фыва
незнакомец
 
Сообщения: 5
Зарегистрирован: 23.11.2008 23:57:57

Re: вывод рисунка с некоторыми дефектами

Сообщение SAK » 26.11.2008 21:46:37

Я имел в виду не компилировать на другом компьютере, а откомпилировать на одном, а запускать на другом. Например возможны различия в настройках FPC.

А двух абсолютно одинаковых компьютеров не бывает хотябы потому, что винда при инсталляции использует генератор случайных чисел :)
SAK
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Re: вывод рисунка с некоторыми дефектами

Сообщение пупсиГ » 20.12.2008 16:35:22

а у меня не работает эта программа и выдает ошибку Error 116: Must be in 8087 mode to compile this. :((((( что делать????
пупсиГ
незнакомец
 
Сообщения: 2
Зарегистрирован: 20.12.2008 16:31:11

Re: вывод рисунка с некоторыми дефектами

Сообщение SAK » 21.12.2008 13:44:35

Я так понимаю, что это в Turbo Pascal выдаёт? Тогда надо разрешить использование математического сопроцессора добавив в самом начале программы директивы компилятора {$N+,E+}. Если не планируется запускать эту программу на компьютерах с процессором ниже Pentium, то можно {$N+,E-}
SAK
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Re: вывод рисунка с некоторыми дефектами

Сообщение пупсиГ » 28.12.2008 20:40:07

это во фри паскале :)
пупсиГ
незнакомец
 
Сообщения: 2
Зарегистрирован: 20.12.2008 16:31:11


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru