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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2008, 02:08   #1
Sashka
Пользователь
 
Регистрация: 29.01.2008
Сообщений: 10
По умолчанию Изобразить на экране правильный многоугольник, стороны которого окрашены в разные цвета, совершающий внут

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

вот код для задачи с кругом

Код:
Program 4;
Uses CRT,Graph;
Var gd,gm : integer;
ch : char;
xp,yp,x0,y0 : integer;
i,xl,yl,j,bj,aj : integer;
dl : word;
Napr : byte;
Procedure Keys;
Begin
If (KeyPressed) and (ReadKey = ' ') then
begin
Case napr of
0 : napr:=1;
1 : napr:=0;
End;
end;
End;
Procedure Planet;
Var tj : integer;
Begin
Circle(xp,yp,25);
xl:=xp +round(25 * cos(2 * j * pi/180));
yl:=yp -round(25 * sin(2 * j * pi/180));
Line(xp,yp,xl,yl);
tj:=j - 90;
xl:=xp +round(25 * cos(2 * tj * pi/180));
yl:=yp -round(25 * sin(2 * tj * pi/180));
Line(xp,yp,xl,yl);
Keys;
xl:= xp + round(10 * cos(2 * aj * pi/180));
yl:= yp - round(10 * sin(2 * aj * pi/180));
SetFillStyle(1,Green);
FloodFill(xl,yl,white);
xl:= xp + round(10 * cos(2 * bj * pi/180));
yl:= yp - round(10 * sin(2 * bj * pi/180));
SetFillStyle(1,Red);
FloodFill(xl,yl,White);
End;
Begin
ClrScr;
gd:=detect;
initgraph(gd,gm,'C:\BP\BGI');
x0:=GetMaxX div 2;
y0:=GetMaxY div 2;
i:=0;
j:=0;
aj:=135;
bj:=45;
Dl:=4000;
Napr:=1;
Repeat
If Napr=0 then
Begin
Inc(i);
Inc(j);
Inc(aj);
Inc(bj);
End
Else
Begin
Dec(i);
Dec(j);
Dec(aj);
Dec(bj);
End;
xp:= x0 + round(150 * cos(2 * i * pi/360));
yp:= y0 - round(150 * sin(2 * i * pi/360));
Planet;
If i=360 then i:=0;
if j=180 then j:=0;
if aj=180 then aj:=0;
if bj=180 then bj:=0;
Keys;
Delay(4000);
ClearDevice;
Until (KeyPressed) and (ReadKey=#27);
End.

Последний раз редактировалось AlDelta; 31.01.2008 в 02:20. Причина: CODE
Sashka вне форума Ответить с цитированием
Старый 31.01.2008, 08:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Паскаля под рукой нет, поэтому привожу пример на Делфи, там ядро отрисовки перемарафеть под паскаль и будет тебе счастье:
Код:
unit Unit1;

interface

uses     math,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    procedure draw(cx,cy,BeginAngle:real; n:integer);
    procedure adraw(cx,cy,BeginAngle:real; n:integer);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var            ang:real;  atp2:array of TPoint;   i:integer;
  Form1: TForm1;

implementation

{$R *.dfm}

//********* PROCEDURE**********
procedure TForm1.draw;
var rx,ry,x,y,angle, rang, ang:real;i:integer;
 atp:array of TPoint;
begin

//cx:=form1.Width div 2;cy:=form1.Height div 2;
ang:=360/n;
angle:=(2*pi*ang)/360; rang:=angle;
SetLength(atp,n);
with form1 do begin
  //********* FOR ******************
  for  i:=0  to n  do
  begin
   //canvas.MoveTo(cx,cy);
   rx:=(cos(angle+BeginAngle));
   ry:=(sin(angle+BeginAngle));
   atp[i].X:=round(cx+100*(rx));
   atp[i].Y:=round(cy+100*(ry));
 //  canvas.LineTo(round(x),round(y));
 angle:=angle+rang;
   end;
  //******* END FOR ****************
  Canvas.Polygon(atp);
end;
//form1.Canvas.LineTo(100,100);
end;

//********* END PROCEDURE*******



//********* PROCEDURE**********
procedure TForm1.adraw;
var rx,ry,x,y,angle, rang, ang:real;i:integer;

begin

//cx:=form1.Width div 2;cy:=form1.Height div 2;
ang:=360/n;
angle:=(2*pi*ang)/360; rang:=angle;
SetLength(atp2,n);
with form1 do begin
  //********* FOR ******************
  for  i:=0  to n  do
  begin
   //canvas.MoveTo(cx,cy);
   rx:=(cos(angle+BeginAngle));
   ry:=(sin(angle+BeginAngle));
   atp2[i].X:=round(cx+100*(rx));
   atp2[i].Y:=round(cy+100*(ry));
 //  canvas.LineTo(round(x),round(y));
 angle:=angle+rang;
   end;
  //******* END FOR ****************
  Canvas.Polygon(atp2);
end;
//form1.Canvas.LineTo(100,100);
end;

//********* END PROCEDURE*******


procedure TForm1.Timer1Timer(Sender: TObject);
begin
   Canvas.FillRect(BoundsRect);

// for i:=0 to 9 do begin
  if i=length(atp2) then i:=0 else inc(i);
  draw(atp2[i].X,atp2[i].y,ang,3);
// end;
  ang:=ang+10;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
adraw(Width div 2,Height div 2,ang,100);

end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.01.2008, 11:27   #3
Sashka
Пользователь
 
Регистрация: 29.01.2008
Сообщений: 10
По умолчанию

Я не умею(((
Sashka вне форума Ответить с цитированием
Старый 31.01.2008, 12:02   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

"Учись... студент!"
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си - Решение задачи про многоугольник и точку andreas Помощь студентам 1 27.05.2008 19:29
Копирование строк. Правильный ли код? LinuxUser Общие вопросы C/C++ 12 06.11.2007 17:33
Как раскрасить ячейки StringGrid'а в разные цвета в соответствии с условием? monushka Компоненты Delphi 12 05.11.2007 23:44
Как изобразить в алгоритме!!?? Шурик Общие вопросы Delphi 0 23.10.2007 00:10