562a Приложения. 10.1. Как нарисовать спираль? (Паскаль. Delphi 7.0). Сборник задач по программированию Александра Приходько
 

Сборник задач по программированию. Старая версия

 

 Приходько А. Н.

 

xml, file, объяснения, сервлет, язык программирования, пролог, образование, учебник, функция
 

Приложения. 10.1. Как нарисовать спираль? (Паскаль. Delphi 7.0)

Берется карандаш, нитка, лист бумаги. Один конец нитки привязывается к карандашу. Другой конец нитки прижимается пальцем к центру листа бумаги. Натягиваете нитку и начинается по кругу водить карандаш, не ослабляя натяжения нитки. При рисовании нитка накручивается на карандаш, непрервыно уменьшая радиус рисования. Как только карандаш остановится в центре листа, спираль будет нарисована.

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

Теперь попытаемся написать программу, которая рисует спираль.

Проанализируем, от каких параметров зависит процесс рисования спирали.

Во-первых, при движении по кругу угол наклона нитки меняется от 0 до 360 градусов и так несколько раз. Можно угол наклона менять от 0 до, например, 720 или 1080 и больше. 720 градусов это то же самое, что и 360, и то же самое, что и 0.

Во-вторых, длина нитки постоянно уменьшается (увеличивается).

В цикле будем перебирать угол наклона нитки в градусах и преобразовывать их в радианы (так в Delphi 7.0 требуют библиотеки вычисления синуса и косинуса). Радиан это 180 градусов, деленное на число Пи.

Также внутри цикла будет переменная для длины нитки, которая за каждый проход цикла будет увеличиваться на какое-нибудь значение.

По значению угла и длины нитки будем вычислять координаты x и y рисуемой точки.

...............

uses Math;

...............


procedure TForm1.Button1Click(Sender: TObject);
var
x, y, r, l, l2, i, k : integer;
a, b : Extended;
ff : real;
begin

Canvas.Brush.Color:=$00A0A0A0;
Canvas.Pen.Color:=$00A0A0A0;

r:=0; l:=0;

for k:=0 to 360*4 do begin

b:=k;
a:=cos(b*3.14159/180)*r/3;
b:=sin(b*3.14159/180)*r/3;
ff:=a;
x:=trunc(ff);
ff:=b;
y:=trunc(ff);

Canvas.Rectangle(400+x,400-y,400+x+2,400-y+2);

r:=r+1;

end;
end;

..............

 

©   Александр Приходько    1996 - 2006

69 0