18105

Графические примитивы API Windows

Лекция

Информатика, кибернетика и программирование

Лабораторная работа №2 Графические примитивы API Windows 1. Отдельные пикселы Функция SetPixel рисует один пиксел растра. Она имеет такие аргументы: SetPixelhdc x y clr где hdc – контекст xy – координаты clr – цвет пиксела. Аргумент clr – имеет тип 4байтного COLORREF причем тр...

Русский

2013-07-06

77.01 KB

9 чел.

Лабораторная работа2

Графические примитивы API Windows

1. Отдельные пикселы

Функция SetPixel рисует один пиксел растра. Она имеет такие аргументы:

SetPixel(hdc, x, y, clr),

где hdc – контекст, x,y – координаты, clr – цвет пиксела. Аргумент clr – имеет тип 4-байтного COLORREF, причем три младших байта соответствуют компонентам Blue, Green, Red (в диапазоне от 0 до 255 каждая), а старший байт не используется. Цвет, кодируемый типом COLORREF, удобно задавать макросом Red(r,g,b). Функция SetPixel сама имеет тип COLORREF – она возвращает значение цвета пиксела. 

2. Линии

В состав API Windows входит несколько функций, которые рисуют прямые и кривые линии:

AngleArc 

дуга окружности с заданием углов

BOOL AngleArc(

 HDC hdc, // контекст устройства 

 int X, // x-координата центра окружности

 int Y, // y-координата центра окружности

 DWORD dwRadius, // радиус окружности 

 FLOAT eStartAngle, // начальный угол дуги

 FLOAT eSweepAngle  // конечный угол дуги

  );

Arc 

дуга эллипса

BOOL Arc(

 HDC hdc, // контекст устройства

 int nLeftRect, // x-координата левого верхнего угла

 int nTopRect, // y-координата левого верхнего угла

 int nRightRect, // x-координата правого нижнего угла

 int nBottomRect, // y-координата правого нижнего угла

 int nXStartArc, // x-координата начальной точки

 int nYStartArc, // y -координата начальной точки

 int nXEndArc, // x-координата конечной точки

 int nYEndArc  // y -координата конечной точки

  );

LineTo

рисование отрезка прямой линии от текущей позиции к заданной точке

BOOL LineTo(

   HDC hdc,      // контекст устройства

   int nXEnd,  // x-координата последней точки линии

   int nYEnd   // y-координата последней точки линии

  );

MoveToEx

задание текущей позиции графического вывода

BOOL MoveToEx(

   HDC hdc, // контекст устройства

   int X, // x- координата

   int Y, // y- координата 

   LPPOINT lpPoint  // адрес старой позиции

  );

Polyline 

ломаная линия из многих связанных между собой отрезков прямых (полилиния)

BOOL Polyline(

   HDC hdc, // контекст устройства

   CONST POINT *lppt, // адрес массива, содержащего конечную точку

   int cPoints  // количество точек в массиве

  );

PolylineTo

ломаная линия из многих связанных между собой отрезков прямых (полилиния)

BOOL PolylineTo(

   HDC hdc, // контекст устройства

   CONST POINT *lppt, // адрес массива точек 

   DWORD cCount  // количество точек в массиве

  );

3. Стиль линии. Перо.

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

Создавая новое перо, нужно обязательно позаботиться об уничтожении предыдущего пера. Не следует пытаться уничтожить стандартные перья.

Типичная последовательность для вывода линии с заданным стилем может быть такой:

HPEN hPen, hPenOld;

hPen = CreatePen(PS_SOLID,1,RGB(255,0,0);

//формат CreatePen(стиль, толщина, цвет)

hPenOld = (HPEN)SelectObject(hdc,hPen);

. . . //здесь рисуем линии

SelectObject(hdc,hPenOld);   //выбираем предыдущее перо

DeleteObject(hPen);          //уничтожаем наше перо

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

Задание

Изобразить в центре экрана квадрат, движущийся по окружности и вращающийся вокруг своего центра.

Изменение координат центра квадрата и концов отрезков (сторон квадрата) можно задать через параметрическое уравнение окружности x=r cos t, y=r sint, t[0,2), r-радиус окружности.

Для создания вращения используем цикл, например, while 

t=0;

while(t<12.55){ // два оборота 

 x1=200+r*cos(t); //если окно 400х300

 y1=150+r*sin(t);  

 x2=200+r*cos(t+3.14/2);

 y2=150+r*sin(t+3.14/2);

 // (x1,y1)-координаты первой вершины квадрата

 // (x2,y2)-координаты второй вершины квадрата

 // для каждой следующей добавляем еще 3.14/2

 //находим x3 y3 x4 y4

 MoveToEx(hdc,x1,y1,NULL);

 LineTo(hdc,x2,y2);

 LineTo(hdc,x3,y3);

// аналогичные линии для 3-х других сторон

 t+=0.001;

}

Перед тем как рисовать новую позицию квадрата нужно подождать sleep(int ms) и, взяв белое перо, удалить старую позицию.

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


 

А также другие работы, которые могут Вас заинтересовать

33848. Характеристика западной философии 16.81 KB
  Эти же вопросы являются предметом исследования и других форм общественного сознания в частности и философии. Теология как одна из форм выражения религиозного сознания имеет ряд специфических черт которые отличают ее от философии. Проблема соотношения философии и теологии возникла в первые века существования христианства и несостоятельная своей актуальности до наших дней.
33849. Особенности развития русской философии 20.54 KB
  В качестве самостоятельного духовного явления о русской философии может идти речь начиная с конца XVIII начала XIX в. Первые известные за пределами России представители русской православной философии В. Дальнейшее развитие русской философии связано с тремя основными направлениями: психологическим рефлексология Бехтерева и Павлова теософскомистическим в лице русского космизма Е.
33850. Профессиональные заболевания медицинских работников 64.94 KB
  Медицинские работники занимают пятое место по распространенности профессиональной заболеваемости, опережая даже работников химической промышленности. Данные исследований, проведенных десятки лет назад и в последние десятилетия, убедительно свидетельствуют о том, что многие заболевания у медицинских работников являются профессиональными...
33851. ФИЛОСОФИЯ РУССКОГО КОСМИЗМА 13.87 KB
  Именно в космизме ставятся проблемы о космосе и человеке выдвигается положение о том что конец этого мира конец истории зависит и от творческого акта человека. необходимости нового сознательного развития мира когда человечество направляет его в ту сторону в какую диктует ему разум и нравственное чувство. Речь по существу идет о расширении прав сознательнодуховных сил об управлении духом материи об одухотворении мира и человека.
33852. Диалектика — учение о всеобщей связи и развитии 15.96 KB
  Они всегда влияют определенным образом друг на друга завцЬят друг от друга то есть находятся во взаимной связи и обусловленности. В поле зрения каждой из них находятся определенные предметы и явления а следовательно и определенные связи между ними. В социальных науках раскрываются разнообразные связи и зависимости различных общественных явлений например связь политики и экономики государства интересов различных классов и их экономического положения воздействие географической среды плотности населения и других явлений на темпы развития...
33853. Многозначность понятия природы 15.47 KB
  Природа может пониматься либо как абстракция либо как потенция либо как акт. Всякий раз следует обращать внимание на указанные обстоятельства при рассмотрении того или иного значения термина природа. Концепции природы до множества ипостасей одного вида: природаобразец и логос природы: 1 Природаобразец реально существующая до множества ипостасей данного вида а после их появления – отдельно от нихт. Тождественна платоновской идееОтметим что в данном значении термин природа не имел скольнибудь распространённого применения в...
33854. Духовные ценности и их роль в воспитании и образовании 14.12 KB
  Если предметные ценности выступают как объекты потребностей и интересов человека то ценности сознания выполняют двоякую функцию: они суть самостоятельная сфера ценностей и основание критерий оценки предметных ценностей. Особенностью высших ценностей выступает также и то что они составляют стержень культуры определенного народа фундаментальные отношения и потребности людей: общечеловеческие мир жизнь человечества ценности общения дружба любовь доверие семья социальные ценности представления о социальной справедливости свободе...
33855. Человечество 15.75 KB
  Человечество становится единым целым в ходе отношений в эпоху открытия мирового рынка. повсеместные охватывают все челво; от решения этих проблем зависит существование челва; решение требует усилий больва челва.Угрозы: Экологические катастрофы; Деградация челва; Мировая война. Человек – биологический вид и ему необходимы привычные условия обитания.