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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2008, 10:08   #1
Panda
Пользователь
 
Регистрация: 17.06.2008
Сообщений: 24
По умолчанию помогите с графом в паскале

Нарисовать на экране катящееся по горизонтали колесо с четырьмя спицами.
Програмка немного не правильно работает

Код:
Program graph_14_4;
uses crt,dos,graph;
var
i:integer;
driver,mode,errcode:integer;
path:string;
x1,x2,y1,y2,x11,x22,y11,y22,x12,y12,x32,y32:integer;
procedure paint;
 begin
  setcolor(15);

  circle(242+i, 256,30);

  {ўа*йҐ*ЁҐ Є®«Ґб}
{///////////////////}
   setcolor(15);


   x11:=round(30*cos(i/30*pi)+242+i);
   y11:=round(30*sin(i/30*pi)+256);
   x22:=round(30*cos(i/30*pi+pi)+242+i);
   y22:=round(30*sin(i/30*pi+pi)+256);
    line(x11,y11,x22,y22);
    x12:=round(30*cos(i/90*pi)+242+i);
   y12:=round(30*sin(i/90*pi)+256);
   x32:=round(30*cos(i/90*pi+pi)+242+i);
   y32:=round(30*sin(i/90*pi+pi)+256);
   line(x12,y12,x32,y32);



  delay(1200);
  setcolor(0);
{///////////////////}

 end;
begin
 i:=-280;
 driver:=vga;
 mode:=vgahi;
 path:='H:\bp\bgi';
 initgraph(driver,mode,path);
 ErrCode:=graphResult;
 if ErrCode<>grok then
  begin
   writeln('Error');
   readln;
   halt(1);
  end;

repeat
 paint;
 delay(1200);
 cleardevice;
 inc(i);
 if i=620 then i:=-280;
until KeyPressed;
closegraph;
{ch:=#32;}
end.
Panda вне форума Ответить с цитированием
Старый 18.06.2008, 14:06   #2
knight
Дон Кихот
Форумчанин
 
Аватар для knight
 
Регистрация: 17.01.2008
Сообщений: 130
По умолчанию

вторая спица обгоняет, а надо сместить на pi/2:
Код:
    x12:=round(30*cos(i/30*pi + pi/2)+242+i);
    y12:=round(30*sin(i/30*pi+ pi/2)+256);
    x32:=round(30*cos(i/30*pi+pi+ pi/2)+242+i);
    y32:=round(30*sin(i/30*pi+pi+ pi/2)+256);
    line(x12,y12,x32,y32);
knight вне форума Ответить с цитированием
Старый 20.06.2008, 08:24   #3
Panda
Пользователь
 
Регистрация: 17.06.2008
Сообщений: 24
По умолчанию

Цитата:
Сообщение от knight Посмотреть сообщение
вторая спица обгоняет, а надо сместить на pi/2:
Код:
    x12:=round(30*cos(i/30*pi + pi/2)+242+i);
    y12:=round(30*sin(i/30*pi+ pi/2)+256);
    x32:=round(30*cos(i/30*pi+pi+ pi/2)+242+i);
    y32:=round(30*sin(i/30*pi+pi+ pi/2)+256);
    line(x12,y12,x32,y32);
Спасибо!!!!
Panda вне форума Ответить с цитированием
Старый 21.06.2008, 08:39   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а можно я ещё добавлю свои пять копеек?... :-))

я бы вместо полной очистки экрана (которая вызывает мерцание) сделал вывод того же изображения, но чёрным цветом, вот так:
процедура paint:
Код:
procedure paint(Displaycolor:integer);
 begin
    setcolor(Displaycolor);

    circle(242+i, 256,30);

    x11:=round(30*cos(i/30*pi)+242+i);
    y11:=round(30*sin(i/30*pi)+256);
    x22:=round(30*cos(i/30*pi+pi)+242+i);
    y22:=round(30*sin(i/30*pi+pi)+256);
    line(x11,y11,x22,y22);

    x12:=round(30*cos(i/30*pi + pi/2)+242+i);
    y12:=round(30*sin(i/30*pi+ pi/2)+256);
    x32:=round(30*cos(i/30*pi+pi+ pi/2)+242+i);
    y32:=round(30*sin(i/30*pi+pi+ pi/2)+256);
    line(x12,y12,x32,y32);
 end;
и тогда основной цикл программы:
Код:
...
repeat
 paint(15);
 delay(2000);
 paint(0);
 inc(i);
 if i=620 then i:=-280;
until KeyPressed;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с графом в паскале neomaximus Помощь студентам 3 17.06.2008 18:37
Задача про работу с некоторым конструктивным объектом (напр. матрицей, графом, и т. д.) ACE Valery Помощь студентам 2 03.05.2008 19:22