Отображение фигуры относительно осей с изменением масштаба
Автор: Ngọc Ang Phạm • Сентябрь 29, 2021 • Лабораторная работа • 1,348 Слов (6 Страниц) • 470 Просмотры
МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра САПР
ОТЧЕТ
по лабораторной работе №1
по дисциплине «Компьютерная графика»
Тема: Отображение фигуры относительно осей с изменением масштаба
Студенты гр. 7362 | _______________ | Фам Нгок Ань. |
_______________ | Кочнев Т. | |
_______________ | Самолюк А. | |
Преподаватель | _______________ | Матвеева И.В. |
Санкт-Петербург
2021
Цель работы.
Отображение плоского объекта относительно осей координат с изменением или без изменения масштаба изображения.
Задание на работу.
Разработать программу, выполняющее отображение плоской фигуры относительно осей с изменением масштаба и положения фигуры.
Требуется выполнить отражение объекта относительно одной из двух осей. Это делается при помощи перемножения матрицы координат с вспомогательной матрицей:
- Относительно оси Х: [pic 1]
- Относительно оси Y: [pic 2]
Для изменения масштаба необходимо умножить матрицу описания объекта (матрица координаты треугольника) на следующую матрицу преобразования: , где а – коэффициент масштабирования ( В этом случае мы используем преобразование равномерного масштабирования).[pic 3]
Выполнение работы.
Программа разработана на языке С++ с использованием Qt.
Код приложения представлен в приложениях А-Г.
На слудующих картинах представлены результаты выполнения программы.
[pic 4]
Рисунок 1 – Результат при отражения относительно оси Oy
[pic 5]
Рисунок 2 – Результат при отражения относительно оси Ox
Выводы.
В данной лабораторной работе было рассмотрено и реализовано отображение треугольника относительно осей Х и Y с изменением его масштаба и положения.
ПРИЛОЖЕНИЕ А
Файл «main.cpp»
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
ПРИЛОЖЕНИЕ Б
Файл «mainwindow.cpp»
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPolygon>
#include<QMessageBox>
int Sx = 40;
int Sy = 40;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
scene = new QGraphicsScene(-500,-500, 1000,1000,nullptr);
ui->graphicsView->setScene(scene);
ui->graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
ui->graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
SetScene();
ui->dspb_Ax->setValue(0);
ui->dspb_Ay->setValue(0);
ui->dspb_Bx->setValue(0);
ui->dspb_By->setValue(0);
ui->dspb_Cx->setValue(0);
ui->dspb_Cy->setValue(0);
ui->dspb_coeff->setValue(0.4);
ui->rb_x->setChecked(true);
ui->rb_y->setChecked(false);
t = nullptr;
}
MainWindow::~MainWindow()
{
delete ui;
delete scene;
delete t;
}
void MainWindow::on_pbtn_exit_clicked()
{
exit(0);
}
void MainWindow::on_pbtn_draw_clicked()
{
scene->clear();
SetScene();
double A[2], B[2], C[2], coeff, res[3][2];
A[0] = ui->dspb_Ax->value() * Sx;
A[1] = ui->dspb_Ay->value() * Sy;
B[0] = ui->dspb_Bx->value() * Sx;
B[1] = ui->dspb_By->value() * Sy;
C[0] = ui->dspb_Cx->value()* Sx;
C[1] = ui->dspb_Cy->value() * Sy;
coeff = ui->dspb_coeff->value();
t = new Triangle(A,B,C);
if(!t->IsTriangle())
...