8 (Семинары и упражнения)

PDF-файл 8 (Семинары и упражнения) Информатика (4446): Семинары - 2 семестр8 (Семинары и упражнения) - PDF (4446) - СтудИзба2019-04-28СтудИзба

Описание файла

Файл "8" внутри архива находится в папке "Семинары и упражнения". PDF-файл из архива "Семинары и упражнения", который расположен в категории "". Всё это находится в предмете "информатика" из 2 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст из PDF

Семинар 8. Введение в программирование графики. Двумернаяграфика. Графические примитивы (прямоугольник, эллипс, линия, точка).1. Программирование графики в Windows. Подготовительные действияВоспользоваться графическими возможностями ОС Windows можно через среду .NET,установленную на большинстве современных Windows-компьютерах.

Библиотеки этойсреды содержат так называемый управляемый код, который выполняется подуправлением CLR (Common Language Runtime) системы.1.1 Расширения языка Си++.Для взаимодействия со средой .NET в стандартный язык Си++ добавлены специальные(управляемые) расширения. В частности, оператор gcnew выделяет память и создаетобъект в «управляемой куче», возвращая «управляемый указатель ^» на его уникальныйдескриптор (handle). Для объектов, созданных в «управляемой куче», как правило, нетребуется в явном виде вызывать «сборщика мусора».1.2 Проект в среде Visual Studio.С точки зрения взаимодействия с графическими возможностями среды .NET наиболееудобным типом проекта является Windows Forms Application.

По умолчанию мастер VisualStudio создаст приложение на основе базового класса Form, которое будет содержатьпустую форму с именем Form1. В среде Visual Studio интегрированный дизайнерпрограмм представит эту форму на экране (Form1.h[Design]). Нажав на ней правую кнопкумыши, можно выбрать режим просмотра программного кода (View Code) файла Form1.h.При запуске программы на выполнение эта форма отображается в виде пустого окна,ожидающего действий от пользователя. Свойства формы такие, как например, текст взаголовке формы или цвет фона можно поменять в окне ее свойств (Properties), котороетакже доступно с помощью правой кнопки мыши.1.3 Организация простого графического вывода.В большинстве случаев удобно сделать так, чтобы форма содержала различныеуправляющие элементы, такие, как например, кнопки. Поэтому, не смотря на то, чтоосуществлять графический вывод (рисовать) можно непосредственно на поверхностьформы, мы в качестве примера рассмотрим другой вариант.

Добавим на форму двеуправляющие кнопки (Button) – одну для запуска процесса рисования и вторую – длястирания области рисования; и специальный элемент – PictureBox, в пределах которогобудет осуществляться графический вывод. Проще всего это сделать в дизайнере,перетаскивая мышью соответствующие управляющие элементы из палитры Toolbox. Поумолчанию эти элементы получат имена button1, button2 и pictureBox1, соответственно.Текст, на кнопках по умолчанию совпадающий с их именами, лучше поменять на «Paint»и «Clear» в окне Properties.

При запуске программы ее окно теперь будет выглядетьследующим образом:Область рисования pictureBox1 на форме выделенацветом (Properties->BackColor).С точки зрения языка программирования показаннаяформа – это объект класса Form1, производного отбазового класса Form. Определение класса Form1можно увидеть в файле Form1.h. Для нашихспецифических целей добавим в класс частнуюстатическую целочисленную переменную MyPaint:static int MyPaint=0;значение которой будет определять режим отображения графической информации вPictureBox:0 – исходное состояние;1 – выполнить рисование;-1 – стереть.1.4 События и их обработчики.Наряду со свойствами, для управляющих элементов существует предопределенный наборсобытий.

Посмотреть их список можно в окне Properties, выбрав вкладку Events. Длякнопок нам потребуется событие Click (нажатие на кнопку). Для элемента PictureBox –событие Paint (элемент нуждается в перерисовке). Каждое событие обрабатываетсяспециальным методом – обработчиком событий. В проекте Windows Forms Applicationосновная задача программирования заключается в написании обработчиков событий.Для перехода к написанию кода обработчика достаточно дважды кликнуть мышью наимени события во вкладке Events окна Properties соответствующего элемента. Дизайнерсоздаст для вас заголовок обработчика и поместит курсор в пока еще пустое тело.Обработчик события Click кнопки Paint (button1).

Автоматически генерируемый шаблонобработчика имеет только заголовок:private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e){}По умолчанию обработчик получает имя, состоящее из имени управляющего элемента,подчеркивания и имени события: button1_Click. На вход обработчика передаетсяуказатель sender на дескриптор объекта, вызвавшего событие, и указатель e на дескрипторструктуры с дополнительными данными.В нашем случае после нажатия кнопки Paint следует сменить режим отображенияграфической информации на «выполнить рисование» и инициировать событие Paint дляpictureBox1. Последнее осуществляется вызовом метода Invalidate(). В итоге обработчикпринимает вид:private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e){MyPaint = 1;pictureBox1->Invalidate();}Обработчик события Click кнопки Clear (button2).

Отличие одно – устанавливается другойрежим отображения графической информации – стереть:private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e){MyPaint = -1;pictureBox1->Invalidate();}Собственно программирование графического вывода в этой схеме происходит вобработчике события Paint элемента pictureBox1.22. Обработчик события PaintДействия этого обработчика будут зависеть от установленного режима отображенияграфической информации, поэтому его структура могла бы быть следующей:System::Void pictureBox1_Paint(System::Object^ sender,System::Windows::Forms::PaintEventArgs^ e){switch (MyPaint){case 0:return; //ничего не делатьcase -1:e->Graphics->Clear(Color::LemonChiffon); // стеретьMyPaint = 0;break;case 1:// здесь надо добавить собственно рисование}}Для стирания графической поверхности pictureBox1 (объект Graphics, доступный черездескриптор e) вызывается метод Clear, которому передается цвет (в примере:Color::LemonChiffon), которым следует заполнить стираемую поверхность.Собственно рисование будет осуществляться в случае, если мы установили режимграфического отображения MyPaint = 1.3.

Графические примитивы3.1 Растровая графика.Двухмерную графическую поверхность, на которой осуществляется отображениеграфической информации, можно представить в виде прямоугольного растра цветныхквадратных пикселей. Задачей рисования, таким образом, является придание нужнымпикселям заданный цвет. Нумерацию пикселей на плоскости удобно осуществлять вдекартовой системе координат x, y. По умолчанию начало отсчета (пиксель скоординатами x = 0, y =0) размещается в левом верхнем угле графической поверхности, ивертикальная ось y направлена вниз:(0,0)xПрямоугольная система координат x, y дляцелочисленной нумерации пикселей на графической поверхности элемента pictureBox1.yКроме указания координат пикселей для рисования простейших фигур потребуетсяопределить перо для задания цвета и некоторых других свойств контура фигуры иликисть – для задания цвета пикселей, заполняющих фигуру.

Например, следующий кодсоздает в «управляемой куче» и возвращает указатели на дескриптор пера (Pen^) черногоцвета толщиной в три пикселя и «твердой» кисти (SolidBrush^) красного цвета:Pen^ blackPen = gcnew Pen(Color::Black, 3);SolidBrush^ redBrush = gcnew SolidBrush(Color::Red);33.2 Отрезок прямой.Отрезок прямой на графической поверхности можно нарисовать, вызвав метод DrawLineдля графического объекта Graphics. Потребуется перо, а также пиксельные координатыначала отрезка (x1, y1) и конца (x2, y2):e->Graphics->DrawLine(blackPen, x1, y1, x2, y2);3.3 Прямоугольник.Метод DrawRectangle рисует контур прямоугольника, а метод FillRectangle закрашиваетпрямоугольную область. Для первого метода необходимо указать перо, а для второго –кисть.

Сама прямоугольная область задается координатами ее левого верхнего угла,шириной (вдоль оси x) и высотой (вдоль оси y), измеряемыми в пикселях:e->Graphics->DrawRectangle(blackPen, x, y, width, height);e->Graphics->FillRectangle(redBrush, x, y, width, height);3.4 Одиночный пиксель.Закрасить один пиксель с координатами (x, y) проще всего методом FillRectangle, указавединичную ширину и высоту:e->Graphics->FillRectangle(redBrush, x, y, 1, 1);3.5 Эллипс.Рисуется и закрашивается методами DrawEllipse и FillEllipse, соответственно. Вкачестве координат задается прямоугольная область, в которую эллипс будет вписан:e->Graphics->DrawEllipse(blackPen, x, y, width, height);e->Graphics->FillEllipse(redBrush, x, y, width, height);3.6 Пример.Код обработчика события Paint элемента pictureBox1, отображающий наклонную линиючерного цвета, красный прямоугольник с черным контуром, закрашенный красныйэллипс, черный контур эллипса и одиночный красный пиксель, имеет вид:private: System::Void pictureBox1_Paint(System::Object^ sender,System::Windows::Forms::PaintEventArgs^ e){switch (MyPaint){case 0: return;case -1:e->Graphics->Clear(Color::LemonChiffon);MyPaint = 0;break;case 1:int PenWidth = 3; // ширина пераPen^ blackPen = gcnew Pen( Color::Black, PenWidth);SolidBrush^ redBrush = gcnew SolidBrush( Color::Red );// Задаем координаты концов отрезкаint x1 = 0;int y1 = 0;int x2 = 100;4int y2 = 100;// Рисуем линиюe->Graphics->DrawLine( blackPen, x1, y1, x2, y2 );// Create location and size of rectangle.int x = 200;int y = 100;int width = 60;int height = 60;// Рисуем и закрашиваем прямоугольник.e->Graphics->DrawRectangle( blackPen, x, y, width, height );e->Graphics->FillRectangle( redBrush, x+(PenWidth+1)/2,y+(PenWidth+1)/2, width-PenWidth, height-PenWidth);// Рисуем контур эллипса и отдельно закрашенный эллипс.y = 200;e->Graphics->DrawEllipse(blackPen, x, y, width, height );e->Graphics->FillEllipse(redBrush, x, y+100, width, height);// Закрашиваем одиночный пиксель.e->Graphics->FillRectangle(redBrush, 110, 110, 1, 1);}}В итоге, при выполнении программы и нажатии кнопки «Paint» форма на экранеприобретает вид:5.

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
428
Средний доход
с одного платного файла
Обучение Подробнее