Построение каркасного изображения тел в ортогональной и центральной проекциях

Изображение объектов на картинной плоскости. Проектирования при помощи пучка прямых. Параллельное и центральное виды проектирования. Расположение координатных осей. Построение центральных проекций. Прорисовка изображения на компоненте "Timage".

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

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

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

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

1. Формулировка задания курсового проекта

Построение каркасного изображения тел в ортогональной и центральной проекциях.

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

2. Теоретическое описание решения поставленной задачи

2.1 Виды проектирования

Изображение объектов на картинной плоскости связанно с геометрической операцией - проектирования при помощи пучка прямых. В компьютерной графике используется несколько различных видов проектирования. Наиболее употребимые на практике виды проектирования параллельное и центральное.

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

Для получения проекции объекта на картинную плоскость необходимо провести через каждую его точку прямую из заданного проектирующего пучка и затем найти координаты точки пересечения этой прямой с плоскостью изображения. В случае центрального проектирования все прямые исходят из одной точки - центра собственного пучка. При параллельном проектировании центр пучка считается лежащим в бесконечности.

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

изображение плоскость проекция параллельный

При ортографической проекции картинная плоскость совпадает с одной из координатных плоскостей или параллельна ей.

При аксонометрической проекции, прямые перпендикулярны картинной плоскости.

В соответствии со взаимным расположением плоскости проектирования координатных осей различают три вида проекций:

Триметрию- нормальный вектор картинной плоскости образует с ортами координатных осей попарно различные углы;

Диметрию- два угла между нормалью картинной плоскости и координатными осями равны ;

Изометрию- все три угла между нормалью картинной плоскости и координатными осями равны ;

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

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

Центральные проекции строятся более сложно.

Предположим, что центр проектирования лежит на оси Oz в точке С(0, 0, с) и плоскость проектирования совпадает с координатной плоскостью ХУ. Берем в пространстве произвольную точку M(x, y, z) проведем через нее и точку С прямую и получим соответствующие уравнения:

X*= xt,

Y*= yt,

Z*= c+(z-c)t;

Найдем координаты точки пересечения построенной прямой с плоскостью ХУ.

Из условия Z*=0 получаем, что

Программа реализована при помощи Borland C++ Builder 5.0.

Прорисовка изображения осуществляется на компоненте Timage.

В программе определенны следующие не стандартные функции:

void __fastcall DefCube(void);

void __fastcall DefTetr(void);

void __fastcall DefOct(void);

void __fastcall RexDraw(bool fl);

void __fastcall RexRotOX(bool fl);

void __fastcall RexRotOY(bool fl);

void __fastcall RexRotOZ(bool fl);

void __fastcall RexProection(bool fl);

Функции DefCube(void), void __fastcall DefTetr(void),

void __fastcall DefOct(void) заносят точки фигур - куба, тераэдера и октаэдера в массив структур

struct Matrix3D{float x, y, z;}

Функции void __fastcall RexRotOX(bool fl), void __fastcall RexRotOY(bool fl), void __fastcall RexRotOZ(bool fl) осуществляют вращение точек вокруг соответствующих осей по формулам:

вращение вокруг оси абцисс Ох

x*=x;

y*=y cos - z sin;

z*=y sin + z cos;

вращение вокруг оси ординат Оу

x*=x cos + z sin;

y*=y;

z*=x sin + z cos;

вращение вокруг оси аппликат Oz

x*=x cos - y sin;

y*=x sin + y cos;

z*=z;

переменная логического типа fl определяет поворот по часовой или против часовой стрелке будет происходить поворот.

Функция void __fastcall RexProection(bool fl) осуществляет проектирование точек трехмерного пространства на картинную плоскость. При этом точки переносятся в массив структур

Struct Matrix2D{float x, y;} точки картинной плоскости.

Параметр bool fl определяет тип проекции - центральная или паралельная.

Функция void __fastcall RexDraw(bool fl) производит прорисовку изображения на компоненте TImage при этом точки для прорисовки берутся из массива matr2d.

На второй форме приложения осуществляется выбор фигуры и вида проектирования.

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

//---------------------------------------------------------------------------

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

#include <vcl.h>

#include <math.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

struct Matrix3D

{

float x, y,z;

} matr3d[8];

struct Matrix2D

{

float x, y;

} matr2d[8];

float a[24], b[16];

float ks=cos(45*3.14/180);

float ksin=sin(40*3.14/3.14), kcos=cos(40*3.14/180);

int krot=1;

int midx, midy,l=500,r=60;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

midx=Image1->Width/2;

midy=Image1->Height/2;

Image1->Canvas->Brush->Color=clBlack;

Image1->Canvas->FillRect(Rect(0,0,midx*2,midy*2));

Image1->Canvas->Pen->Color=clBlue;

Image1->Canvas->Pen->Width=10;

DefCube();

RexProection(false);

RexDraw(false);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RexDraw(bool fl)

{int i;

if(!fl)

{

Image1->Canvas->FillRect(Rect(0,0,midx*2,midy*2));

Image1->Canvas->MoveTo(matr2d[3].x, matr2d[3].y);

for(i=0;i<=7;i++)

Image1->Canvas->LineTo(matr2d[i].x, matr2d[i].y);

Image1->Canvas->LineTo(matr2d[4].x, matr2d[4].y);

Image1->Canvas->MoveTo(matr2d[0].x, matr2d[0].y);

Image1->Canvas->LineTo(matr2d[5].x, matr2d[5].y);

Image1->Canvas->MoveTo(matr2d[1].x, matr2d[1].y);

Image1->Canvas->LineTo(matr2d[6].x, matr2d[6].y);

Image1->Canvas->MoveTo(matr2d[2].x, matr2d[2].y);

Image1->Canvas->LineTo(matr2d[7].x, matr2d[7].y);

}

else

{

if(Form2->RadioButton1->Checked)

{

Image1->Canvas->FillRect(Rect(0,0,midx*2,midy*2));

Image1->Canvas->MoveTo(matr2d[3].x, matr2d[3].y);

for(i=0;i<=7;i++)

Image1->Canvas->LineTo(matr2d[i].x, matr2d[i].y);

Image1->Canvas->LineTo(matr2d[4].x, matr2d[4].y);

Image1->Canvas->MoveTo(matr2d[0].x, matr2d[0].y);

Image1->Canvas->LineTo(matr2d[5].x, matr2d[5].y);

Image1->Canvas->MoveTo(matr2d[1].x, matr2d[1].y);

Image1->Canvas->LineTo(matr2d[6].x, matr2d[6].y);

Image1->Canvas->MoveTo(matr2d[2].x, matr2d[2].y);

Image1->Canvas->LineTo(matr2d[7].x, matr2d[7].y);

}

if(Form2->RadioButton2->Checked)

{

Image1->Canvas->FillRect(Rect(0,0,midx*2,midy*2));

Image1->Canvas->MoveTo(matr2d[3].x, matr2d[3].y);

for(i=0;i<=3;i++)

Image1->Canvas->LineTo(matr2d[i].x, matr2d[i].y);

Image1->Canvas->LineTo(matr2d[4].x, matr2d[4].y);

Image1->Canvas->MoveTo(matr2d[0].x, matr2d[0].y);

Image1->Canvas->LineTo(matr2d[4].x, matr2d[4].y);

Image1->Canvas->MoveTo(matr2d[1].x, matr2d[1].y);

Image1->Canvas->LineTo(matr2d[4].x, matr2d[4].y);

Image1->Canvas->MoveTo(matr2d[2].x, matr2d[2].y);

Image1->Canvas->LineTo(matr2d[4].x, matr2d[4].y);

}

if(Form2->RadioButton3->Checked)

{

Image1->Canvas->FillRect(Rect(0,0,midx*2,midy*2));

Image1->Canvas->MoveTo(matr2d[3].x, matr2d[3].y);

for(i=0;i<=3;i++)

Image1->Canvas->LineTo(matr2d[i].x, matr2d[i].y);

Image1->Canvas->LineTo(matr2d[4].x, matr2d[4].y);

Image1->Canvas->MoveTo(matr2d[0].x, matr2d[0].y);

Image1->Canvas->LineTo(matr2d[4].x, matr2d[4].y);

Image1->Canvas->MoveTo(matr2d[1].x, matr2d[1].y);

Image1->Canvas->LineTo(matr2d[4].x, matr2d[4].y);

Image1->Canvas->MoveTo(matr2d[2].x, matr2d[2].y);

Image1->Canvas->LineTo(matr2d[4].x, matr2d[4].y);

Image1->Canvas->MoveTo(matr2d[3].x, matr2d[3].y);

Image1->Canvas->LineTo(matr2d[5].x, matr2d[5].y);

Image1->Canvas->MoveTo(matr2d[0].x, matr2d[0].y);

Image1->Canvas->LineTo(matr2d[5].x, matr2d[5].y);

Image1->Canvas->MoveTo(matr2d[1].x, matr2d[1].y);

Image1->Canvas->LineTo(matr2d[5].x, matr2d[5].y);

Image1->Canvas->MoveTo(matr2d[2].x, matr2d[2].y);

Image1->Canvas->LineTo(matr2d[5].x, matr2d[5].y);

}

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RexRotOX(bool fl)

{int i,f;

float z,y;

if(fl) f=1;

else f=-1;

for(i=0;i<=7;i++)

{

z=matr3d[i].z;

y=matr3d[i].y;

matr3d[i].y=y*cos(krot*f*3.14/180)-z*sin(krot*f*3.14/180);

matr3d[i].z=y*sin(krot*f*3.14/180)+z*cos(krot*f*3.14/180);

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RexRotOY(bool fl)

{int i,f;

float x,z;

if(fl) f=1;

else f=-1;

for(i=0;i<=7;i++)

{

x=matr3d[i].x;

z=matr3d[i].z;

matr3d[i].x=x*cos(krot*f*3.14/180)+z*sin(krot*f*3.14/180);

matr3d[i].z=-x*sin(krot*f*3.14/180)+z*cos(krot*f*3.14/180);

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RexRotOZ(bool fl)

{int i,f;

float x,y;

if(fl) f=1;

else f=-1;

for(i=0;i<=7;i++)

{

x=matr3d[i].x;

y=matr3d[i].y;

matr3d[i].x=x*cos(krot*f*3.14/180)-y*sin(krot*f*3.14/180);

matr3d[i].y=x*sin(krot*f*3.14/180)+y*cos(krot*f*3.14/180);

}

}

void __fastcall TForm1::SpeedButton1Click(TObject *Sender)

{

RexRotOZ(true);

RexProection(true);

RexDraw(true);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::SpeedButton2Click(TObject *Sender)

{

RexRotOZ(false);

RexProection(true);

RexDraw(true);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RexProection(bool fl)

{int i;

float x, y, z;

for(i=0;i<=7;i++)

{ if(!fl)

{

matr2d[i].x=matr3d[i].x*kcos-matr3d[i].y*kcos+midx;

matr2d[i].y=matr3d[i].z-matr3d[i].y*ksin-matr3d[i].x*ksin+midy;

}

else

{

if(Form2->RadioButton4->Checked)

{x=matr3d[i].x;

y=matr3d[i].y;

z=matr3d[i].z;

matr2d[i].x=x*kcos-y*kcos+midx;

matr2d[i].y=z-y*ksin-x*ksin+midy;

}

if(Form2->RadioButton5->Checked)

{

x=matr3d[i].x;

y=matr3d[i].y;

z=matr3d[i].z;

x=(r+l)*x/(l+y);

z=(r+l)*z/(l+y);

matr2d[i].x=x-y*ks+midx;

matr2d[i].y=z-y*ks+midy;

}

}

}

}

void __fastcall TForm1::SpeedButton3Click(TObject *Sender)

{

RexRotOX(true);

RexProection(true);

RexDraw(true);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::SpeedButton4Click(TObject *Sender)

{

RexRotOX(false);

RexProection(true);

RexDraw(true);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::SpeedButton5Click(TObject *Sender)

{

RexRotOY(true);

RexProection(true);

RexDraw(true);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::SpeedButton6Click(TObject *Sender)

{

RexRotOY(false);

RexProection(true);

RexDraw(true);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::SpeedButton7Click(TObject *Sender)

{

if(Form2->ShowModal())

{

if(Form2->RadioButton1->Checked) DefCube();

if(Form2->RadioButton2->Checked) DefTetr();

if(Form2->RadioButton3->Checked) DefOct();

Image1->Canvas->Pen->Color=Form2->Panel6->Color;

Image1->Canvas->Brush->Color=Form2->Panel7->Color;

krot=Form2->TrackBar1->Position;

l=Form2->TrackBar3->Position;

RexDraw(true);

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::SpeedButton9Click(TObject *Sender)

{

Timer1->Enabled=true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::SpeedButton8Click(TObject *Sender)

{

Timer1->Enabled=false;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

RexRotOZ(true);

RexProection(true);

RexDraw(true);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::DefCube(void)

{

matr3d[0].x=40; matr3d[0].y=40; matr3d[0].z=40;

matr3d[1].x=-40;matr3d[1].y=40; matr3d[1].z=40;

matr3d[2].x=-40;matr3d[2].y=-40;matr3d[2].z=40;

matr3d[3].x=40; matr3d[3].y=-40;matr3d[3].z=40;

matr3d[4].x=40; matr3d[4].y=-40;matr3d[4].z=-40;

matr3d[5].x=40; matr3d[5].y=40; matr3d[5].z=-40;

matr3d[6].x=-40;matr3d[6].y=40; matr3d[6].z=-40;

matr3d[7].x=-40;matr3d[7].y=-40;matr3d[7].z=-40;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::DefTetr(void)

{

matr3d[0].x=40; matr3d[0].y=40; matr3d[0].z=40;

matr3d[1].x=-40;matr3d[1].y=40; matr3d[1].z=40;

matr3d[2].x=-40;matr3d[2].y=-40;matr3d[2].z=40;

matr3d[3].x=40; matr3d[3].y=-40;matr3d[3].z=40;

matr3d[4].x=0; matr3d[4].y=0;matr3d[4].z=-40;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::DefOct(void)

{

matr3d[0].x=40; matr3d[0].y=40; matr3d[0].z=0;

matr3d[1].x=-40;matr3d[1].y=40; matr3d[1].z=0;

matr3d[2].x=-40;matr3d[2].y=-40;matr3d[2].z=0;

matr3d[3].x=40; matr3d[3].y=-40;matr3d[3].z=0;

matr3d[4].x=0; matr3d[4].y=0;matr3d[4].z=-90;

matr3d[5].x=0; matr3d[5].y=0;matr3d[5].z=90;

}

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

/---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit2.h"

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm2 *Form2;

//---------------------------------------------------------------------------

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm2::FormCreate(TObject *Sender)

{ Panel6->Color=Form1->Image1->Canvas->Pen->Color;

Panel7->Color=Form1->Image1->Canvas->Brush->Color;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Panel6Click(TObject *Sender)

{ if(ColorDialog1->Execute()) Panel6->Color=ColorDialog1->Color;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Panel7Click(TObject *Sender)

{

if(ColorDialog1->Execute()) Panel7->Color=ColorDialog1->Color;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::TrackBar1Change(TObject *Sender)

{ Label1->Caption="Ротация на "+IntToStr(TrackBar1->Position)+" градус.";

}

//---------------------------------------------------------------------------

void __fastcall TForm2::TrackBar2Change(TObject *Sender)

{ Form1->Image1->Canvas->Pen->Width=TrackBar2->Position;

}

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

...

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

  • Яркость точек и гистограммы изображения. Изменение яркости и контрастности. Метод ранговой фильтрации с оценкой середины диапазона. Наложение шумов на изображение. Преобразование изображения в негатив. Получение матрицы яркостей и построение гистограмм.

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

  • Векторная графика как способ описания изображения при помощи прямых и изогнутых линий. Пример растрового и векторного представления листа с дерева. Редакторы векторной графики. Особенности растрового изображения. Методы сжатия с потерями и без потерь.

    реферат [2,1 M], добавлен 28.09.2014

  • Информация о графических форматах. Хранение изображения в программе. Очередь как вспомогательная структура данных. Загрузка изображения из двоичного файла. Операции с изображением. Уменьшение разрешающей способности. Увеличение размера изображения.

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

  • Методика устранения посторонних шумов и коррекции искажения типа дисфокусировки. Обрезка сильно искаженных краев изображения. Построение яркостной гистограммы изображения и его преобразование в индексный формат с восьмицветовой палитрой в пакете Matlab.

    контрольная работа [4,7 M], добавлен 13.01.2012

  • Особенности и основные этапы создания изображения с тремя движущимися объектами при помощи графического режима Graph в Паскале. Разработка программы с текстом не меньше четырехсот строк. Использование динамической памяти при создании движения изображения.

    отчет по практике [564,7 K], добавлен 14.06.2014

  • Интерфейс программы Adobe Photoshop. Внесение изменений в изображение. Инструменты изменения оттенка и искажения изображения. Последовательность формирования изображения. Тоновая и цветовая коррекция изображения, работа с фильтрами и функциями.

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

  • Обзор алгоритмов распознания объектов на двумерных изображениях. Выбор языка программирования. Обнаружение устойчивых признаков изображения. Исследование алгоритмов поиска объектов на плоскости. Модификация алгоритма поиска максимума дискретной функции.

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

  • Описание сборочной единицы шарикоподшипника радиального однорядного. Расчет зубчатого колеса. Построение сборочного чертежа. Построение изображения деталей с помощью AutoLISP. Проектирование 3D-модели цилиндра с монтажными отверстиями в AutoCAD.

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

  • Разработка программы, предназначенной для сжатия или компрессии полутонового изображения международным стандартом JPEG. Описание метода JPEG, выдача результатов в виде декодированного изображения. Обзор методов компрессии полутонового изображения.

    курсовая работа [43,5 K], добавлен 14.10.2012

  • Разработка чертежа сборочной единицы в компьютерной системе автоматизированного проектирования AutoCAD. Описание сборочной единицы. Проектирование зубчатого колеса. Построение изображения деталей с помощью AutoLISP. Построение 3D-модели в AutoCAD.

    курсовая работа [443,2 K], добавлен 27.03.2011

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

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

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

    дипломная работа [6,3 M], добавлен 17.06.2012

  • Описание этапов создания анимированного GIF изображения мультипликационного героя "Винни-Пуха" в программе Adobe Photoshop CS6. Создание дубликата слоя изображения и подготовка кадров для GIF анимации. Настройка эффектов анимации и результат GIF-файла.

    лабораторная работа [1,2 M], добавлен 05.03.2015

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

    лабораторная работа [853,5 K], добавлен 25.10.2015

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

    курсовая работа [4,8 M], добавлен 19.11.2017

  • Компьютерная графика. Пиксели, разрешение, размер изображения. Типы изображений. Черно-белые штриховые и полутоновые изображения. Индексированные цвета. Полноцветные изображения. Форматы файлов. Цвет и его модели. Цветовые модели: RGB, CMYK, HSB.

    реферат [18,1 K], добавлен 20.02.2009

  • Методы кодирования изображения: кодированием длины серии, частотно-зависимое кодирование, метод Лемпеля-Зива. Размер строки при 16-битном цвете. Расчет размера всего исходного изображения. Примеры качественного и некачественного сжатия изображения.

    презентация [2,0 M], добавлен 22.10.2013

  • Растровая графика, составление графических изображений из отдельных точек (пикселей). Растровые графические редакторы. Векторная графика - построение изображения из простых объектов. Достоинства, недостатки и применение растровой и векторной графики.

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

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

    курсовая работа [734,3 K], добавлен 18.06.2009

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

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

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