Алгоритмы отсечения отрезков
Автор: Sinopticus • Ноябрь 25, 2020 • Лабораторная работа • 5,344 Слов (22 Страниц) • 367 Просмотры
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСТИЕТ
Лабораторная работа №5
по дисциплине «Компьютерная графика»
Алгоритмы отсечения отрезков
Группа: АВТ-510
Студенты: Куксова Е.С. и Рейнгардт Ю.А.
Преподаватель: Дружинин А.И.
Цель:
Изучить алгоритмы отсечения отрезков.
Задание:
1. Постройте окно отсечения.
2. Постройте отрезок, пересекающий окно отсечения.
3. Произведите отсечение отрезка с помощью любого алгоритма.
4. Выделите другим цветом отсекаемую часть отрезка.
5. Повторите п.п. 2 и 3 для полностью видимых и невидимых отрезков.
Ход работы:
В качестве инструмента был выбран язык С++, а также библиотека для графики OpenGL. Рисуем окно, пишем функции, используем их, сравниваем результат.
Текст программы:
#include <windows.h>
#include <glut.h> //Подключение библиотеки glut.h
#include <iostream>
using std::cin;
using std::cout;
void Initialize()
{
//Выбрать фоновый (очищающий) цвет
glClearColor(0.0, 0.2, 0.9, 0.0);//белый
//Установить проекцию
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}
#define SLEEP 3000 //пауза между отрисовками
#define PIXSIZE 10
#define S_WIDTH 1024
#define S_HEIGHT 768
int minX = -10, maxX = 10, minY = -10, maxY = 10;
float getX(int inp){ //Координаты Х
if (inp > 0){
return 0.5 + (1.0 / S_WIDTH)*(inp*PIXSIZE);
}
else if (inp < 0){
inp *= (-1);
if (inp > int(inp)) inp += 1.0;
return 0.5 - (1.0 / S_WIDTH)*(inp*PIXSIZE);
}
else return 0.5;
}
float getY(float inp){ //Координаты У
if (inp >= 0){
return 0.5 + (1.0 / S_HEIGHT)*(int(inp)*PIXSIZE);
}
else if (inp < 0){
...