562a
Сборник задач по программированию. Старая версия
|
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;
..............
|