Алгоритмы вычерчивания графических примитивов
Разработка программы с целью создания изображений графических примитивов на поверхности формы. Передача координат и плоскости рисования в функцию алгоритма разложения прямой линии. Расчет параметров для построения круга, особенности прорисовки эллипса.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 27.04.2012 |
Размер файла | 220,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
1
Контрольная работа
«Алгоритмы вычерчивания графических примитивов»
Цель работы: Разработать алгоритмы и написать программу, которая будет изображать на поверхности формы графические примитивы: линии, круги, эллипсы.
Выполнение задания:
Поскольку экран растрового дисплея с электронно-лучевой трубкой или ЖК - экраном можно рассматривать как матрицу дискретных элементов (пикселей), каждый из которых может быть подсвечен, нельзя непосредственно провести отрезок из одной точки в другую. Процесс определения пикселей, наилучшим образом аппроксимирующих заданный отрезок, называется разложением в растр.
Рассмотрим:
1. Алгоритм разложения в растр прямой линии.
Рис. 1. Растеризация отрезка прямой линии
графический примитив алгоритм линия круг
Растром называется прямоугольная сетка точек, формирующих изображение на экране компьютера. Каждая точка растра характеризуется двумя параметрами: своим положением на экране и своим цветом. Растровые изображения состоят из множества дискретных точек, для работы с ними необходимы специальные алгоритмы.
Рисование отрезка прямой линии - одна из простейших задач растровой графики. Смысл ее заключается в вычислении координат пикселей, находящихся вблизи непрерывных отрезков, лежащих на двумерной растровой сетке.
Размещено на http://www.allbest.ru/
1
Рис. 2. Алгоритм разложения в растр прямой линии
В функцию алгоритма разложения передаются начальные и конечные координаты, а также плоскость рисования Canvas. Первое, что нужно определить это длину по оси oX или oY, в зависимости от того, которая длиннее:
if abs(X2 - X1) >= abs(Y2 - Y1) then Length := abs(X2 - X1)
else Length := abs(Y2 - Y1);
Теперь определим приращения для каждой оси:
dX := (X2 - X1) / Length;
dY := (Y2 - Y1) / Length;
Имея приращения и длину линии, можно построить прямую, но для начала нужно задать начальные координаты построения линии:
X := X1 + 0.5 * Sign(dX);
Y := Y1 + 0.5 * Sign(dY);
Здесь Sign - функция, которая возвращает -1, если число отрицательно; 1, если число положительно; и 0, если число равно нулю.
Теперь зададим переменную i в начальное состояние:
i := 1;
И запусти цикл, в котором будет осуществляться приращение координат, переменной i и прорисовка в полученных координатах точки, цикл закончится только, когда i <= Length:
i := 1;
While i <= Length do begin
Canvas.Pixels[Trunc(X), Trunc(Y)] := clBlue;
X := X + dX;
Y := Y + dY;
i := i + 1
end;
2. Алгоритм построения круга.
Размещено на http://www.allbest.ru/
1
Рис. 3. Круг
Круг - геометрическое место точек плоскости, расстояние от которых до заданной точки, называемой центром круга, не превышает заданного неотрицательного числа, называемого радиусом этого круга. Если радиус равен нулю, то круг вырождается в точку.
Для построения круга нам также понадобятся координаты левого верхнего угла круга X1 и Y1 и координаты правого нижнего X2 и Y2, а также плоскость рисования Canvas.
Определим радиус
R := abs(X2 - X1) div 2.
Точку центра круга определим как:
X := X1 + (X2 - X1) div 2;
Y := Y1 + (Y2 - Y1) div 2;
Теперь зададим нулевой градус: i := 0 и в цикле, пока i не будет <= 359 градусов будем выводит точки по радиусу круга от его центра, а приращение градусов будем делать по 30 минут, для увеличения точности прорисовки контура:
While i <= 359 do begin
Canvas.Pixels[Trunc(X + R * Sin(i)), Trunc(Y + R * Cos(i))] := clRed;
i := i + 0.3
end;
3. Алгоритм построения эллипса.
Рис. 4. Эллипс
Эллипсом - называется геометрическое место точек, сумма расстояний от которых до двух заданных точек F1 и F2, называемых фокусами эллипса, есть величина постоянная.
Этот алгоритм отличается только лишь тем, что используется не один радиус, а два: по оси oX и oY. Соответственно прорисовка изменится только лишь приращениями разных радиусов:
Canvas.Pixels[Trunc(X + xR * Sin(i)), Trunc(Y + yR * Cos(i))] := clLime;
Рис. 5. Построение эллипса
Блок-схемы алгоритмов:
Блок-схема линии
Размещено на http://www.allbest.ru/
1
Блок-схема круга
Размещено на http://www.allbest.ru/
1
Блок-схема эллипса
Размещено на http://www.allbest.ru/
1
Листинг программы:
unit ULab1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, XPMan;
type
TMainForm = class(TForm)
ButtonClear: TButton;
ElementsGroup: TRadioGroup;
PaintBox: TPaintBox;
procedure ButtonClearClick(Sender: TObject);
procedure PaintBoxPaint(Sender: TObject);
procedure PaintBoxMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure PaintBoxMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
end;
var
MainForm: TMainForm;
SX, SY: Word;
procedure Line(X1, Y1, X2, Y2: Word; Canvas: TCanvas);
procedure Circle(X1, Y1, X2, Y2: Word; Canvas: TCanvas);
procedure Ellipse(X1, Y1, X2, Y2: Word; Canvas: TCanvas);
implementation
{$R *.dfm}
function Sign(Val: Single): ShortInt;
begin
if Val > 0 then Result := 1 else
if Val < 0 then Result := -1
else Result := 0
end;
procedure Line(X1, Y1, X2, Y2: Word; Canvas: TCanvas);
var i, Leng: Word;
X, Y, dX, dY: Single;
begin
if abs(X2 - X1) >= abs(Y2 - Y1) then Leng := abs(X1 - X2)
else Leng := abs(Y1 - Y2); // Длина
// Приращения
dX := (X2 - X1) / Leng;
dY := (Y2 - Y1) / Leng;
X := X1 + 0.5*Sign(dX);
Y := Y1 + 0.5*Sign(dY);
i := 1;
while i <= Leng do begin
Canvas.Pixels[Trunc(X), Trunc(Y)] := clBlue;
X := X + dX;
Y := Y + dY;
i := i + 1
end
end;
procedure Circle(X1, Y1, X2, Y2: Word; Canvas: TCanvas);
var R, X, Y: Word;
i: Single;
begin
R := abs(X1 - X2) div 2; // Радиус
// Центр
X := X1 + (X2 - X1) div 2;
Y := Y1 + (Y2 - Y1) div 2;
i := 0;
While i <= 359 do begin
Canvas.Pixels[Trunc(X + R * Sin(i)), Trunc(Y + R * Cos(i))] := clRed;
i := i + 0.1
end;
end;
procedure Ellipse(X1, Y1, X2, Y2: Word; Canvas: TCanvas);
var xR, yR, X, Y: Word;
i: Single;
begin
xR := abs(X1 - X2) div 2; // Радиус X
yR := abs(Y1 - Y2) div 2; // Радиус Y
// Центр
X := X1 + (X2 - X1) div 2;
Y := Y1 + (Y2 - Y1) div 2;
i := 0;
While i <= 359 do begin
Canvas.Pixels[Trunc(X + xR * Sin(i)), Trunc(Y + yR * Cos(i))] := clLime;
i := i + 0.1
end;
end;
procedure TMainForm.ButtonClearClick(Sender: TObject);
begin
with PaintBox.Canvas do begin
Brush.Color := clBlack;
FillRect(PaintBox.ClientRect)
end
end;
procedure TMainForm.PaintBoxPaint(Sender: TObject);
begin
ButtonClear.Click
end;
procedure TMainForm.PaintBoxMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SX := X;
SY := Y
end;
procedure TMainForm.PaintBoxMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
case ElementsGroup.ItemIndex of
0: Line(SX, SY, X, Y, PaintBox.Canvas);
1: Circle(SX, SY, X, Y, PaintBox.Canvas);
2: Ellipse(SX, SY, X, Y, PaintBox.Canvas);
end
end;
end.
Вывод: В ходе проделанной контрольной работы были разработаны алгоритмы. Была написана программа, которая изображает на поверхности формы графические примитивы: линии, круги, эллипсы.
Размещено на Allbest.ru
Подобные документы
Разработка программы AutoCAD как двух- и трёхмерная система автоматизированного проектирования и черчения. Использование элементарных графических примитивов: точки, отрезка, круга, дуги, прямой, эллипса, сплайна, полилинии, мультилинии и мультитекста.
реферат [147,7 K], добавлен 22.11.2011Интегрированная среда программирования C++ Builder 6. Методы вычерчивания графических примитивов. Основные свойства инструментов рисования. Разработка рисунка паутины с центром в точке с произвольным числом лучей. Алгоритм программы в виде блок-схемы.
курсовая работа [842,5 K], добавлен 13.10.2017Особенности формирования растрового изображения. Графические примитивы, которые используются наиболее часто в современных графических системах (линии и фигуры). Основные алгоритмы создания растровых изображений в графических компьютерных программах.
презентация [883,6 K], добавлен 26.01.2015Существующие методы нахождения графических примитивов и программных реализаций. Базовое преобразование Хафа: поиск прямых, выделение окружностей на изображении, нахождение кривых высшего порядка. Составление руководства программиста и пользователя.
курсовая работа [2,7 M], добавлен 20.03.2012Растровые и векторные графические редакторы. Формирование изображений, форматы графических файлов. Особенности векторной графики, ее достоинства. Построение треугольника и гиперболы по алгоритму Бразенхема. Математические модели поверхностей и объектов.
курсовая работа [769,5 K], добавлен 21.12.2013Характеристика методов изображения графических элементов. Особенности вычерчивания прямой линии, прямоугольника, окружности, дуги. Порядок вывода текста на канву. Текст программы для построения электрической схемы на языке программирования C++Builder.
контрольная работа [1,7 M], добавлен 25.10.2012Описание математических методов представления и обработки графических изображений. Описание разработанного программного дополнения. Описание функций и их атрибутов. Представление и обработка графических изображений. Результаты тестирования программы.
курсовая работа [1,7 M], добавлен 27.01.2015Методы вывода графических примитивов в программе Delphi. Основные методы, объявленные в классе TCanvas. Использование объектов Brush, Pen, Front. Примеры применения функции Round Rect. Отличия способов рисования прямоугольника Polyline и Polygon.
курсовая работа [834,1 K], добавлен 17.09.2014Общие сведения о графических редакторах, понятия компьютерной растровой и векторной графики, форматов. Обзор и сравнительный анализ современных программ обработки и просмотра графических изображений: Paint, Corel Draw, Adobe Photoshop, MS PowerPoint.
дипломная работа [283,9 K], добавлен 09.08.2010Файлы BGI и содержимое модуля Graph, инициализация и закрытие графических режимов, их классификация, анализ и управление. Рисование графических примитивов и фигур, управление цветами и шаблонами, вывод текста, выбор шрифта и стиля, сжатия изображения.
реферат [65,3 K], добавлен 31.05.2010