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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2013, 20:32   #1
Error_256
Новичок
Джуниор
 
Регистрация: 06.04.2013
Сообщений: 3
По умолчанию Закручивающийся квадрат на 1/5 длины его стороны

Помогите пожалуйста как сделать так чтобы квадрат закручивался на 1/5 длины его стороны
пример: http://www.opita.net/files/images/FullScreen.jpg однако там он закручивается не на 1/5

вот что удалось написать но там квадрат просто крутится (((

Код:
program f;
uses crt, graphabc;
const
 x0=300; y0=200; dt=0.5 ;
var x1,x2,x3,x4, y1,y2,y3,y4: integer;
r,x,v,w, a1,a2,a3,a4:real;
begin
 r:=240;
 x1:=240;
 x2:=540;
 x3:=540;
 x4:=240;
 y1:=100;
 y2:=100;
 y3:=400;
 y4:=400;
  a1:=0;
  a2:=90;
  a3:=180;
  a4:=270;
w:=10 ;

 
while not (KeyPressed) do
begin
 
x1:= x0 + Round (r*sin(a1*pi/180));
y1:= y0 - Round (r*cos(a1*pi/180));
x2:= x0 + Round (r*sin(a2*pi/180));
y2:= y0 - Round (r*cos(a2*pi/180));
x3:= x0 + Round (r*sin(a3*pi/180));
y3:= y0 - Round (r*cos(a3*pi/180));
x4:= x0 + Round (r*sin(a4*pi/180));
y4:= y0 - Round (r*cos(a4*pi/180));
 
 
 
setpencolor(clblack);
 line(x1,y1,x2,y2);
  line(x2,y2,x3,y3);
   line(x3,y3,x4,y4);
    line(x4,y4,x1,y1);
   sleep(50);
      setpencolor(clwhite);
   line(x1,y1,x2,y2);
  line(x2,y2,x3,y3);
   line(x3,y3,x4,y4);
    line(x4,y4,x1,y1);
    
 
a1:=a1+w*dt;
a2:=a2+w*dt;
a3:=a3+w*dt;
a4:=a4+w*dt;
end;
end.
Error_256 вне форума Ответить с цитированием
Старый 06.04.2013, 20:44   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код на дельфи (но идея понятна):
Код:
var
  a, b: array [1 .. 4, 1 .. 2] of integer;
  i, j, r: integer;
begin
  r := 400;
  a[1, 1] := 100;
  a[1, 2] := 50;
  a[2, 1] := a[1, 1] + r;
  a[2, 2] := a[1, 2];
  a[3, 1] := a[2, 1];
  a[3, 2] := a[2, 2] + r;
  a[4, 1] := a[1, 1];
  a[4, 2] := a[3, 2];
  for i := 1 to 1000 do
  begin
    canvas.moveto(a[4, 1], a[4, 2]);
    for j := 1 to 4 do
      canvas.lineto(a[j, 1], a[j, 2]);
    for j := 1 to 4 do
    begin
      b[j, 1] := round(a[j, 1] + (a[j mod 4 + 1, 1] - a[j, 1]) / 5);
      b[j, 2] := round(a[j, 2] + (a[j mod 4 + 1, 2] - a[j, 2]) / 5);
    end;
    a := b;
  end;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 06.04.2013, 21:01   #3
Error_256
Новичок
Джуниор
 
Регистрация: 06.04.2013
Сообщений: 3
По умолчанию

затрудняюсь если честно перевести это для для Pascal ABC
кстати вот пример на си, правда там уменьшается на 1.7 стороны http://www.opita.net/node/301
Error_256 вне форума Ответить с цитированием
Старый 06.04.2013, 21:07   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

У меня нет Pascal ABC под рукой.
Изменить нужно 2 строчки.
Примерно так:
Код:
uses
  crt, graphabc;
var
  a, b: array [1 .. 4, 1 .. 2] of integer;
  i, j, r: integer;
begin
  r := 400;
  a[1, 1] := 100;
  a[1, 2] := 50;
  a[2, 1] := a[1, 1] + r;
  a[2, 2] := a[1, 2];
  a[3, 1] := a[2, 1];
  a[3, 2] := a[2, 2] + r;
  a[4, 1] := a[1, 1];
  a[4, 2] := a[3, 2];
  for i := 1 to 1000 do
  begin
    moveto(a[4, 1], a[4, 2]);
    for j := 1 to 4 do
      lineto(a[j, 1], a[j, 2]);
    for j := 1 to 4 do
    begin
      b[j, 1] := round(a[j, 1] + (a[j mod 4 + 1, 1] - a[j, 1]) / 5);
      b[j, 2] := round(a[j, 2] + (a[j mod 4 + 1, 2] - a[j, 2]) / 5);
    end;
    a := b;
  end;
end;
UPD
Пожалуйста
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 06.04.2013 в 21:34.
BDA на форуме Ответить с цитированием
Старый 06.04.2013, 21:28   #5
Error_256
Новичок
Джуниор
 
Регистрация: 06.04.2013
Сообщений: 3
По умолчанию

большое спасибо всё работает =)
Error_256 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нарисовать произвольный треугольник,зная его стороны(pascal) reprain Помощь студентам 1 07.10.2012 22:55
Расчёт S и P треугольника через его стороны и/или углы Matrix6993 Общие вопросы Delphi 6 23.02.2012 00:07
Замена длины слова его позицией Nezaam Помощь студентам 2 08.01.2011 11:29
Нужно отрисовать текст с левой стороны(LeftMargin) и сделать его вертикальным - Компонент RxLib Михаил Юрьевич Общие вопросы Delphi 1 08.08.2009 22:16
нарисовать квадрат с длиной стороны 100 пикселей, используя процедуру linerel(x,y:integer) Кася_ Помощь студентам 6 23.02.2009 19:13