Алгоритмы вычерчивания графических примитивов

Разработка программы с целью создания изображений графических примитивов на поверхности формы. Передача координат и плоскости рисования в функцию алгоритма разложения прямой линии. Расчет параметров для построения круга, особенности прорисовки эллипса.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.