мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| tasks:snezhinka [16/11/2016 02:28] – создано ybezrukov | tasks:snezhinka [16/11/2016 08:53] (текущий) – ybezrukov | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ====== Часть первая ====== | ====== Часть первая ====== | ||
| - | Требуется нарисовать шесть линий под углом $60^\circ$ друг с другом. Для облегчения расчетов перейдем в полярную систему координат (так как в ней естественным образом делается поворот). В полярной системе координата точки задается так же двумя числами, | + | Требуется нарисовать шесть линий под углом $60^\circ$ друг с другом. Для облегчения расчетов перейдем в полярную систему координат (так как в ней естественным образом делается поворот). В полярной системе координата точки задается так же двумя числами, |
| {{: | {{: | ||
| Строка 24: | Строка 24: | ||
| + | С использованием полярных координат поворот линии выполняется с помощью следующего алгоритма: | ||
| + | - Перевести координаты конца линии из декартовых в полярные полярные | ||
| + | - Компоненте к углу $\phi$ добавить $60^\circ$. | ||
| + | - Перевести координаты конца обратно из полярных в декартовые | ||
| + | - Нарисовать линию на экран | ||
| + | |||
| + | |||
| + | <code pascal> | ||
| + | |||
| + | users oglgraph, crt, math; | ||
| + | |||
| + | type point = record | ||
| + | x, | ||
| + | end; | ||
| + | |||
| + | var | ||
| + | gd, gm: smallint; | ||
| + | p_nach: | ||
| + | p_konech: | ||
| + | x_centr, y_centr: | ||
| + | |||
| + | function dec2pol(p: | ||
| + | begin | ||
| + | dec2pol.x = p.x; | ||
| + | dec2pol.y = p.y; | ||
| + | dec2pol.r = sqrt(sqr(p.x) + sqr(p.y)); | ||
| + | dec2pol.phi = arccos(p.x/ | ||
| + | end; | ||
| + | |||
| + | function pol2dec(x: | ||
| + | begin | ||
| + | // | ||
| + | end; | ||
| + | |||
| + | begin | ||
| + | gd := Detect; | ||
| + | gm := DetectMode; | ||
| + | initgraph(gd, | ||
| + | | ||
| + | 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. | ||
| + | </ | ||