Цветовая схема:
C C C C
Шрифт
Arial Times New Roman
Размер шрифта
A A A
Кернинг
1 2 3
Изображения:
  • ХМАО - Югра, г. Нижневартовск
  • +7 (904) 483-50-68
  • sammitportal@mail.ru

10В класс: Информатика от 14.05.2020

10В класс: Информатика от 14.05.2020

10класс.jpg
На одном из прошлых уроков мы строили графики функций. А как мы заставляли точку двигаться по синусоиде? Создавали цикл, в котором координата Х точки изменялась как параметр цикла, а координата Y точки менялась как синус от Х. А если координату Х заставить изменяться с использованием функции COS от параметра цикла? Если вы хорошо знаете математику, то должны догадаться, что точка будет двигаться по окружности.
Для эксперимента давайте возьмем программу-образец для построения графиков функций, поставим в цикл окружность, у которой координаты центра Х и Y зависят от SIN и COS.
Program planeta;
 Uses Graph;
 Var Gd, Gm : SmaLLInt;
 x, A, B, C: integer;
Begin
 Gd:=Detect;
 InitGraph(Gd,Gm,'');
 A:=100;
 B:=80;
 C:=20;
 for x:= 0 to 1000 do Circle(round(A*cos(x/B))+GetMaxX div 2, round(A*sin(x/B))+GetMaxY div 2,14);
 Readln;
 CloseGraph;
End.  
[spoiler]В результате работы программы мы получим окружность вращающуюся вокруг центра экрана.

4.jpg
А как сделать так, чтобы окружность не оставляла след? Это стандартное действие для анимации: прежде чем нарисовать объект в новой позиции нужно его удалить из старой. Можно конечно сразу после нарисованной нами окружности установить черный цвет и заново нарисовать такую же окружность, но окружность будет исчезать очень быстро. Лучше, если мы стирающую окружность (рисуется цветом 0 в координате х-1) будем рисовать в начале цикла, а рисующую за ней.
Program planeta;
 Uses Graph;
 Var Gd, Gm : SmaLLInt;
 x, A, B, C: integer;
Begin
 Gd:=Detect;
 InitGraph(Gd,Gm,'');
 A:=100;
 B:=80;
 C:=20;
 for x:= 0 to 1000 do begin
   Setcolor (0);
   Circle(round(A*cos((x-1)/B))+GetMaxX div 2, round(A*sin((x-1)/B))+GetMaxY div 2,14);
   Setcolor (14);
   Circle(round(A*cos(x/B))+GetMaxX div 2, round(A*sin(x/B))+GetMaxY div 2,14);
 end;
 Readln;
 CloseGraph;
End.  
При выполнении наблюдается большое мерцания, связанное с высокой скоростью движения. Как замедлить процесс? Есть процедура DELAY(Z), это задержка на Z миллисекунд. Данная процедура находится в модуле CRT, который нужно не забыть открыть.
Program planeta;
 Uses Graph, CRT;
 Var Gd, Gm : SmaLLInt;
 x, A, B, C: integer;
Begin
 Gd:=Detect;
 InitGraph(Gd,Gm,'');
 A:=100;
 B:=80;
 C:=20;
 for x:= 0 to 1000 do begin
   Setcolor (0);
   Circle(round(A*cos((x-1)/B))+GetMaxX div 2, round(A*sin((x-1)/B))+GetMaxY div 2,14);
   Setcolor (14);
   Circle(round(A*cos(x/B))+GetMaxX div 2, round(A*sin(x/B))+GetMaxY div 2,14);
   delay(50);
 end;
 Readln;
 CloseGraph;
End. 
А вот теперь и задание на урок: создать модель фрагмента Солнечной системы.

Уровень А: Венера вращается вокруг Солнца по часовой стрелке.


1.jpg
Уровень В: Венера (по часовой стрелке) и Земля (против часовой стрелки) вращаются вокруг Солнца.
2.jpg  
Уровень С: Венера (по часовой стрелке), Земля (против часовой стрелки) вращаются вокруг Солнца. Луна вращается вокруг Земли.
3.jpg  
Нравится0
17 мая 2020 20:10:33
Сидоров Никита.
Единственное, что не смог для себя понять - почему Венера мерцает? Из-за проги или кода?



program sunsystem;




                       {Сидоров Никита, солнечная система}




uses graph, crt;
var Gd, Gm: smallint;
a, b, c, d, e: integer;
begin
Gd:= detect;
initgraph(Gd,Gm,'');
setcolor(0); setfillstyle(1, 14);
fillellipse(getmaxx div 2, getmaxy div 2, 50, 50);
a:= 100; b:= 60; c:= 150; d:= 25;
for e:= 0 to 1000 do begin
setfillstyle(1, 0);
fillellipse(round(a * cos((e - 1)/b)) + getmaxx div 2, round(a * sin((e - 1)/b)) + getmaxy div 2, 15, 15);
fillellipse(round(d * (cos((-e + 1)/b)) + round(c * (cos((-e + 1)/b))) + getmaxx div 2), round(d * sin((-e + 1)/b)) + round(c * sin((-e + 1)/b)) + getmaxy div 2, 5, 5);
setcolor(0); setfillstyle(1, 6);
fillellipse(round(a * cos(e/b)) + getmaxx div 2, round(a * sin(e/b)) + getmaxy div 2, 15, 15);
setfillstyle(1, 9); setfillstyle(1, 7);
delay(50);
end;
readln;
closegraph;
end.      
Ответить Ссылка Нравится0
Нравится0
18 мая 2020 01:31:37
Евгений Чернов
Program ChernovGR8;
Uses Graph, CRT;
Var Gd, Gm : SmaLLInt;
x, A, B, C, B1, A1, B2, A2: integer;
Begin
Gd:=Detect;
InitGraph(Gd,Gm,'');
A:=100;
B:=80;
C:=20;
B1:=-80;
A1:=170;
B2:=80;
A2:=250;
setcolor(0);
SetFillStyle(1, 14);
FillEllipse(GetMaxX div 2, GetMaxY div 2, 50, 50);
for x:= 0 to 1000 do begin
  setcolor(0);
  Setfillstyle(1,0);
  Fillellipse(round(A*cos((x-1)/B))+GetMaxX div 2, round(A*sin((x-1)/B))+GetMaxY div 2,14,14);
  setfillstyle(1,8) ;
  Fillellipse(round(A*cos(x/B))+GetMaxX div 2, round(A*sin(x/B))+GetMaxY div 2,14,14);






  setcolor(0);
   Setfillstyle(1,0);
   Fillellipse(round(A1*cos((x-1)/B1))+GetMaxX div 2, round(A1*sin((x-1)/B1))+GetMaxY div 2,25,25);
   setfillstyle(1,6) ;
   Fillellipse(round(A1*cos(x/B1))+GetMaxX div 2, round(A1*sin(x/B1))+GetMaxY div 2,25,25);






   setcolor(0);
   Setfillstyle(1,0);
   Fillellipse(round(A2*cos((x-1)/B2))+GetMaxX div 2, round(A2*sin((x-1)/B2))+GetMaxY div 2,25,25);
   setfillstyle(1,3) ;
   Fillellipse(round(A2*cos(x/B2))+GetMaxX div 2, round(A2*sin(x/B2))+GetMaxY div 2,25,25);

   delay(70);

end;






Readln;
CloseGraph;
End.
Ответить Ссылка Нравится0