Преобразование изображений
Автор: Акежан Амирханов • Ноябрь 3, 2021 • Лабораторная работа • 2,975 Слов (12 Страниц) • 189 Просмотры
Карагандинский технический университет
Кафедра ИВС
Лабораторная работа №4
Дисциплина: «Компьютерная графика»
Тема: «Преобразование изображений»
Выполнил:
Студ. гр. ИС 19-3
Амирханов А.К.
Принял:
Преп.
Алина Г.Ж.
Караганда 2021
Лабораторная работа №4
Цель работы: овладение методами преобразования изображений.
Задание к работе 🡪 Вариант 2:
- Изучить возможности использования однородных координат для преобразования точек и прямых на плоскости.
- Рассмотреть частные случаи преобразований:
а) параллельный перенос;
б) поворот на угол [pic 1] вокруг начала координат;
в) симметрия относительно точки;
г) симметрия относительно оси;
д) масштабирование.
- Аппроксимировать многоугольником заданную фигуру (в соответствии с номером варианта). Составить программу, позволяющую выполнять перечисленные в п. 2 преобразования полученного многоугольника.
Вариант № 2
2. Пешка
Результаты выполнения программы:
[pic 2]
Рис.1 – фигура.
Листинг программы:
let grid = document.getElementById('canvas1');
let canvas = document.getElementById('canvas2');
let shovel = [
{
x: 1,
y: 1
},
{
x: 7,
y: 1
},
{
x: 5,
y: 5
},
{
x: 6,
y: 6
},
{
x: 5,
y: 7
},
{
x: 6,
y: 8
},
{
x: 6,
y: 10
},
{
x: 5,
y: 11
},
{
x: 3,
y: 11
},
{
x: 2,
y: 10
},
{
x: 2,
y: 8
},
{
x: 3,
y: 7
},
{
x: 2,
y: 6
},
{
x: 3,
y: 5
},
{
x: 1,
y: 1
},
];
if (grid.getContext) {
let ctx = grid.getContext('2d');
ctx.beginPath();
ctx.strokeStyle = "#ddd";
for (let x = 0; x < 800; x += 10) {
ctx.moveTo(x, 0);
ctx.lineTo(x, 800);
}
for (let y = 0; y < 800; y += 10) {
ctx.moveTo(0, y);
ctx.lineTo(800, y);
}
ctx.closePath();
ctx.stroke();
ctx.beginPath();
ctx.strokeStyle = "black";
ctx.moveTo(400, 0);
ctx.lineTo(400, 800);
ctx.moveTo(0, 400);
ctx.lineTo(800, 400);
ctx.closePath();
ctx.stroke();
}
if (canvas.getContext) {
let ctx = canvas.getContext('2d');
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
let radios = document.getElementsByName('radio');
for (let i = 0; i < radios.length; i++) {
if (radios[i].type == "radio" && radios[i].checked) {
ctx.beginPath();
if (radios[i].id == 'radio1') {
input1.type = 'hidden';
input2.type = 'hidden';
input1.disabled = true;
input2.disabled = true;
shovel.forEach(element => ctx.lineTo(400 + element.x * 10, 400 - element.y * 10));
ctx.stroke();
}
if (radios[i].id == 'radio2') {
...