Book of tasks on programming. Old version

 

 by Aliaksandr N. Prykhodzka

 

наследование, многомерный, компилятор, memory, pascal, sql, tasks, публикация, asm, div, функциональный, record, object, компилятор, выполнимый, destructor
 

for valuable work you must have JavaScript (allow active content)

Appendix. 13.1. How to draw spiral? (Паскаль. 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;

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

 

©   Aliaksandr Prykhodzka    1993 - 2007