Часть первая

Требуется нарисовать шесть линий под углом друг с другом. Для облегчения расчетов перейдем в полярную систему координат (так как в ней естественным образом делается поворот). В полярной системе координата точки задается так же двумя числами, однако суть их несколько другая. Выбирается некоторое направление (Ox на рисунке), на нем начальная точка (начало координат в нашем случае). От направления отсчитывается угол , а от точки длина вектора . Эта новая пара чисел и будет задавать координаты точки.

Между привычной декартовой и полярной системами координат можно перейти с помощью следующих формул:

$$

С использованием полярных координат поворот линии выполняется с помощью следующего алгоритма:

Перевести координаты конца линии из декартовых в полярные полярные

Компоненте к углу добавить .

Перевести координаты конца обратно из полярных в декартовые

Нарисовать линию на экран

users oglgraph, crt, math; type point = record x,y,r,phi:real; end; var gd, gm: smallint; p_nach:point; // центр снежинки, он будет неподвижен p_konech:point; // конец снежинки, его координата будет меняться x_centr, y_centr:integer; // координаты центра экрана function dec2pol(p:point):point; begin dec2pol.x = p.x; dec2pol.y = p.y; dec2pol.r = sqrt(sqr(p.x) + sqr(p.y)); dec2pol.phi = arccos(p.x/dec2pol.r); end; function pol2dec(x:point):point; begin //реализовать самостоятельно end; begin gd := Detect; gm := DetectMode; initgraph(gd, gm, ''); x_centr := getmaxx div 2; // найдем центр снежинки y_centr := getmaxy div 2; p_nach.x := 0; // зададим координаты центра снежинки p_nach.y := 0; p_konech.x := 0; // и конца ее первого луча, пусть он будет вертикальный p_konech.y := 200; line(round(p_nach.x) + x_centr, round(p_nach.y) + y_centr, round(p_konech.x) + x_centr, round(p_konech.y) + y_centr); // нарисуем первую линию снежинки for i := 1 to 5 do begin // реализовать самостоятельно отрисовку остальных линий снежинки end; repeat until graphkeypressed; closegraph; end.