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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2011, 14:20   #1
spz
Новичок
Джуниор
 
Регистрация: 10.02.2011
Сообщений: 1
По умолчанию Вписанные шестиугольники на паскале.

Добрый день. Имеется задача, которая немного мне надоела, но все же ее надо сделать, ибо все кроме нее уже сданы.
Непосредственно сама задача:

Начертить узор, составленный из шестиугольников. Узор образован 20 вложенными шестиугольниками. Стороны первого шестиугольника параллельны осям координат экрана и равны 60. Вершины каждого последующего шестиугольника - это точки на сторонах квадрата, делящие эти стороны в отношении н(Ню)=0.08

Я ее почти сделал, но не могу реализовать один момент. А именно сделать так, чтобы шестиугольники поворачивались.

Вот код, который написал я:
Код:
program LR8;
 
uses
  graphABC;
 
type
  mas = array[1..6] of real;
 
var
  driver, mode: integer;    
  R, NachX, NachY: integer;
  x, y: mas;
  Cx, Cy, i: integer;
  dx, dy: real;
 
procedure Drow(var x, y: mas);
begin
  Line(trunc(x[1]), trunc(y[1]), trunc(x[2]), trunc(y[2]));
  Line(trunc(x[2]), trunc(y[2]), trunc(x[3]), trunc(y[3]));
  Line(trunc(x[3]), trunc(y[3]), trunc(x[4]), trunc(y[4]));
  Line(trunc(x[4]), trunc(y[4]), trunc(x[5]), trunc(y[5]));
  Line(trunc(x[5]), trunc(y[5]), trunc(x[6]), trunc(y[6]));
  Line(trunc(x[6]), trunc(y[6]), trunc(x[1]), trunc(y[1]));
end;
 
begin
  Cx := 300;
  Cy := 200;
  R := 120;
  x[1] := Cx + R;           y[1] := Cy;
  x[2] := Cx + R * cos(pi / 3); y[2] := Cy - R * sin(pi / 3);
  x[3] := Cx - R * cos(pi / 3); y[3] := Cy - R * sin(pi / 3);
  x[4] := Cx - R;           y[4] := Cy;
  x[5] := Cx - R * cos(pi / 3); y[5] := Cy + R * sin(pi / 3);
  x[6] := Cx + R * cos(pi / 3); y[6] := Cy + R * sin(pi / 3);
  for i := 1 to 100 do
  begin
    drow(x, y);    
    Dx := R * (1 - 1 / 1.08) * cos(pi / 3);
    Dy := R * (1 - 1 / 1.08) * sin(pi / 3);  
    x[1] := Cx + R - dx;           y[1] := Cy - dy;
    x[2] := Cx + R * cos(pi / 3) - dx; y[2] := Cy - R * sin(pi / 3);
    x[3] := Cx - R * cos(pi / 3) - dx; y[3] := Cy - R * sin(pi / 3) + dy;
    x[4] := Cx - R + dx;           y[4] := Cy + dy;
    x[5] := Cx - R * cos(pi / 3) + dx; y[5] := Cy + R * sin(pi / 3);
    x[6] := Cx + R * cos(pi / 3) + dx; y[6] := Cy + R * sin(pi / 3) - dy;
    R := Trunc(R * sqrt(Sqr(1 - 1 / 1.08) + 1 / 1.08));
  end;
end.
Если есть предложения или новые идеи, буду очень рад их услышать. )
spz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БД на паскале che91 Паскаль, Turbo Pascal, PascalABC.NET 5 04.09.2011 20:12
на паскале ddeman666 Помощь студентам 0 30.05.2010 01:10
на паскале ddeman666 Помощь студентам 0 19.04.2010 22:56
15 в Паскале Batonchik Паскаль, Turbo Pascal, PascalABC.NET 11 08.04.2009 15:20
привет всем! помогите пожалуйста решить две задачи на паскале. я в паскале полный ноль. Пищенок Саша Паскаль, Turbo Pascal, PascalABC.NET 5 20.01.2009 13:46