Общий алгоритм рисования вращающихся "непрозрачных" 3 мерных фигур


Алгоритмы закрашивания

Читайте также:

  1. Алгоритмы
  2. Алгоритмы
  3. Алгоритмы STA
  4. Алгоритмы алгебраического сложения в обратном и дополнительном коде
  5. Алгоритмы архивации с потерями, проблемы алгоритмов архивации с потерями. Основные идеи алгоритмов JPEG, фрактальный, волновой.
  6. Алгоритмы быстрого умножения чисел
  7. Алгоритмы в компьютере. Формат машинной команды.
  8. Алгоритмы вывода прямой линии
  9. Алгоритмы деления
  10. Алгоритмы замещения
  11. Алгоритмы и способы записи алгоритмов, свойства и виды алгоритмов.

Будем считать фигурой плоский геометрический объект, который состоит из линий контура и точек внутри него. В общем виде алгоритм закрашивания произвольного контура, который уже нарисован в растре, предполагает выполнение следующих действий:

– находим пиксел внутри контура фигуры;

– цвет этого пиксела изменяем на нужный цвет заполнения;

– производим анализ соседних пикселов;

– если цвет некоторого соседнего пиксела не равен цвету границы контура или цвету заполнения, то цвет этого пиксела изменяется на цвет заполнения;

– анализируем цвет пикселов, соседних с предыдущим. Продолжаем этот процесс, до тех пор, пока внутри контура все пикселы не перекрасятся в цвет заполнения.

Простейший алгоритм закрашивания. Для всех алгоритмов закрашивания необходимо задавать начальную точку с координатами x, y внутри контура. Простейший алгоритм может быть описан следующим образом [21, 24].

Процедура Закрасить(x,y) описана в виде:

если цвет пиксела (x,y) не равен цвету границы, то

установить для пиксела (x,y) цвет заполнения;

Такое определение процедуры является рекурсивным. Рекурсия позволяет упростить запись некоторых алгоритмов.

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

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

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

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

Заполнение полигона. Контур полигона (в векторной форме) определяется вершинами, которые соединены отрезками прямых (рис. 9.6).

Один из наиболее популярных алгоритмов заполнения полигона заключается в закрашивании фигуры отрезками прямых горизонтальных линий. Алгоритм представляет собою цикл вдоль оси y, в ходе этого цикла выполняется поиск точек сечения линии контура с соответствующими горизонталями. Этот алгоритм имеет вид:

2. Выполнить цикл по y от y=min до y=max:

3. Найти точки пересечения всех отрезков контура с горизонталью y;

4. Координаты xj точек сечения записать в массив;

5. Отсортировать массив j> по возрастанию x;

6. Вывести горизонтальные отрезки с координатами

Каждый отрезок выводится цветом заполнения.

В этом алгоритме использовано свойство топологии контура фигуры. Оно состоит в том, что любая прямая линия пересекает любой замкнутый контур четное число раз. Для выпуклых фигур существуют ровно две точки пересечения с любой прямой. Таким образом, на шаге 4 этого алгоритма в массив <xj> всегда должно записываться парное число течек сечения.

При нахождении точек пересечения горизонтали с контуром необходимо принимать во внимание особые точки. Если горизонталь имеет координату y, совпадающую с yi вершины Pi, тогда надлежит анализировать то, как горизонталь проходит через вершину. Если горизонталь при этом пересекает контур (как, например, в вершинах P или P4), то в массив записывается одна точка сечения. Если горизонталь касается вершины контура (в этом случае вершина соответствует локальному минимуму или максимуму, как, например, в вершинах P1, P2, P3 или P5), тогда координата точки касания или не записывается, или записывается в массив два раза. Это условие четности числа количества точек пересечения, хранящихся в массиве <xj>.

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

Для определения координат (x) точек пересечения для каждой горизонтали необходимо перебрать все n отрезков контура. Координаты пересечения отрезка pi-pk с горизонталью равны:

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

9.3. Сглаживание ступенчатости линий на изображении


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

Идеализированный образ математической линии имеет постоянную толщину (1 единицу). Такой образ построить невозможно. В чистом виде алгоритм Брезенхема предполагает, что за каждый шаг перемещения по оси x засвечивается только один пиксел. Но можно поступить по другому – засвечивать те пикселы, которые частично перекрываются идеальным образом линии, но задавать им не полную интенсивность, а частичную, пропорциональную степени перекрытия [24].

Контрольные вопросы и задания

1. В чем принцип алгоритма ЦДА?

2. За счет чего достигается быстродействие в алгоритме Брезенхема?

3. Какими способами осуществляется закраска областей?

4. Как устраняется ступенчатость на изображении в системах компьютерной графики?

Дата добавления: 2015-04-25 ; Просмотров: 2611 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Алгоритмы закрашивания

Рассмотрим алгоритмы закрашивания произвольного контура, который уже нарисован в растре. Сначала определяются координаты произвольного пиксела, находящегося внутри очерченного контура фигуры. Цвет этого пиксела изменяем на нужный цвет заполнения. Потом проводится анализ цветов всех соседних пикселов. Если цвет некоторого соседнего пиксела не равен цвету границы контура или цвету заполнения, то цвет этого пиксела изменяется на цвет заполнения. Потом анализируется цвет пикселов, соседних с предшествующими. И так далее, пока внутри контура все пикселы не перекрасятся в цвет заполнения.

Пикселы контура образуют границу, за которую нельзя выходить в ходе последовательного перебора всех соседних пикселов. Соседними могут считаться только четыре пиксела (сосед справа, слева, сверху и снизу — четырехсвязность), или восемь пикселов (восьми-связность). Не всякий контур может считаться границей закрашивания, например, для восьмисвязного алгоритма (рис. 3. 36).

Рис. 3.36.Особенности восьмисвязного закрашивания — выход за границу контура на следующих

Простейший алгоритм закрашивания. Для всех алгоритмов закрашивания нужно задавать начальную точку внутри контура с координатами х, у. Простейший алгоритм можно описать всего двумя шагами.

Алгоритм закрашивания линиями. Данный алгоритм получил широкое распространение в компьютерной графике. От приведенного выше простейшего алгоритма он отличается тем, что на каждом шаге закрашивания рисуется горизонтальная линия, которая размещается между пикселами контура. Алгоритм также рекурсивный, но поскольку вызов функции осуществляется для линии, а не для каждого отдельного пиксела, то количество вложенных вызовов уменьшается пропорционально длине линии. Это уменьшает нагрузку на стековую память компьютера и обеспечивает высокую скорость работы.

Пример работы алгоритма закрашивания линиями приведен на рис 3. 37.

Рис. 3.37. Количество циклов LineFill

Алгоритмы заполнения, которые используют математическое описание контура

Математическим описанием контура фигуры может служить уравнение у =f(x) для контypa окружности, эллипса или другой кривой. Для многоугольника (полигона) контур задается множеством координат вершин (хi, уi). Возможны идругие формы описания контура. Общим для рассматриваемых ниже алгоритмов есть то, что для генерации точек заполнения не нужны предварительно сформированные в растре пикселы границы контура фигуры. Контур может вообще не рисоваться в растре ни до, ни после заполнения.

Рис. 3.38. Заполнение прямоугольника

Заполнение прямоугольников.Среди всех фигур прямоугольник заполнять наиболее просто. Если прямоугольник задан координатами противоположных углов, например, левого верхнего (х1, у1) и правого нижнего (х2, у2), тогда алгоритм может состоять в последовательном рисовании горизонтальных линий заданного цвета (рис. 3. 38).

Заполнение круга.Для заполнения круга можно использовать алгоритм вывода контура. В процессе выполнения этого алгоритма последовательно вычисляются координаты пикселов контура в границах одного октанта. Для заполнения следует выводить горизонтали, которые соединяют пары точек на контуре, расположенные симметрично относительно оси y (рис. 3.39, слева).

Так же можно создать и алгоритм заполнения эллипса.

Заполнение полигонов.Контур полигона определяется вершинами, которые соединены отрезками прямых — ребрами (рис. 3.39, справа). Это — векторная форма описания фигуры.

Рассмотрим один из наиболее популярных алгоритмов заполнения полигона. Его основная идея — закрашивание фигуры отрезками прямых линий. Удобней использовать горизонтали. Алгоритм представляет собою цикл вдоль оси у, в ходе этого цикла выполняется поиск точек пересечения линии контура с соответствующими горизонталями. Этот алгоритм получил название XY .

Илон Маск рекомендует:  sscanf - Разбирает строку в соответствии с заданным форматом

Рис. 3.39. Заполнение круга Пример полигона

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

Рис. 3.40. Заполнение полигона

При нахождении точек пересечения горизонтали с контуром необходимо принимать во внимание особые точки. Если горизонталь имеет координату (у), совпадающую с координатой yi вершины Рi тогда надлежит анализировать то, как горизонталь проходит через вершину. Если горизонталь при этом пересекает контур, как, например, в вершинах Р ли Р4, то в массив записывается одна точка пересечения. Если горизонталь касается вершины контура (в этом случае вершина соответствует локальному минимуму или максимуму, как, например, в вершинах Р1, Р2, Р3 или Р5), тогда координата точки касания или Не записывается, или записывается в массив два раза. Это является условием четного количества точек пересечения, хранящихся в массиве j>.

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

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

Для определения координат (х) точек пересечения для каждой горизонтали необходимо перебирать все η ребер контура. Координата пересечения peбра pi — pk c горизонталью (у) равняется


Количество тактов работы этого алгоритма:

где ymax, ymin — диапазон координат y, Νгоρ— число тактов, нужных для одной горизонтали. Оценим величину Νгоρ как пропорциональную числу вершин

где к— коэффициент пропорциональности, n— число вершин полигона.

Возможна модификация приведенного алгоритма для ускорения его работы. Например, можно принять во внимание то, что каждая горизонталь обычно пересекает небольшое количество ребер контура. Поэтому, если при поиске точек пересечения делать предшествующий отбор ребер, которые находятся вокруг каждой горизонтали, то можно добиться уменьшения количества тактов работы с Nгор = к ∙ n до к . ∙ nр, где np — количество отобранных ребер. Например, разделим диапазон ymin -ymax пополам. Если для диапазона от ymin до yср, составить список ребер (или вершин), попадающих в этот диапазон, то в список будет включено приблизительно вдвое меньшее количество, чем для всего диапазона от ymin до ymax. Почему приблизительно — ибо это зависит от размещения вершин контура полигона. Таким образом, при работе алгоритма для каждой горизонтали в диапазоне от ymin до yср уже нужно не (к . ∙ п) тактов, а (k · n/2).

Аналогично для диапазона уср-ymах также можно составить список ребер, который также будет почти вдвое меньшим. Если принять, что подсчеты для каждой горизонтали теперь выполняются за вдвое меньшее количество тактов, а именно за (Nгор /2), то общее число тактов:

где Νдоп — количество тактов, которые необходимы при создании списка ребер.

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

Приведенные выше алгоритмы заполнения могут быть использованы не только для рисования фигур. На основе алгоритмов заполнения могут быть разработаны алгоритмы для других целей. Например, для определения площади фигуры (если считать площадь пропорциональной количеству пикселов заполнения). Или, например, алгоритм для поиска объектов по внутренней точке — эта операция часто используется в векторных графических редакторах.

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

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Студент — человек, постоянно откладывающий неизбежность. 10532 — | 7319 — или читать все.

Используя вспомогательные алгоритмы, запрограммируйте рисование следующих фигур: УЗОР КРЕСТ НОС

В 8:55 поступил вопрос в раздел Разное, который вызвал затруднения у обучающегося.

Вопрос вызвавший трудности

Ответ подготовленный экспертами Учись.Ru

Для того чтобы дать полноценный ответ, был привлечен специалист, который хорошо разбирается требуемой тематике «Разное». Ваш вопрос звучал следующим образом: ‘Используя вспомогательные алгоритмы, запрограммируйте рисование следующих фигур: УЗОР КРЕСТ НОС’

После проведенного совещания с другими специалистами нашего сервиса, мы склонны полагать, что правильный ответ на заданный вами вопрос будет звучать следующим образом:

ПРОГРАММА по пунктам
Рисунок 1
(стрелка — вправо)
Программа Гусеница
Нач
сделай КВАДРАТ
сделай КВАДРАТ
шаг
шаг
кон
процедура КВАДРАТ
нач
шаг
шаг
поворот
шаг
шаг
шаг
поворот
поворот
поворот
шаг
шаг
поворот
поворот
поворот
шаг
шаг
шаг
поворот
кон

Рисунок 2
(стрелка — вправо)
Программа Крест
нач
сделай ЛЕСЕНКА
сделай ЛЕСЕНКА
сделай ЛЕСЕНКА
сделай ЛЕСЕНКА
кон
процедура ЛЕСЕНКА
нач
шаг
шаг
поворот
поворот
поворот
шаг
шаг
поворот
шаг
шаг
поворот
кон

Рисунок 3
(стрелка — вправо)
Программа Нос
Нач
сделай Н
прыжок
сделай О
прыжок
прыжок
прыжок
сделай С
кон

Процедура Н
нач
поворот
шаг
шаг
шаг
шаг
поворот
поворот
прыжок
прыжок
поворот
шаг
шаг
поворот
шаг
шаг
поворот
поворот
шаг
шаг
поворот
кон

Процедура О
нач
шаг
шаг
поворот
шаг
шаг
шаг
шаг
поворот
шаг
шаг
поворот
шаг
шаг
шаг
шаг
поворот
кон

Процедура С
нач
шаг
поворот
прыжок
прыжок
прыжок
прыжок
поворот
шаг
поворот
шаг
шаг
шаг
шаг
кон

Рисунок 4
(стрелка — вправо)
Программа Лесенка
нач
сделай УГОЛ
сделай УГОЛ
сделай УГОЛ
кон
процедура УГОЛ
нач
поворот
шаг
поворот
поворот
поворот
шаг
кон

ВАРИАНТ ДВИЖЕНИЯ
1)
программа ЗИГГИ
нач
сделай ЗИГ
сделай ЗИГ
шаг
кон
процедура ЗИГ
нач
шаг
поворот
шаг
поворот
поворот
поворот
шаг
поворот
поворот
поворот
шаг
поворот
кон
2)
программа КРЕСТ
нач
сделай МЕТ
сделай МЕТ
сделай МЕТ
сделай МЕТ
кон
процедура МЕТ
нач
шаг
поворот
шаг
поворот
поворот
поворот
шаг
поворот
поворот
поворот
кон
3)
программа НОУЗ
нач
сделай ЭН
сделай ОУ
сделай ЭС

кон
процедура ЭН
нач
шаг
шаг
поворот
поворот
прыжок
поворот
поворот
поворот
шаг
поворот
прыжок
поворот
поворот
шаг
шаг
поворот
прыжок
кон
процедура ОУ
нач
прыжок
поворот
шаг
шаг
поворот
шаг
поворот
шаг
шаг
поворот
шаг
прыжок
кон
процедура ЭС
нач
поворот
шаг
шаг
поворот
поворот
поворот
шаг
поворот
поворот
поворот
прыжок
прыжок
поворот
поворот
поворот
шаг
кон
4)
программа ЛЕСЕНКА
нач
сделай ГЭ
сделай ГЭ
сделай ГЭ
кон
процедура ГЭ
нач
шаг
поворот
поворот
поворот
шаг
поворот
поворот
поворот
кон

программа НОС
нач
делай БУКВА Н
прыжок
делай БУКВА О
прыжок
делай БУКВА С
кон

процедура БУКВА Н
поворот
поворот
поворот
шаг
шаг
поворот
поворот
прыжок
поворот
поворот
поворот
шаг
поворот
шаг
поворот
поворот
прыжок
шаг
поворот
конец процедуры

процедура БУКВА О
поворот
шаг
шаг
поворот
поворот
поворот
шаг
поворот
поворот
поворот
шаг
шаг
поворот
поворот
поворот
шаг
поворот
поворот
прыжок
конец процедуры

процедура БУКВА С
поворот
шаг
шаг
поворот
поворот
поворот
шаг
поворот
поворот
поворот
прыжок
прыжок
поворот
поворот
поворот
шаг
конец процедуры

ПЛАТИМ ДЕНЬГИ! Помогайте выполнять задания студентам и зарабатывайте. Уже выплачено более 5 500 000 рублей. Подробнее.

ПОМОГАЕМ УЧИТЬСЯ НА ОТЛИЧНО!


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

Общий алгоритм рисования вращающихся "непрозрачных" 3 мерных фигур

Приветствую вас АЛЛ .
Такой вопрос есть, вроде как и не сложный, просто не сталкивался с этим ни разу. Нужно используя GDI нарисовать 3-х мерную фигуру, куб например. Ну вроде как это еще можно, не в этом проблема. Этот куб надо вращать и изменять масштаб. Так вот, как сделать вращение ? Можно конечно через LineTo, но для этого надо постоянно перерисовывать фон и заново рисовать фигуру в новом положение. А можно как нибудь рисовать через статичный объект, которому надо только менять координаты. Может у кого есть код, схожий с этим ? Или кто поделится алгоритмом вращения фигуры в пространстве по разным осям ?

думаю, там есть:
http://delphigfx.mastak.ru/

>перерисовывать фон и заново рисовать фигуру в новом положение
Рисовать на Bitmap, потом Draw его на Canvas.
можно также установить Pen.Mode xor или not, тогда второй вывод по тому же месту сотрет старое.

Спасибо ! Я наверно так и сделаю счас, просто мне казалось, что можно проще сделать, работая через объекты .

Лабораторная работа № 3 Моделирование геометрических фигур и операций

Лабораторная работа № 3

Моделирование геометрических фигур и операций

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

Чтобы использовать простейшие компьютерные программы для построения геометрических моделей, необходимо научиться строить модели геометрических операций (деление отрезка и угла на равные части; определение центра окружности и др.). Это важно потому, что простейший графический редактор не имеет обычных и нужных для построения геометрических фигур инструментов (линейки, транспортира, циркуля), а в построенной окружности не определяет центр. Научиться моделировать геометрические операции возможно с использованием теорем геометрии.

Илон Маск рекомендует:  Что такое код fclose

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

Модель 1. Моделирование функций линейки.

а) Деление отрезка пополам.

Построение основано на том, что высота равнобедренного треугольника является одновременно биссектрисой и медианой. Для построения достаточно инструмента Линия и клавиши Shift. Алгоритм деления отрезка пополам на рис.1:

Задание № 1: проделать действия в Paint и сохранить картинки в файле mod1.bmp.

1.В левом верхнем углу окна графического редактора Paint построить отрезок и угол. Угол построить черным цветом, отрезок – красным. Это заготовки. К ним не применять никаких действий изменения. Работать, включив опцию Рисунок – Непрозрачный фон.

2.Копировать и вставить угол (появится в левом углу окна редактора), «потащить» копию угла и расположить ниже заготовок для осуществления операций.

3.Копировать и вставить отрезок (появится в левом углу окна редактора), который нужно разделить пополам. Потащить копию отрезка и наложить на горизонтальную часть угла, расположив слева.

4.Копировать и вставить копию угла (появится в левом углу окна редактора), оттащить на свободное место и отобразить слева направо: выделить копию угла и выбрать в меню Рисунок – Отразить/повернуть – Отразить слева направо.

5.Потащить копию из пункта 4 к основному рисунку (угол с отрезком) и присоединить горизонтальную ее часть к правому концу отрезка

6.Провести перпендикуляр из точки пересечения сторон углов вниз и получить точку, делящую исходный отрезок пополам.

Чтобы провести ровную линию, надо удерживать клавишу Shift

б) Деление отрезка на n равных частей.

Для выполнения операции деления используется отрезок произвольной длины х. Построение основано на подобии треугольников. Параллельность линий достигается копированием. Алгоритм деления отрезка на 3 равные части на рис.2:

Задание № 2: проделать действия в Paint и сохранить картинки в файле mod2.bmp.

1. В левом верхнем углу окна графического редактора Paint построить 2 отрезка – это заготовки. К ним никаких действий изменения не применять. Работать, включив опцию Рисунок – Непрозрачный фон. Большой отрезок будем делить на три равные части.

2.Копировать и вставить большой отрезок (появится в левом углу окна редактора). Потащить его вниз, где будем производить изменения.

3.Вертикально вверх к левой границе большого отрезка достроить копированием и вставкой три маленьких отрезка. Первый и третий – черного цвета. Второй отрезок закрасить красным цветом: выбрать красный цвет в палитре, и инструментом Заливка «щелкнуть» на отрезке.

4. Соединить линией концы получившегося угла.

5.Паралельно построенной в пункте 4 линии построить 2 линии, проходящие через концы маленьких вертикальных отрезков.

Модель 2. Моделирование функций циркуля. Построение окружности заданного радиуса и определение ее центра. Окружность в графическом редакторе вписывается в квадрат со стороной, равной удвоенному радиусу. Алгоритм построения окружности на рис.3. Чтобы вписать окружность в квадрат, надо выбрать инструмент Эллипс и начинать построение окружности при нажатой клавише Shift с левого верхнего угла квадрата.


Задание № 3: проделать действия в Paint и сохранить в файле mod3.bmp.

Модель 3. Моделирование функции транспортира. Деление угла пополам. Ниже приведен один из алгоритмов деления. В качестве дополнительного построения используется окружность любого радиуса. В ее центр помещается копия угла, подлежащего делению. Углы AOB ACB относятся как 2:1 (доказано). Если AC || DO, то DO является биссектрисой заданного угла. Алгоритм построения на рис.4.

Задание № 4: проделать действия в Paint и сохранить в файле mod4.bmp.

Модель 4. Построение равностороннего треугольника с заданной стороной (рис. 5). Данный алгоритм предложил Евклид в IV в. до н. э.

Задание № 5: проделать действия в Paint и сохранить в файле mod5.bmp.

Модель 5. Построение правильного шестиугольника с заданной стороной (рис. 6).

Задание № 6: проделать действия в Paint и сохранить в файле mod6.bmp.

Модель 6. Построить равнобедренный треугольник по заданному основанию a и высоте h по нижеприведенному или собственному алгоритму. Высота в равнобедренном треугольнике одновременно является и медианой. Построение сводится к повороту отрезка, задающего высоту, на 90 и к делению отрезка, задающего основание, пополам.

Задание № 7: проделать действия в Paint и сохранить в файле mod7.bmp.

Конструирование как разновидность моделирования

Часто объект, подлежащий моделированию, можно разбить на более мелкие детали. Если разработать набор типовых деталей, то на его основе можно создавать разные объекты. Такая деятельность называется конструированием. Это один из способов моделирования. Он состоит в разработке совместимых типовых элементарных объектов (деталей) и создании из этих деталей более сложных объектов.

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

С помощью меню готовых форм можно решать задачи следующего типа:

    конструирование типа «что будет, если… » конструирование типа «как сделать, чтобы»

Меню готовых деталей облегчает работу и освобождает время для творчества.

Модель 7. Разработать эскизы мозаики на основе меню готовых деталей.

1. Создать индивидуальный набор совместимых деталей. Созданные детали сохранить как меню готовых форм в файле zagot1.bmp и защитить от записи. Для создания меню готовых деталей использовать алгоритмы моделирования геометрических объектов с заданными свойствами.

2. Разработать индивидуальные эскизы мозаики mod8.bmp с использованием элементов меню.

Рис. 1. Пример меню деталей и эскиза мозаики Рис. 2. Пример меню объемных деталей

Модель 8. Создавая мозаику, мы работали с плоскими композициями. Можно ли передать объем, используя для этого не специальную программу, работающую с трехмерной графикой, а простой графический редактор? Попытаемся продемонстрировать это на примере использования в качестве меню готовых форм объемные совместимые детали (рис. 2).

Примерs выполнения задания

1. Создать меню объемных деталей, состоящее из всех возможных положений кирпичика. Сохранить меню в файле zagot2.bmp и защитить его от записи.

2. Построить с помощью элементов меню разнообразные объекты, используемые в профессиональной деятельности mod9.bmp.

Вращение фигур в трехмерном пространстве (3D Rotation) в MS EXCEL

Научимся вращать в MS EXCEL трехмерные фигуры вокруг координатных осей Х, Y, Z, а также поворачивать плоскости вокруг произвольно заданной оси. Для этого используем соответствующие матрицы вращения. Также покажем, что проекция фигуры на плоскость, построенная с помощью диаграммы типа Точечная, может служить альтернативой диаграмме типа Поверхность.

Вращать объемные фигуры в MS EXCEL можно и встроенными средствами (см. статью Трехмерные диаграммы (поверхности и изолинии) в MS EXCEL). Однако, в этом случае фигура изображена в виде поверхности, что не всегда удобно.

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

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

Для вращения объемных фигуры будем использовать матрицы, поэтому тем, кто не знаком с этим подходом рекомендуем прочитать статью Трансформация фигур в двухмерном пространстве (2D Transformation) в MS EXCEL.

Построение «объемной» фигуры


Круглое основание фигуры красного цвета разместим в плоскости Z=0, т.е. z-координаты у всех точек основания равны 0. Координаты x и y зададим с помощью угла в радианах от 0 до 2*ПИ. Это можно сделать с помощью функций SIN() и COS() . Сделаем 14 точек, причем первая и последняя точки должны совпадать, чтобы линии, соединяющие эти точки, замкнулись.

Аналогично создадим синий квадрат из 4-х точек. Z-координаты квадрата положим равными 1. Наконец, соединим вершины квадрата с основанием линиями зеленого цвета.

Вид сверху (вдоль оси Z на плоскость XY) должен быть таким.

Вращение вокруг координатных осей

Сначала повернем нашу фигуру вокруг оси Z на 45 градусов. Матрица поворота (Rotation matrix) будет такой же, как и в двухмерном случае, только необходимо добавить еще одну строку и столбец как у единичной матрицы.

Для ввода угла поворота можно настроить элемент управления Счетчик (см. файл примера ).

Координаты фигуры после поворота получаются путем умножения матрицы на известные координаты. В EXCEL это можно реализовать с помощью формулы:

Для ввода формулы выделите 3 ячейки в строке (куда нужно поместить новые координаты), установите курсор в Строку формул, введите формулу, затем нажмите CTRL+SHIFT+ENTER.

Используя вспомогательные алгоритмы нарисовать запрограммируйте рисование следующих фигур

Ответ

Проверено экспертом

// PascalABC.NET
// Версия 3.3.5 сборка 1662 (29.04.2020)

begin
// поле 5 на 20
Field(20, 5);
// 1
ToPoint(1, 2);
PenDown;
OnVector(1, 0);
Onvector(0, 1);
OnVector(1, 0);
Onvector(0, -1);
OnVector(1, 0);
Onvector(0, 1);
OnVector(1, 0);
Onvector(0, -1);
OnVector(1, 0);
PenUp;
//2
ToPoint(7, 2);
PenDown;
Onvector(0, 1);
OnVector(1, 0);
OnVector(0, 1);
OnVector(1, 0);
OnVector(0, -1);
Onvector(1, 0);
OnVector(0, -1);
OnVector(-1, 0);
OnVector(0, -1);
OnVector(-1, 0);
OnVector(0, 1);
OnVector(-1, 0);
PenUp;
//3
ToPoint(11, 4);
PenDown;
OnVector(0, -2);
OnVector(0, 1);
OnVector(1, 0);
OnVector(0, 1);
OnVector(0, -2);
PenUp;
//4
ToPoint(13, 4);
PenDown;
OnVector(0, -2);
OnVector(1, 0);
OnVector(0, 2);
OnVector(-1, 0);
PenUp;
//5
ToPoint(16, 4);
PenDown;
OnVector(-1, 0);
OnVector(0, -2);
OnVector(1, 0);
PenUp;
//6
ToPoint(17, 1);
PenDown;
OnVector(0, 1);
OnVector(1, 0);
OnVector(0, 1);
OnVector(1, 0);
OnVector(0, 1);
OnVector(1, 0);
end.

Создание объемных фигур и демонстрация вращения

В данной программе будет реализовано создание пирамиды с переливающимися гранями, куба с разноцветными гранями, их одновременное разобщенное вращение с помощью различных методов технологии OpenGL для языка С# — SharpGL — в проекте Windows Forms.

Илон Маск рекомендует:  Постраничный вывод с помощью xslt

Работа с OpenGL в WPF почти ничем не отличается, поэтому смело можно использовать описанный в данном уроке материал. О том, как подключить SharpGL в WPF проекте или проекте Windows Forms, читайте тут http://grafika.me/lessons.

Из новых методов стоит отметить gl.Flush();. Этот метод контролирует правильное обновление изображений.

1. Создадим пирамиду

Первое, что необходимо сделать — нарисовать грани. Однако для реализации переливающегося цвета граней нам понадобится задавать цвет каждой вершины отдельно, которые в данном примере будут окрашены в красный, синий и зеленый цвета.
Так как в предыдущем уроке уже было реализовано что-то подобное, сразу зададим вращение нашему объекту. Создадим переменную — значение угла поворота, и будем менять ее на каждой итерации отрисовки. Сам поворот реализуется методом gl.Rotate(angle, X.Xf, Y.Yf, Z.Zf);, где (X.Xf, Y.Yf, Z.Zf) — координаты вектора на оси, вокруг которой будет осуществляться вращение. Для начала просто посмотрим на пирамиду сбоку, для этого просто повращаем фигуру вокруг ее оси Y.

Вот что получим на выходе:

Изменим на gl.Rotate(rtri, 0.0f, 0.0f, 1.0f);, т.е. покрутим вокруг оси Z. Естественно, получим просто треугольник, который вращается вокруг своей вершины, в действительности — это вершина пирамиды, не принадлежащая основанию.

Самое интересное — вращение вокруг оси X. Увидим, что дна у пирамиды нет, т.к. оно и не было изначально отрисовано. Тем не менее, грани внутри пирамиды также переливаются.

2. Вращение куба.

Отрисуем грани с помощью метода gl.Begin(OpenGL.GL_QUADS);, зададим вращение вокруг оси (1.0, 1.0, 1.0).

Получим такую анимацию:

3. Совместное вращение

Из приведенных примеров становится ясно, что вращение — достаточно легкая тема, особенно если реализовывать это с помощью технологии OpenGL. Для того, чтобы получить справа ту же вращающуюся пирамиду и тот же куб, нам необходимо скомпоновать примеры и отдельно задать координаты пера.

Для получения анимации просто надо просто скачать проект и запустить.

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

Рисование стандартных фигур

Цель: изучить команды (инструменты), позволяющие создавать на экране изображения стандартных геометрических фигур: Линия, Кривая, Эллипс,Прямоугольник,Скругленный прямоугольник,Многоугольник.

Задание 1. Используя только инструменты Линия и Многоугольник, нарисовать предложенный рисунок. («Льды.bmp»)
Задание 2. Нарисовать рисунок, используя только инструмент Эллипс. («Чебурашка.bmp»)
Задание 3. Повторить рисунок, используя только инструменты Прямоугольник и Скругленный прямоугольник. («Телевизор.bmp»)
Задание 4. Нарисовать рисунок, используя только инструмент Кривая. («Речка.bmp»)
Задание 5. Творческая работа. Придумать рисунок с использованием всех изученных команд (инструментов).
Пример: «Домики.bmp»


Ключ:.

1. С помощью инструмента Линия провести линию горизонта.
2. Инструментом Эллипс нарисовать тучки и солнце. Лучи солнца рисуются с помощью инструмента Линия.
3. Выделить одну тучку и, перемещая, наложить на солнце.
4. С помощью инструмента Карандаш нарисовать птиц.
5. С помощью инструмента Прямоугольник и операции копирования нарисовать один дом. И, скопировав его, получить изображение второго дома.
6. С помощью инструмента Кривая нарисовать дорогу.
7.С помощью инструментов Эллипс, Прямоугольник и Скругленный прямоугольник на свободном месте поля рисунка нарисовать машину. Выделив ее, наклонить на 10 0 и переместить в нужное место рисунка.
8. С помощью инструментов Эллипс, Прямоугольник и Многоугольник нарисовать деревья.
9. Раскрасить рисунок с помощью инструмента Заливка (где можно элементы изображения рисуются заранее заданным цветом).
10. Инструментом Распылитель выполнить цветы на траве.

Работа с блоками изображения. Изменение свойств

Цель: изучить команды изменения свойств изображения и атрибутов рисунка (пункты меню Рисунок и Вид).

Задание 1. Построить геометрический орнамент. («Орнамент.bmp»)

Ключ:

1. Нарисовать прямоугольник.
2. Нарисовать полосу внутри прямоугольника.
3. С помощью инструмента Ластик удалить лишние линии.
4. Нарисовать на свободном поле рисунка круг и переместить его внутрь полосы.
5. Скопировать полученный фрагмент и отразить справа налево.
6. С помощью операции копирования составить орнамент.
7. Оформить крайние элементы рисунка в соответствии с образцом.
8. Раскрасить рисунок.
Задание 2.Открыть файл «Мозайка.bmp». Из предложенных фрагментов собрать рисунок, используя команды поворота, отражения, копирования выделенного фрагмента.

Примеры алгоритмов для этапа IV

Значения параметров

Алгоритм «Нарисуй фигуры (1,1, 3, 4)»

1. Нарисуй большой 3.

2. Внутри 3 нарисуй большой 1.

3. Внутри 1 справа нарисуй большой 2.

4. Внутри 1 слева нарисуй 4 так, чтобы 2 и 4 пересекались.

Алгоритм «Левиз команды»

1. Нарисуй фигуры (1, 2, 3, 4).

2. Раскрась фигуры (1, 2, 3, 4) цветами (5, 6, 7, 8, 9).

3. Найди свое слово.

Алгоритм «Раскрась фигуры (1, 2, 3, 4) цветами (5, 6, 7, 8, 9)»

1. Пересечение 2 и 4 раскрась цветом 5.

2. Раскрась оставшуюся часть 2 цветом 6.

3. Раскрась оставшуюся часть 4 цветом 7.

4. Раскрась оставшуюся часть 1 цветом 8.

5. Раскрась оставшуюся часть 3 цветом 9.

5. Напиши слово СМЕТАНА.

6. Повтори 4 раза пункт 3.

7. Убери последнюю букву.

8. Выполни пункт 5 для букв «Л», «Ы», «Е».

9. Добавь букву справа.

10. Запиши ответ. Ответ: СМЕЛЫЕ. •

Остальные алгоритмы аналогичны приведенным выше.

Итоговые результаты


Итоговая командная победа определяется по сумме бал­лов, полученных на трех этапах:

1. Командное тестирование.

2. Игра «Испорченный телефон».

3. Эстафета «Девиз команды». Составляется следующая таблица:

№ команды Название этапа Команда № 1 Команда № 2
Командное тестирование
Игра «Испорченный телефон»
Эстафета
ИТОГО:

Алгоритм «Найди свое слово»

1. Если пересечение 2 и 4 закрашено красным цветом, то выполни алгоритм «Слово1».

2. Если пересечение 2 и 4 закрашено желтым цве­том, то выполни алгоритм «Слово2».

3. Если пересечение 2 и 4 закрашено синим цветом, то выполни алгоритм «Слово3».

4. Если пересечение 2 и 4 закрашено зеленым цве­том, то выполни алгоритм «Слово4».

5. Если пересечение 2 и 4 закрашено серым цветом, то выполни алгоритм «Слово5».

6. Если пересечение 2 и 4 закрашено белым цветом, то выполни алгоритм «Слово6».

7. Если пересечение 2 и 4 закрашено черным цве­том, то выполни алгоритм «Слово7».

Ровесница IBM PC

20 лет назад, в 1901 воду, была выпущена первая версия операционной системы DOS

«Представьте, что из вашего компьютера исчезли все управляющие программы и вы поставлены перед необходимостью общаться с ним на «его языке» и таким способом пытаетесь прочитать данные из внешней памяти или записать их туда. Ваша производительность при работе с компьютером без операционной системы снизится практически до нуля. » [1].

«Операционная система — это важнейшая часть программного оснащения компьютера, представляющая собой комплекс управляющих и обслуживающих программ. « [2].

IBM PC создавался в то время, когда уже существовали персональные компьютеры на базе 8-разряд­ного микропроцессора, и основной операционной системой для них являлась СР/М (Control Program for Microcomputer — управляющая программа для микрокомпьютера). Сна­чала фирма IBM намеревалась взять для IBM PC, в качестве основы ко­торого был выбран 16-разрядный микропроцессор Intel 8088, ее модер­низированный вариант—СР/М-86, но затем было решено использовать новую операционную систему, раз­работанную фирмой Microsoft специ­ально для IBM PC. Так в 1981 году одновременно с IBM PC появилась операционная система DOS. (Вообще до появления Windows 95 в качестве операционных систем для компьютеров такого типа употреблялись главным образом программы MS-DOS фирмы Microsoft и PC-DOS фирмы IBM, однако, с точки зрения пользо­вателя, эти программы практически одинаковы и их часто называют про­сто DOS [1—3].)

И все же официальную поддержку фирмы IBM получили тогда сразу три операционные системы: СР/М-86 (число 86 указывает на так называемое семейство микропроцессоров 8086), DOS и UCSD p-System (опера­ционная система, ориентированная на требования языка Pascal). Однако вскоре DOS стала доминировать, причем по мере совершенствования IBM PC создавались ее новые версии, учитывающие новые возможно­сти компьютеров и предоставляющие дополнительные удобства пользова­телю [4—6].

В 1987 году появилась версия MS-DOS 3.3 (3.30) с достаточно ши­роким набором возможностей, кото­рая быстро приобрела популярность и по существу стала стандартом на следующие 3—4 года.

Версии 5.0 и 6.0 предназначались уже для более мощных компьютеров. Они имеют, например, средства для эффективного использования оперативной памяти «сверх» 640 Кб, позволяют работать с логическими диска­ми размером более 32 Мб, переносить DOS и драйверы устройств в расширенную память, освобождая место в обычной памяти для прикладных программ. Версия 6.0 имеет средства для сжатия информации на дисках, программы создания резервных копий, антивирусную программу; кроме того, в ней произведены некоторые другие усовершенствования. Однако программы сжа­тия информации в данной версии не всегда работали правильно, что иногда приводило к потерям данных. Чтобы исправить положение, фирма Microsoft выпустила версию 6.20, в которой ошибки были устранены, а некоторые возможности расширены. К тому же работает она быстрее, чем MS-DOS 6.0.

Позже была выпущена версия 6.21, а затем версия 6.22, и фирмой Micro­soft было объявлено, что это послед­няя версия MS-DOS [7].

Долгое время (до 1996 года) DOS фактически являлась стандартом операционной системы для компьютеров, совместимых с IBM PC, и, конечно, для нее было создано огромное количество программной продукции. Своим успехом IBM PC и совместимые с ними компьютеры во многом обязаны DOS.

Литература

1. Рыбкин ЕЛ., Юдин А.Ю. Про­граммные средства ПЭВМ: операци­онная система MS-DOS. M.: Финан­сы и статистика, 1991.

2. Операционные системы // Но­вое в жизни, науке, технике. Сер. «Вычислительная техника и ее при­менение», Ns 1/90.

3. Нортон П. Справочное руковод­ство по MS-DOS: Пер. с англ. M.:

Радио и связь, 1992.

4. Нортон П. Программно-аппа­ратная организация IBM PC: Пер. с англ. M.: Радио и связь, 1992.

5. Фигурнов В.Э. IBM PC для пользователя. Изд. 6-е, перераб. и доп. M.: ИНФРА-М, 1995.

6. DOS // Информатика, № 7/2000.

7. Козловский Е. Как нам купить и обустроить компьютер. Изд 3-е, пе­рераб. в корне и обильно доп. M.:

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL