Удаление невидимых линий и поверхностей

Рассмотрение теоретических основ машинной графики. Описание алгоритма удаления невидимых линий и поверхностей алгоритмом "плавающего горизонта" на трехмерных поверхностях. Создание программы Borland Delphi 7 и составление инструкции пользователя.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 28.04.2014
Размер файла 654,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Аннотация

В работе представлены теоретические основы машинной графики, необходимые для организации алгоритмов удаления невидимых линий и поверхностей. Согласно теоретическому алгоритму, была создана компьютерная программа. Программа разработана в среде программирования Borland Delphi 7, позволяет пользователю программы реализовать удаление невидимых линий и поверхностей путем Алгоритма "Плавающего горизонта" на трехмерных поверхностях.

алгоритм невидимый линия поверхность

Содержание

  • Цель работы
  • Введение
  • 1. Описание алгоритма удаления невидимых линий и поверхностей алгоритмом плавающего горизонта
    • 1.1 Общий алгоритм(описание алгоритма)
  • 2. Структура программы
  • 3. Описание программы
  • 4. Инструкция пользователю
  • 5. Алгоритм реализации
    • 6. Описание программного продукта
    • 6.1 Аппаратно-программные средства
    • 6.2 Язык и среда программирования
      • Приложение
      • Цель работы
      • Заданием предполагается реализовать удаление невидимых линий и поверхностей путем Алгоритма "Плавающего горизонта".
      • Требуется реализовать данный алгоритм и продемонстрировать его реализацию на трехмерных поверхностях, при этом поверхности задаются аналитически.
      • Введение
      • Задача удаления невидимых линий и поверхностей является одной из наиболее сложных в машинной графике. Алгоритмы удаления невидимых линий и поверхностей служат для определения линий ребер, поверхностей или объемов, которые видимы или невидимы для наблюдателя, находящегося в заданной точке пространства.
      • Сложность задачи удаления невидимых линий и поверхностей привела к появлению большого числа различных способов ее решения. Многие из них ориентированы на специализированные приложения. Наилучшего решения общей задачи удаления невидимых линий и поверхностей нет.
      • Существует тесная взаимосвязь между скоростью работы алгоритма и детальностью его результата. Ни один из алгоритмов не может достигнуть хороших оценок для этих двух показателей одновременно. По мере создания все более быстрых алгоритмов можно строить все более детальные изображения. Реальные задачи, однако, всегда будут требовать учета еще большего количества деталей.
      • Все алгоритмы удаления невидимых линий (поверхностей) включают в себя сортировку. Порядок, в котором производится сортировка координат объектов, вообще говоря, не влияет на эффективность этих алгоритмов. Главная сортировка ведется по геометрическому расстоянию от тела, поверхности, ребра или точки до точки наблюдения. Основная идея, положенная в основу сортировки по расстоянию, заключается в том, что чем дальше расположен объект от точки наблюдения, тем больше вероятность, что он будет полностью или частично заслонен одним из объектов, более близких к точке наблюдения. После определения расстояний или приоритетов по глубине остается провести сортировку по горизонтали и по вертикали, чтобы выяснить, будет ли рассматриваемый объект действительно заслонен объектом, расположенным ближе к точке наблюдения. Эффективность любого алгоритма удаления невидимых линий или поверхностей в большой мере зависит от эффективности процесса сортировки.
      • Алгоритмы удаления невидимых линий или поверхностей можно классифицировать по способу выбора системы координат или пространства, в котором они работают. Алгоритмы, работающие в объектном пространстве, имеют дело с физической системой координат, в которой описаны эти объекты. При этом получаются весьма точные результаты, ограниченные, вообще говоря, лишь точностью вычислений. Полученные изображения можно свободно увеличивать во много раз. Алгоритмы, работающие в объектном пространстве, особенно полезны в тех приложениях, где необходима высокая точность. Алгоритмы же, работающие в пространстве изображения, имеют дело с системой координат того экрана, на котором объекты визуализируются. При этом точность вычислений ограничена разрешающей способностью экрана. Обычно разрешение экрана бывает довольно низким, типичный пример-- 512x512 точек. Результаты, полученные в пространстве изображения, а затем увеличенные во много раз, не будут соответствовать исходной сцене. Например, могут не совпасть концы отрезков. Алгоритмы, формирующие список приоритетов, работают попеременно в обеих упомянутых системах координат.
      • Объем вычислений для любого алгоритма, работающего в объектном пространстве, и сравнивающего каждый объект сцены со всеми остальными объектами этой сцены, растет теоретически как квадрат числа объектов (n2).
      • Аналогично, объем вычислений любого алгоритма, работающего в пространстве изображения и сравнивающего каждый объект сцены с позициями всех пикселов в системе координат экрана, растет теоретически, как nN. Здесь п обозначает количество объектов (тел, плоскостей или ребер) в сцене, а N -- число пикселов. Теоретически трудоемкость алгоритмов, работающих в объектном пространстве, меньше трудоемкости алгоритмов, работающих в пространстве изображения, при n<N. Поскольку N обычно равно (512)2, то теоретически большинство алгоритмов следует реализовывать в объектном пространстве. Однако на практике это не так. Дело в том, что алгоритмы, работающие в пространстве изображения, более эффективны потому, что для них легче воспользоваться преимуществом когерентности при растровой реализации.

1. Описание алгоритма удаления невидимых линий и поверхностей алгоритмом плавающего горизонта

1.1 Общий алгоритм (Описание алгоритма)

Алгоритм плавающего горизонта чаше всего используется для удаления невидимых линий трехмерного представления функций, описывающих поверхность в виде:

F(x, у, z) = 0.

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

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

На рис.10.2 приведен пример, где указанные параллельные плоскости определяются постоянными значениями z. Функция F(x,у,z) = 0 сводится к последовательности кривых, лежащих в каждой из этих параллельных плоскостей, например к последовательности

у = f(x, z) или х = g (у, z)

где z постоянно на каждой из заданных параллельных плоскостей.

Итак, поверхность теперь складывается из последовательности кривых, лежащих в каждой из этих плоскостей, как показано на рис. 10.3. Здесь предполагается, что полученные кривые являются однозначными функциями независимых переменных. Если спроецировать полученные кривые на плоскость z=0, как показано на рис.10.4, то сразу становится ясна идея алгоритма удаления невидимых участков исходной поверхности. Алгоритм сначала упорядочивает плоскости z=const по возрастанию расстояния до них от точки наблюдения. Затем для каждой плоскости, начиная с ближайшей к точке наблюдения, строится кривая, лежащая на ней, т. е. для каждого значения координаты х в пространстве изображения определяется соответствующее значение y. Алгоритм удаления невидимой линии заключается в следующем:

Если на текущей плоскости при некотором заданном значении x соответствующее значение у на кривой больше значения y для всех предыдущих кривых при этом значении x, то текущая кривая видима в этой точке; в противном случае она невидима.

Невидимые участки показаны пунктиром на рис. 10.4. Реализация данного алгоритма достаточно проста. Для хранения максимальных значений y при каждом значении x используется массив, длина которого равна числу различимых точек (разрешению) по оси x в пространстве изображения. Значения, хранящиеся в этом массиве, представляют собой текущие значения "горизонта". Поэтому по мере рисования каждой очередной кривой этот горизонт "всплывает". Фактически этот алгоритм удаления невидимых линий работает каждый раз с одной линией. Алгоритм работает очень хорошо до тех пор, пока какая-нибудь очередная кривая не окажется ниже самой первой из кривых, как показано на рис. 10.5а.

Подобные кривые, естественно, видимы и представляют собой нижнюю сторону исходной поверхности, однако алгоритм будет считать их невидимыми. Нижняя сторона поверхности делается видимой, если модифицировать этот алгоритм, включив в него нижний горизонт, который опускается вниз по ходу работы алгоритма. Это реализуется при помощи второго массива, длина которого равна числу различимых точек по оси x в пространстве изображения. Этот массив содержит наименьшие значения y для каждого значения x. Алгоритм теперь становится таким:

Если на текущей плоскости при некотором заданном значении x соответствующее значение y на кривой больше максимума или меньше минимума по y для всех предыдущих кривых при этом x, то текущая кривая видима. В противном случае она невидима.

Полученный результат показан на рис.10.5b.

В изложенном алгоритме предполагается, что значение функции, т.е. y, известно для каждого значения x в пространстве изображения. Однако если для каждого значения х нельзя указать (вычислить) соответствующее ему значение y, то невозможно поддерживать массивы верхнего и нижнего плавающих горизонтов. В таком случае используется линейная интерполяция значений y между известными значениями для того, чтобы заполнить массивы верхнего и нижнего плавающих горизонтов, как показано на рис. 10.6. Если видимость кривой меняется, то метод с такой простой интерполяцией не даст корректного результата. Этот эффект проиллюстрирован рис. 10.7а. Предполагая, что операция по заполнению массивов проводится после проверки видимости, получаем, что при переходе текущей кривой от видимого к невидимому состоянию (сегмент AB на рис. 10.7а), точка (XN+K,YN+K) объявляется невидимой. Тогда участок кривой между точками (XN,YN) и (XN+K,YN+K) не изображается и операция по заполнению массивов не проводится. Образуется зазор между текущей и предыдущей кривыми. Если на участке текущей кривой происходит переход от невидимого состояния к видимому (сегмент CD на рис.10.7а), то точка (XM+K,YM+K) объявляется видимой, а участок кривой между точками (XM,YM) и (XM+K,YM+K) изображается и операция по заполнению массивов проводится. Поэтому изображается и невидимый кусок сегмента CD. Кроме того, массивы плавающих горизонтов не будут содержать точных значений y. А это может повлечь за собой дополнительные нежелательные эффекты для последующих кривых.

Следовательно, необходимо решать задачу о поиске точек пересечения сегментов текущей и предшествующей кривых.

Существует несколько методов получения точек пересечения кривых. На растровых дисплеях значение координаты x можно увеличивать на 1, начиная с xn или xm (рис.10.7а). Значение y, соответствующее текущему значению координаты x в пространстве изображения, получается путем добавления к значению y, соответствующему предыдущему значению координаты x, вертикального приращения ?y вдоль заданной кривой. Затем определяется видимость новой точки с координатами (x+1,у + dy). Если эта точка видима, то активируется связанный с ней пиксел. Если невидима, то пиксел не активируется, а x увеличивается на 1. Этот процесс продолжается до тех пор, пока не встретится xn+k или xm+k. Пересечения для растровых дисплеев определяются изложенным методом с достаточной точностью.

Теперь алгоритм излагается более формально.

Если на текущей плоскости при некотором заданном значении x соответствующее значение у на кривой больше максимума или меньше минимума по y для всех предыдущих кривых при этом, то текущая кривая видима. В противном случае она невидима. Если на участке от предыдущего (xn) до текущего (xn+k) значения x видимость кривой изменяется, то вычисляется точка пересечения (xi). Если на участке от xn до xn+k сегмент кривой полностью видим, то он изображается целиком; если он стал невидимым, то изображается фрагмент от xn до xi; если же он стал видимым, то изображается фрагмент от xi до xn+k. Заполнить массивы верхнего и нижнего плавающих горизонтов.

Типичный результат работы алгоритма:

2. Структура программы

Программа в основном состоит из трех основных частей:

1. Функция вычисления значения функции в данных точках.

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

3. Интерфейсная часть. Т.е та часть программы которая отвечает за правильное общение пользователя с предоставленными ему возможностями.

Методы реализации:

1.Процедура вычисления значения полученной точки по введенным в неё параметрам является, на мой взгляд, тривиальной:

Процедура получения значения функции

Передаваемые параметры: X, Z

На выходе: Y

Y=значение функции в точке (x,z)

Например: Х=1, Z=1, F(x)=У=x^2+z^2

Тогда при заданных значениях X и Z получим: Y = 2.

2.Процедура расчета точек, которые необходимо вывести на экран для получения нужного изображения, заключается в том, что для получения точек, к координатам X,Y,Z применяется видовое преобразование. Т.е точка из трехмерного пространства переводится в двумерное (путем параллельного проецирования):

Перед визуализацией поверхности необходимо применить видовое преобразование. Поверхность сначала надо повернуть на 30 градусов относительно оси Y, затем на какой-либо угол относительно оси X. Результат проецируется на плоскость Z=0 из центра проекции, находящейся в бесконечности на оси +Z.

Т.е сначала получаются точки в трехмерном пространстве, а затем они проектируются на плоскость ХОУ таким образом:

Хэкрана=Хтрехмерный*cos(alfa)+Zтрехмерный*sin(alfa)

Yэкрана=Хтрехмерный *sin(alfa)*sin(beta)+Yтрехмерный*cos(beta)-Zтрехмерный*sin(beta)*cos(alfa)

3. Интерфейсная часть реализовывается согласно потребностям пользователя в проделывании той или иной работы с поверхностью и её заданными границами определения.

3. Описание программы

Все возможные настройки можно определить путем нажатия на кнопку "Настройки". После появления окна можно производить манипуляции с параметрами программы. Окно настроек:

В программе имеется возможность сохранить результат работы алгоритма в BMP файл, что, на мой взгляд, является одним из её положительных качеств. (Например: преподавателю нужны графики трехмерных функций для проведения лекции).

4. Инструкция пользователю

В данной программе пользователь не ограничивается в своих действиях. Т.е программе не важно то обстоятельство правильны ли те параметры которые указал пользователь.

Самым неудачным результатом работы программы может быть отсутствие изображения на экране. Это значит то, что не верно задан один из параметров.

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

Также следует обращать внимание на коэффициент умножения по У, если он будет равен 0 то пользователь соответственно ничего не увидит.

5. Алгоритм реализации

Переменные:

Dx приращение по Х

Dz приращение по Z

Lengx длинна отрезка Х

Lengz длинна отрезка Z

x0,y0,z0,x1,y1,z1 пременные начала и конца по заданной координате.

Scaley коэффициент умножения по У

hor1 массив[0..кол-во точек по Х]

hor2 массив[0.. кол-во точек по Х]

i,ik переменные для организации внутрипрограммных циклов

alfa,beta переменные определяющие углы проецирования.

Функция fy(Параметры x,z) //Вызывается для расчета текущих значений

Начало

fy:=(cos(x*x-z*z+2)*20/(x*x-x+z*z+1));

Конец

procedure func3d(Параметры cu,cd - цвета горизонтов);

x,z текущие координаты.

rx,ry преобразованные координаты.

rxt,ryt временные значения.

flag1,flag2 флаги.

Xv для перехода к следующей координате Х.

Начало

1 Присваиваем обоим флагам значение "Истина"

2 Присваиваем текущему Z Z Начальное.

3 Пока не обработали все Z делаем:

3.1 присваиваем текущему Х значение Х начального.

3.2 Пока не обработали все Х делаем:

3.2.1Наращиваем xv.

3.2.2Наращиваем Х на приращение по Х

3.2.3 Вычислим промежуточные значения.rxt,ryt

3.3.4 Производим над координатами операцию видового преобразования.

3.3.5 Присваиваем обоим флагам значение "Истина"

3.3.6 Обрабатываем первый горизонт: Если значение по У в данной точке х меньше чем для предыдущей Z, то запоминаем его в массив, и присваиваем флагу1 "Ложь"

3.3.7 Обрабатываем второй горизонт: Если значение по У в данной точке х больше чем для предыдущей Z, то запоминаем его в массив, и присваиваем флагу2 "Ложь".

3.3.8 Если флаг1 "Ложь" то вывести данную точку определенного цвета на экран.

3.3.9 Если флаг2 "Ложь" то вывести данную точку другого цвета на экран.

Обработали все X конец цикла.

3.4 Наращиваем Z на его приращение.

3.5 Конец цикла по Z.

4 Конец процедуры.

Данная вставка используется для инициализации горизонтов:

for i:=0 to 639 do hor1[i]:=0; верхний горизонт.

for i:=0 to 639 do hor2[i]:=480; нижний горизонт.

6. Описание программного продукта

6.1 Программно-аппаратные требования

Для корректной работы программы необходимы следующие системные требования:

*Операционная система Windows XP/Vista/7

*Видеоадаптер 8 МБ RAM

*Оперативная память объемом 256 МБ

*Клавиатура, мышь

* 2 МБ свободной памяти на жестком диске

6.2 Язык и среда программирования

В данной работе, при описании алгоритма, был использован язык Delphi, как один из наиболее доступных и максимально подходящих для описания поставленной задачи. Использована программа Borland Delphi 7.

Приложение

Текст программы.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls;

const Maxx=641;

type

TForm1 = class(TForm)

Image1: TImage;

Button1: TButton;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Button5: TButton;

Label1: TLabel;

Button6: TButton;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

dx,dz:real;

lengx,lengz:real;

x0,y0,z0,x1,y1,z1:real;

scalex,scaley:real;

gd,gm:integer;

hor1:array[0..Maxx]of integer;

hor2:array[0..Maxx]of integer;

i,ik:integer;

alfa,beta:real;

implementation

uses Unit2, Unit3;

{$R *.dfm}

Function fy(x,z:real):real;

begin

fy:=cos(x*x-z*z+2)*20/(x*x-x+z*z+1);

end;

Function fy1(x,z:real):real;

var a:real;

begin

a:=sqr(x-pi)+sqr(z-pi);

fy1:=(1/5)*sin(x)*cos(z)-(3/2)*cos(7*a/4)*exp(-a);

end;

procedure func3d(cu,cd:integer);

var x,z:real;

rx,ry:integer;

rxt,ryt:real;

flag1,flag2:boolean;

xv:integer;

begin

flag1:=true;flag2:=true;

z:=z0;

while( z<z0+lengz) do

begin

x:=x0;

xv:=0;

while x<x0+lengx do

begin

inc(xv);

x:=x+dx;

rxt:=xv;

ryt:=(fy(x,z)*scaley);

rx:=round(rxt*cos(alfa)+z*sin(alfa));

ry:=round(rxt*sin(alfa)*sin(beta)+ryt*cos(beta)-z*sin(beta)*cos(alfa));

flag1:=true;

flag2:=true;

if(hor1[rx]<ry) then

begin

flag1:=false;

hor1[rx]:=ry;

end;

if(hor2[rx]>ry) then

begin

flag2:=false;

hor2[rx]:=ry;

end;

if(not(flag1))then

begin

form1.Image1.canvas.pixels[rx,round(form1.image1.height/2)-ry-round(Strtofloat(form2.Edit13.Text))]:=ClGreen;

end

else if(not(flag2)) then form1.Image1.canvas.pixels[rx,round(form1.image1.height/2)-ry-round(Strtofloat(form2.Edit13.Text))]:=ClBlue;

end;

z:=z+dz;

end;

end;

procedure func3d1(cu,cd:integer);

var x,z:real;

rx,ry:integer;

rxt,ryt:real;

flag1,flag2:boolean;

xv:integer;

begin

flag1:=true;flag2:=true;

z:=z0;

while( z<z0+lengz) do

begin

x:=x0;

xv:=0;

while x<x0+lengx do

begin

inc(xv);

x:=x+dx;

rxt:=xv;

ryt:=(fy1(x,z)*scaley);

rx:=round(rxt*cos(alfa)+z*sin(alfa));

ry:=round(rxt*sin(alfa)*sin(beta)+ryt*cos(beta)-z*sin(beta)*cos(alfa));

flag1:=true;

flag2:=true;

if(hor1[rx]<ry) then

begin

flag1:=false;

hor1[rx]:=ry;

end;

if(hor2[rx]>ry) then

begin

flag2:=false;

hor2[rx]:=ry;

end;

if(not(flag1))then

begin

form1.Image1.canvas.pixels[rx,round(form1.image1.height/2)-ry-round(Strtofloat(form2.Edit13.Text))]:=ClGreen;

end

else if(not(flag2)) then form1.Image1.canvas.pixels[rx,round(form1.image1.height/2)-ry-round(Strtofloat(form2.Edit13.Text))]:=ClBlue;

end;

z:=z+dz;

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Button2.click;

If radiobutton2.checked then

Begin

with form2 do

begin

if radiobutton1.Checked then

begin

alfa:=Pi/180*30;

beta:=pi/180*15;

end;

if radiobutton2.Checked then

begin

alfa:=Pi/180*45;

beta:=pi/180*15;

end;

if radiobutton3.Checked then

begin

alfa:=Pi/180*5;

beta:=pi/180*45;

end;

x0:=StrtoFloat(Edit5.text); //-6

x1:=StrtoFloat(Edit6.text); //6

Lengx:=x1-x0;

dx:=lengx/Image1.Width;

z0:=StrtoFloat(Edit7.text); //-6

z1:=StrtoFloat(Edit8.text); //6

lengz:=z1-z0;

dz:=StrtoFloat(Edit10.text); //0.05

scaley:=StrtoFloat(Edit12.text); //10

end;

for i:=0 to Maxx do hor1[i]:=0;

for i:=0 to Maxx do hor2[i]:=417;

func3d(2,4);

end;

If radiobutton1.checked then

Begin

with form2 do

begin

if radiobutton1.Checked then

begin

alfa:=Pi/180*30;

beta:=pi/180*15;

end;

if radiobutton2.Checked then

begin

alfa:=Pi/180*45;

beta:=pi/180*15;

end;

if radiobutton3.Checked then

begin

alfa:=Pi/180*5;

beta:=pi/180*45;

end;

x0:=StrtoFloat(Edit1.text); //0

x1:=StrtoFloat(Edit2.text); //2pi

Lengx:=x1-x0;

dx:=lengx/Image1.Width;

z0:=StrtoFloat(Edit3.text); //0

z1:=StrtoFloat(Edit4.text); //4pi

lengz:=z1-z0;

dz:=StrtoFloat(Edit9.text); //0.1

scaley:=StrtoFloat(Edit11.text); //80

end;

for i:=0 to Maxx do hor1[i]:=0;

for i:=0 to Maxx do hor2[i]:=417;

func3d1(2,4);

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

Var x,y:integer;

begin

for y:=0 to image1.Height do

for x:=0 to image1.Width do

Image1.Canvas.Pixels[x,y]:=clblack;

end;

procedure TForm1.Button2Click(Sender: TObject);

Var x,y:integer;

begin

for y:=0 to image1.Height do

for x:=0 to image1.Width do

Image1.Canvas.Pixels[x,y]:=clblack;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

Form2.show;

end;

procedure TForm1.Button5Click(Sender: TObject);

begin

Form1.Close;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

Form3.showmodal;

end;

procedure TForm1.Button6Click(Sender: TObject);

begin

Image1.Picture.Bitmap.SaveToFile('out.bmp');

end;

end.

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm2 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Edit6: TEdit;

Edit7: TEdit;

Edit8: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

RadioButton3: TRadioButton;

Label11: TLabel;

Button1: TButton;

Edit9: TEdit;

Label12: TLabel;

Edit10: TEdit;

Label13: TLabel;

Edit11: TEdit;

Label14: TLabel;

Edit12: TEdit;

Label15: TLabel;

Button2: TButton;

Edit13: TEdit;

Label16: TLabel;

Label17: TLabel;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);

begin

form1.button1.click;

Form2.Close;

end;

procedure TForm2.Button2Click(Sender: TObject);

begin

Form2.close;

end;

end.

Размещено на Allbest.ru


Подобные документы

  • Методика определения линий ребер, поверхностей или объемов, которые видимы или невидимы для наблюдателя, находящегося в заданной точке пространства. Сложность задачи удаления невидимых линий и поверхностей и пути ее разрешения, разработка алгоритмов.

    презентация [361,6 K], добавлен 14.08.2013

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

    презентация [145,7 K], добавлен 14.08.2013

  • Построение перспективной проекции, алгоритм удаления невидимых линий и поверхностей, получения изменений формы и движения объекта. Обобщенная структурная диаграмма программы, предназначение данных и основных переменных. Блок-схема процедур и функций.

    курсовая работа [2,0 M], добавлен 08.02.2011

  • Рассмотрение системы трехмерного твердотельного моделирования. Анализ средств программирования, информационное обеспечение и описание объектной модели Компас-3d. Описание алгоритма программы в среде Borland Delphi 7 и составление инструкции пользователя.

    дипломная работа [1,7 M], добавлен 03.07.2012

  • Понятие растра и растровой графики. Аффинные преобразования на плоскости и в пространстве. Цветовые модели RGB, MCYK. Алгоритмы вывода линий и фигур, устранения ступенчатости, удаления невидимых линий, закраски фигур. Графические эффекты, анимация.

    лекция [281,0 K], добавлен 26.07.2013

  • Написание программы для работы с клиентами средствами языка Delphi, которая предусматривает ввод, редактирование и удаление информации. Разработка алгоритма решения задачи, описание переменных, вспомогательных процедур, входных и выходных данных.

    курсовая работа [355,7 K], добавлен 21.09.2010

  • Обоснование языка программирования Object Pascal и среды разработки Delphi. Создание интерфейса пользователя. Проектирование структуры и описание компонентов, использованных при разработке программного продукта. Составление инструкции пользователя.

    курсовая работа [888,7 K], добавлен 20.05.2015

  • Borland Delphi 7 как универсальный инструмент разработки, применяемый во многих областях программирования, функции: добавление информации об абитуриентах в базу данных, формирование отчетов. Рассмотрение и характеристика основных компонентов Delphi.

    контрольная работа [3,6 M], добавлен 18.10.2012

  • Каркасная, поверхностная трехмерная модель. Геометрические преобразования объекта: перенос и поворот. Горизонтальная и аксонометрическая проекция. Перспективная проекция без видового преобразования. Удаление невидимых линий и закраска с учётом освещения.

    курсовая работа [1,2 M], добавлен 24.03.2013

  • Группы и назначение алгоритмов машинной графики верхнего и нижнего уровня. Учет свойств поверхности тела. Уравнения линий, эллипсов. Построение окружностей аппроксимацией отрезками. Отсечение нелицевых граней. Принципы построения полутоновых изображений.

    презентация [10,4 K], добавлен 14.08.2013

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