Добавить материал и получить бесплатное свидетельство о публикации в СМИ
Эл. №ФС77-60625 от 20.01.2015
Инфоурок / Информатика / Конспекты / Построение многоугольников и примитивных объемных фигур в полярной системе координат
ВНИМАНИЮ ВСЕХ УЧИТЕЛЕЙ: согласно Федеральному закону № 313-ФЗ все педагоги должны пройти обучение навыкам оказания первой помощи.

Дистанционный курс "Оказание первой помощи детям и взрослым" от проекта "Инфоурок" даёт Вам возможность привести свои знания в соответствие с требованиями закона и получить удостоверение о повышении квалификации установленного образца (180 часов). Начало обучения новой группы: 26 апреля.

Подать заявку на курс
  • Информатика

Построение многоугольников и примитивных объемных фигур в полярной системе координат

библиотека
материалов


Построение многоугольников и примитивных объемных фигур в полярной системе координат


  1. Урок 1. Построение правильных выпуклых многоугольников.

  2. Урок 2. Построение правильных самопересекающихся многоугольников.

  3. Урок 3. Построение примитивных объемных фигур.


Идея построения выпуклых многоугольников вписанных в окружность проста. Для этого следует циркулем изобразить окружность, на ее дуге отметить минимум 3 точки и последовательно соединить эти точки прямыми линиями с помощью линейки. В случае равенства этих линий получаем правильные выпуклые многоугольники. Следует отметить, что окружность, построенная программой V2L05P1 и показанная на рис. 46 представляет собой правильный трехсот шестидесяти угольник.


Урок 1. Построение правильных выпуклых многоугольников

Правильным называется выпуклый многоугольник, все стороны и углы которого равны. Приведенная ниже программа позволяет это сделать (см. рис. 77 - 79). При этом необходимо отметить, что все коэффициенты следует вводить единицами.


Program V2L07P1; {Построение многоугольников в полярных координатах}

Uses Crt,Graph;

Var Gd,Gm,x,y,r,n,kk,ks:integer; i,rn,krk,krs:real;

{}

Procedure PoleGr; {Процедура формирования поля графика}

begin

SetFillStyle(1,15); {Стиль и цвет заполнения закрашенного прямоугольника}

Bar(220,140,420,340); {Построение закрашенного прямоугольника}

SetViewPort(220,140,420,340,False);

SetColor(7); {Установка цвета линий сетки}

{Цикл построения вертикальных линий сетки}

x:=0; {Начальное значение переменной шага сетки}

while x<=200 do

begin

Line(x,0,x,200); {Построение линии сетки}

x:=x+10 {Расчет шага сетки}

end;

{Горизонтальные линии сетки}

y:=0;

while y<=200 do

begin

Line(0,y,200,y);

y:=y+10

end;

{}

SetColor(0); {Цвет линий осей координат}

Line(0,100,200,100); {Ось абсцисс}

Line(100,0,100,200); {Ось ординат}

end;

{}

Procedure Dizine; {Процедура формирования дизайна графика}

begin

OutTextXY( 87, 106, '0');

SetColor(15); {Установка цвета следующих строк}

OutTextXY(106,- 10, 'Y');

OutTextXY(206, 90, 'X');

OutTextXY(205, 106,'100');

OutTextXY(-27, 0,'100');

OutTextXY(-37, 194,'-100');

OutTextXY(-37, 106,'-100');

end;

{}

begin

ClrScr;

{}

Write('Введи радиус окружности '); Read(r);

Write('Введи количество сторон многоугольника '); Read(n);

Write('Введи коэффициент при радиусе косинуса '); Read(krk);

Write('Введи коэффициент при радиусе синуса '); Read(krs);

Write('Введи коэффициент при аргументе косинуса '); Read(kk);

Write('Введи коэффициент при аргументе синуса '); Read(ks);

{Установка графического режима}

Gd:=Detect;

InitGraph(Gd,Gm,'c:\bp\bgi');

if GraphResult<>0 then Halt(1);

{}

PoleGr; {Вызов процедуры формирования поля графика}

{}

i:=-180; {Начальное значение аргумента функции}

rn:=i*Pi/180;

x:=100+Round(r*Cos(rn)); {Вычисление значения функции x}

y:=100-Round(r*Sin(rn)); {Вычисление значения функции y}

MoveTo(x,y); {Перемещение графического курсора в указанную коорд. точку}

{}

while i<=200 do {Цикл вычисления функции}

begin

rn:=i*Pi/180; {Пересчет градусной меры угла в радианную}

x:=100+Round(krk*r*Cos(kk*rn)); {Вычисление значения координаты x}

y:=100-Round(krs*r*Sin(ks*rn)); {Вычисление значения координаты y}

LineTo(x,y); {Построение отрезков кривой графика}

i:=i+360/n {Увеличение аргумента функции}

end;

{}

Dizine; {Вызов процедуры формирования дизайна графика}

{}

ReadKey;

CloseGraph;

end.


hello_html_4536c81b.pnghello_html_m77c3830b.pnghello_html_1f9e6747.png












Рис. 77. Правильный треугольник: Рис. 78. Правильный пятиугольник: Рис. 79. Правильный десятиугольник:

r = 80, n = 3, krk = 1, krs = 1, r = 80, n = 5, krk = 1, krs = 1, r = 80, n = 10, krk = 1, krs = 1,

kk = 1, ks = 1. kk = 1, ks = 1. kk = 1, ks = 1.


Урок 2. Построение правильных самопересекающихся многоугольников

Если стороны правильного многоугольника с числом сторон больше четырех продолжить до их пересечения, то можно получить правильный звездчатый многоугольник, а в программе V2L07P1, следуя подсказкам, ввести коэффициенты при аргументе синуса и косинуса, сумма которых должна быть равна количеству сторон многоугольника или кратна этому количеству.


hello_html_29aa002b.pnghello_html_133d346f.pnghello_html_m13fbf7ba.png











Рис. 80. Звездчатый пятиугольник, Рис. 81. Звездчатый десятиугольник, Рис. 82. Звездчатый десятиугольник,

вписанный в окружность: вписанный в окружность: вписанный в фигуру Лиссажу:

r = 80, n = 5, krk = 1, krs = 1, r = 80, n = 10, krk = 1, krs = 1, r = 30, n = 10, krk = 3, krs = 2,

kk = 2, ks = 3. kk = 3, ks = 7. kk = 3, ks = 2.

Урок 3. Построение примитивных объемных фигур

Задача получения объемного изображения на плоскости – перспектива, была решена художниками эпохи Возрождения: Филиппо Брунелевски (1377 - 1446), Леоном Батисто Альберти (1404 - 1472), Пьетро делла Франческа (1420 - 1492) и др.. Особое место среди них занимает Леонардо да Винчи (1452 - 1519), который сформулировал правила создания имитации пространства. По мере “удаления” от зрителя изображаемых на картине предметов с ними должно происходить:

  • уменьшение геометрических размеров (линейная перспектива);

  • изменение четкости изображения (контрастно – яркостная перспектива);

  • изменение цвета изображения на более светлый цвет (цветовая или воздушная перспектива).

Эти приемы используются в архитектуре с более точными правилами и геометрическими построениями. В машиностроении и приборостроении наряду с техническими рисунками и чертежами, которые показывают виды сторон деталей (сбоку, сверху, спереди), существуют объемные изображения этих деталей - аксонометрии, которые служат для облегчения чтения чертежа. В машиностроительном черчении эти изображения называются проекциями диметрической и изометрической, которые отличаются ракурсом и правилами их изображения на плоскости чертежа.

hello_html_m2afef879.gifСистема координат трехмерного изображения состоит из трех координат: X – абсцисса, Y – ордината и Z – аппликата (см. рис. 80).

hello_html_m1b0ca512.gifZ Z


hello_html_m5cb82625.gifhello_html_m5188231d.gif

hello_html_m4704d189.gifhello_html_m63ecd366.gif X



Y X Y


a) b)



Рис. 83. Аксонометрические проекции: a) диметрическая проекция (углы между осями X, Y = 135 и X, Z = 90 градусов), b) изометрическая проекция (углы между осями X, Y, Z = 120 градусов).


В изображении диметрической проекции размер по оси абсцисс уменьшается в два раза. По всем остальным осям берутся размеры с чертежа видов объекта. В изображении изометрической проекции размеры по осям координат не изменяются.

Алгоритм построения на экране дисплея примитивных объемных фигур: цилиндр, конус, усеченный конус, куб, параллелограмм, призма, пирамида, весьма прост. Для этого достаточно строить изображения окружности, куба, параллелепипеда, изменяя с каждой итерацией, координаты центра окружности, радиуса окружности и линейных размеров сторон параллелепипеда или куба. При этом будем получать “прозрачные” объемные фигуры.


Program V2L07P2; {Изображение ”прозрачного” цилиндра}

Uses Crt, Graph; {Вызов библиотечных модулей}

Var Gd, Gm,f :integer; {Определение целых переменных}

x,y,r,c,i,t,xz,yz,st,cz :word; {Определение целых переменных}

{}

begin

ClrScr; {Стирание экрана}

Write('Введи через пробел координаты X, Y центра окружности: ');

Read(x,y);

Write('Введи радиус окружности: ');Read(r);

Write('Введи код 0 -:-15 цвета линии окружности: ');Read(c);

Write('Введи код 3 толстой линии или любой другой - тонкая линия: ');Read(t);

Write('Введи через пробел координаты X, Y точки заполнения: ');Read(xz,yz);

Write('Введи 0 -:- 11 - код заполнения поверхности окружности: ');Read(st);

Write('Введи код 0 -:-15 цвета заполнения поверхности окружности: ');Read(cz);

{}

Gd:=0;Gm:=0; {Значения графического драйвера и модуля}

InitGraph(Gd,Gm,'c:\bp\bgi'); {Установка графического режима}

if GraphResult<>0 then Halt(1); {Проверка на ошибку инициализации}

SetLineStyle(0,0,t); {Установка толщины линии окружности}

i:=0; {Начальное значение переменной цикла}

f:=0; {Начальное значение флага}

while i<50 do {Цикл построения окружностей}

begin

SetColor(c); {Установка цвета линии окружности}

Circle(x-i,y+i,r); {Построение окружности}

if f=0 then

begin

SetFillStyle(st,cz); {Установка координат точки начала и цвета заполнения}

FloodFill(xz-i,yz+i,c); {Установка координат точки начала и цвета заполнения}

f:=1; {Установка флага}

end;

i:=i+5; {Шаг изменения координат центра окружностей}

end;

{}

ReadKey; {Задержка выполнения программы до нажатия любой клавиши клавиатуры}

CloseGraph {Закрытие графического режима}

end.

hello_html_m106a2151.png

Возможный результат работы программы

Введи через пробел координаты X, Y центра окружности: 320 240

Введи радиус окружности: 50

Введи код 0 -:-15 цвета линии окружности: 15

Введи код 3 толстой линии или любой другой - тонкая линия: 1

Введи через пробел координаты X, Y точки заполнения: 320 240

Введи 0 -:- 11 - код заполнения поверхности окружности: 1

Введи код 0 -:-15 цвета заполнения поверхности окружности: 5


Рис. 84. Изображение “прозрачного” цилиндра.


Для изображения “непрозрачного” цилиндра необходимо удалять части линий окружностей, которые не должны быть видны на изображении. Для этого сначала строится окружность одним (дополнительным) цветом её линии и заливается выбранным цветом, затем строится окружность другим (основным) цветом и заливается выбранным цветом. Это делается для того, чтобы заливка продолжалась до линии окружности основного цвета. Процесс повторяется необходимое количество раз.


Program V2L07P3; {Изображение ”непрозрачного” цилиндра}

Uses Crt, Graph; {Вызов библиотечных модулей}

Var Gd, Gm :integer; {Определение целых переменных}

x,y,r,c,i,t,xz,yz,st,cz :word; {Определение целых переменных}

{}

begin

ClrScr; {Стирание экрана}

Write('Введи через пробел координаты X, Y центра окружности: ');

Read(x,y);

Write('Введи радиус окружности: ');Read(r);

Write('Введи код 0 -:-15 цвета линии окружности: ');Read(c);

Write('Введи код 3 толстой линии или любой другой - тонкая линия: ');Read(t);

Write('Введи через пробел координаты X, Y точки заполнения: ');Read(xz,yz);

Write('Введи 0 -:- 11 - код заполнения поверхности окружности: ');Read(st);

Write('Введи код 0 -:-15 цвета заполнения поверхности окружности: ');Read(cz);

{}

Gd:=0;Gm:=0; {Значения графического драйвера и модуля}

InitGraph(Gd,Gm,'c:\bp\bgi'); {Установка графического режима}

if GraphResult<>0 then Halt(1); {Проверка на ошибку инициализации}

SetLineStyle(0,0,t);

i:=0; {Начальное значение переменной цикла}

while i<50 do {Цикл построения окружностей}

begin

SetColor(c-1); {Установка цвета линии окружности}

Circle(x-i,y+i,r); {Построение окружности}

SetFillStyle(st,cz); {Установка стиля и цвета заполнения поверхности окружности}

FloodFill(xz-i,yz+i,c-1); {Установка координат точки начала и цвета заполнения}

{}

SetColor(c); {Установка цвета линии окружности}

Circle(x-i,y+i,r); {Построение окружности}

SetFillStyle(st,cz); {Установка координат точки начала и цвета заполнения}

FloodFill(xz-i,yz+i,c); {Установка координат точки начала и цвета заполнения}

i:=i+5; {Шаг изменения координат центра окружностей}

end;

{}

ReadKey; {Задержка выполнения программы до нажатия любой клавиши клавиатуры}

CloseGraph {Закрытие графического режима}

end.


hello_html_2c796a81.pngВозможный результат работы программы

Введи через пробел координаты X, Y центра окружности: 320 240

Введи радиус окружности: 50

Введи код 0 -:-15 цвета линии окружности: 15

Введи код 3 толстой линии или любой другой - тонкая линия: 1

Введи через пробел координаты X, Y точки заполнения: 320 240

Введи 0 -:- 11 - код заполнения поверхности окружности: 1

Введи код 0 -:-15 цвета заполнения поверхности окружности: 5


Рис. 85. Изображение “непрозрачного” цилиндра.


Для изображения “непрозрачного” конуса, следует изменять не только координаты центра окружности, но радиус окружности с каждой итерацией цикла, что и происходит при работе нижеприведенной программы.


Program V2L07P4; {Изображение конуса с невидимыми линиями}

Uses Crt, Graph; {Вызов библиотечных модулей}

Var Gd, Gm :integer; {Определение целых переменных}

x,y,r,c,i,t,xz,yz,st,cz :word; {Определение целых переменных}

{}

begin

ClrScr; {Стирание экрана}

Write('Введи через пробел координаты X, Y центра окружности: ');

Read(x,y);

Write('Введи радиус окружности: ');Read(r);

Write('Введи код 0 -:-15 цвета линии окружности: ');Read(c);

Write('Введи код 3 толстой линии или любой другой - тонкая линия: ');Read(t);

Write('Введи через пробел координаты X, Y точки заполнения: ');Read(xz,yz);

Write('Введи 0 -:- 11 - код заполнения поверхности окружности: ');Read(st);

Write('Введи код 0 -:-15 цвета заполнения поверхности окружности: ');Read(cz);

{}

Gd:=0;Gm:=0; {Значения графических драйвера и модуля}

InitGraph(Gd,Gm,'c:\bp\bgi'); {Установка графического режима}

if GraphResult<>0 then Halt(1); {Проверка на ошибку инициализации}

SetLineStyle(0,0,t);

i:=0; {Начальное значение переменной цикла}

while i<50 do {Цикл построения окружностей}

begin

SetColor(c-1); {Установка цвета линии окружности}

Circle(x-i,y+i,r-i); {Построение окружности. С каждой итерацией цикла радиус уменьшается}

SetFillStyle(st,cz); {Установка стиля и цвета заполнения поверхности окружности}

FloodFill(xz-i,yz+i,c-1); {Установка координат точки начала и цвета заполнения}

{}

SetColor(c); {Установка цвета линии окружности}

Circle(x-i,y+i,r-i); {Построение окружности. С каждой итерацией цикла радиус уменьшается}

SetFillStyle(st,cz); {Установка координат точки начала и цвета заполнения}

FloodFill(xz-i,yz+i,c); {Установка координат точки начала и цвета заполнения}

i:=i+5; {Шаг изменения координат центра окружностей}

end;

{}

ReadKey; {Задержка выполнения программы до нажатия любой клавиши клавиатуры}

CloseGraph {Закрытие графического режима}

end.

hello_html_738aac93.pngВозможный результат работы программы

Введи через пробел координаты X, Y центра окружности: 320 240

Введи радиус окружности: 50

Введи код 0 -:-15 цвета линии окружности: 15

Введи код 3 толстой линии или любой другой - тонкая линия: 1

Введи через пробел координаты X, Y точки заполнения: 320 240

Введи 0 -:- 11 - код заполнения поверхности окружности: 1

Введи код 0 -:-15 цвета заполнения поверхности окружности: 5


Рис. 86. Изображение “непрозрачного” конуса.


Если основанием объемной фигуры будет прямоугольник, правильный или неправильный многоугольник, то, используя вышеприведенные программы V2L07P3 и V2L07P4, можно получить призму или пирамиду. Для чего в программы следует внести коррекцию, которую авторы доверяют читателю.

Если радиус окружности менять по нелинейному закону, то получаем примитивные изображения фигур вращения .


Program V2L07P5; {Изображение фигур с нелинейным изменением радиуса окружности}

Uses Crt, Graph; {Вызов библиотечных модулей}

Var Gd, Gm :integer; {Определение целых переменных}

x,y,r,c,t,xz,yz,st,cz :word; {Определение целых переменных}

g,rn,rtf:real;

{}

begin

ClrScr; {Стирание экрана}

Write('Введи через пробел координаты X, Y центра окружности: ');

Read(x,y);

Write('Введи радиус окружности: ');Read(r);

Write('Введи код 0 -:-15 цвета линии окружности: ');Read(c);

Write('Введи код 3 толстой линии или любой другой - тонкая линия: ');Read(t);

Write('Введи через пробел координаты X, Y точки заполнения: ');Read(xz,yz);

Write('Введи 0 -:- 11 - код заполнения поверхности окружности: ');Read(st);

Write('Введи код 0 -:-15 цвета заполнения поверхности окружности: ');Read(cz);

{}

Gd:=0;Gm:=0; {Значения графического драйвера и модуля}

InitGraph(Gd,Gm,'c:\bp\bgi'); {Инициализация графического режима}

if GraphResult<>0 then Halt(1); {Проверка на ошибку инициализации}

SetLineStyle(0,0,t); {Установка типа линии окружности}

g:=0.0; {Начальное значение переменной цикла}

while g<180 do {Цикл построения окружностей}

begin

rn:=g*Pi/180; {Пересчет градусной меры угла в радианную}

rtf:=Abs(r*Sin(2*rn)); {Расчет радиуса как тригонометрической функции}

SetColor(c-1); {Установка цвета линии окружности}

Circle(Round(x-g),Round(y+g),Round(rtf)); {Построение окружности}

SetFillStyle(st,cz); {Установка стиля и цвета заполнения поверхности окружности}

FloodFill(Round(xz-g),Round(yz+g),c-1); {Установка координат начала цвета заполнения}

{}

SetColor(c); {Установка цвета линии окружности}

Circle(Round(x-g),Round(y+g),Round(rtf)); {Построение окружности}

SetFillStyle(st,cz); {Установка координат точки начала и цвета заполнения}

FloodFill(Round(xz-g),Round(yz+g),c); {Установка координат начала цвета заполнения}

g:=g+2.5; {Шаг изменения координат центра окружностей}

end;

{}

ReadKey; {Задержка выполнения программы до нажатия любой клавиши клавиатуры}

CloseGraph {Закрытие графического режима}

end.


hello_html_m16dcfcc3.png

Возможный результат работы программы

Введи через пробел координаты X, Y центра окружности: 320 240

Введи радиус окружности: 50

Введи код 0 -:-15 цвета линии окружности: 15

Введи код 3 толстой линии или любой другой - тонкая линия: 1

Введи через пробел координаты X, Y точки заполнения: 320 240

Введи 0 -:- 11 - код заполнения поверхности окружности: 1

Введи код 0 -:-15 цвета заполнения поверхности окружности: 5



Рис. 87. Изображение объемной фигуры, радиус которой меняется по синусоидальному закону.


Объемные аналогичные изображения могут быть получены при нелинейном изменении размеров основания фигур, которые не являются окружностями.


Контрольные вопросы и упражнения

  1. Что называется аксонометриями?

  2. Назовите правила построения пространственного изображения?

  3. Попробуйте вписать звездчатый многоугольник в N-лепестковую розу.

  4. Расскажите, как получить непрозрачное изображение примитивной объемной фигуры?

  5. Используя приемы, которые используются в программе V2L05P11, попробуйте “изобрести ” необычные объемные фигуры.


Для заметок, ответов на вопросы и упражнения



Краткое описание документа:

Использование полярных координат в построении плоских изображений графиков сложных функций, а также материал, излагающий алгоритмы и приемы построения объемных изображений, которые по простоте их получения и форме автор назвал примитивными.Подобная тема практически не представлена в литературе по программированию на TurboPascal.

Занятие строятся таким образом, что после прослушивания теоретического материала (10 –15 мин.), учащимся предлагается несложное практическое задание, которое выполняется ими за 20 - 30 мин. и корректируется в процессе изучения материала в более сложную задачу по изучаемой теме,занятие иллюстрируется необходимым количеством задач по изучаемой теме и примеров программ их решения.

 

Автор
Дата добавления 17.11.2014
Раздел Информатика
Подраздел Конспекты
Просмотров530
Номер материала 117256
Получить свидетельство о публикации

"Инфоурок" приглашает всех педагогов и детей к участию в самой массовой интернет-олимпиаде «Весна 2017» с рекордно низкой оплатой за одного ученика - всего 45 рублей

В олимпиадах "Инфоурок" лучшие условия для учителей и учеников:

1. невероятно низкий размер орг.взноса — всего 58 рублей, из которых 13 рублей остаётся учителю на компенсацию расходов;
2. подходящие по сложности для большинства учеников задания;
3. призовой фонд 1.000.000 рублей для самых активных учителей;
4. официальные наградные документы для учителей бесплатно(от организатора - ООО "Инфоурок" - имеющего образовательную лицензию и свидетельство СМИ) - при участии от 10 учеников
5. бесплатный доступ ко всем видеоурокам проекта "Инфоурок";
6. легко подать заявку, не нужно отправлять ответы в бумажном виде;
7. родителям всех учеников - благодарственные письма от «Инфоурок».
и многое другое...

Подайте заявку сейчас - https://infourok.ru/konkurs


Выберите специальность, которую Вы хотите получить:

Обучение проходит дистанционно на сайте проекта "Инфоурок".
По итогам обучения слушателям выдаются печатные дипломы установленного образца.

ПЕРЕЙТИ В КАТАЛОГ КУРСОВ


Идёт приём заявок на международный конкурс по математике "Весенний марафон" для учеников 1-11 классов и дошкольников

Уникальность конкурса в преимуществах для учителей и учеников:

1. Задания подходят для учеников с любым уровнем знаний;
2. Бесплатные наградные документы для учителей;
3. Невероятно низкий орг.взнос - всего 38 рублей;
4. Публикация рейтинга классов по итогам конкурса;
и многое другое...

Подайте заявку сейчас - https://urokimatematiki.ru

Похожие материалы

Включите уведомления прямо сейчас и мы сразу сообщим Вам о важных новостях. Не волнуйтесь, мы будем отправлять только самое главное.
Специальное предложение
Вверх