мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
tasks:snezhinka [16/11/2016 02:28] – создано ybezrukovtasks:snezhinka [16/11/2016 08:53] (текущий) ybezrukov
Строка 1: Строка 1:
 ====== Часть первая ====== ====== Часть первая ======
  
-Требуется нарисовать шесть линий под углом $60^\circ$ друг с другом. Для облегчения расчетов перейдем в полярную систему координат (так как в ней естественным образом делается поворот). В полярной системе координата точки задается так же двумя числами, однако суть их несколько другая. Выбирается некоторое направление, на нем начальная точка. От направления отсчитывается угол $\phi$, а от точки длина вектора $\rho$. Эта новая пара числе и будет задавать координаты точки.+Требуется нарисовать шесть линий под углом $60^\circ$ друг с другом. Для облегчения расчетов перейдем в полярную систему координат (так как в ней естественным образом делается поворот). В полярной системе координата точки задается так же двумя числами, однако суть их несколько другая. Выбирается некоторое направление (Ox на рисунке), на нем начальная точка (начало координат в нашем случае). Координаты точки задаются парой чисел: расстоянием $\rho$ до выбранной точки и углом $\phi$ между этим отрезком $\rho$ и выбранным направлением Ох.
  
 {{:tasks:poljarnye_ris.jpg?200|}} {{:tasks:poljarnye_ris.jpg?200|}}
Строка 24: Строка 24:
  
  
 +С использованием полярных координат поворот линии выполняется с помощью следующего алгоритма: 
  
 +  - Перевести координаты конца линии из декартовых в полярные полярные
 +  - Компоненте к углу $\phi$ добавить $60^\circ$.
 +  - Перевести координаты конца обратно из полярных в декартовые
 +  - Нарисовать линию на экран
 +
 +
 +<code pascal>
 +
 +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.
 +</code>