Моделирование геометрических объектов

Автор работы: Пользователь скрыл имя, 17 Октября 2014 в 11:25, курсовая работа

Краткое описание

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

Содержание

ВВЕДЕНИЕ 3
1. СОЗДАНИЕ МАТЕМАТИЧЕСКОЙ МОДЕЛИ ОБЪЕКТА 4
1.1 Преобразования координат. 4
1.2 Создание трехмерной модели 6
2 АЛГОРИТМ ИЗМЕНЕНИЯ ПОЛОЖЕНИЯ 3D ОБЪЕКТА В ПРОСТРАНСТВЕ 8
2.1 Динамическое изменение точки наблюдения. 8
2.2 Обработка нажатия клавиши. 8
Листинг 3. 8
Листинг 4. 9
3 АЛГОРИТМ ЗАКРАШИВАНИЯ ПОЛИГОНА. АЛГОРИТМ, ОПРЕДЕЛЯЮЩИЙ ВИДИМЫЕ И НЕВИДИМЫЕ ЛИНИИ. 10
3.1 Нахождение нормали по трем точкам 10
3.2 Определение невидимости граней 11
3.3 Закраска методом Гуро 12
4 ТЕСТИРОВАНИЕ 14

Вложенные файлы: 1 файл

KGIG2.docx

— 232.46 Кб (Скачать файл)

                        bmp.SetPixel(x, y, col);

                    }

                }

            }

        }

 

        void Paint3DObject()

        {

            //SortPolygons();

 

            for (int i = 0; i < mp.Length; i++)

            {

                mp[i].ComputeNormal();

                if (mp[i].visible)

                {

                    //double alfa =  Math.Abs( KGiG_Methods.cosAoB(mp[i].n, VLight));

                    //Color newCol = Color.FromArgb( (int)(alfa * mp[i].col.R),

                    //                               (int)(alfa * mp[i].col.G),

                    //                               (int)(alfa * mp[i].col.B) );

                    //mp[i].Paint(g, new Pen(Brushes.Black, 1), newCol);

 

                    if (i > NC )

                    {

                        double alfa =  Math.Abs( KGiG_Methods.cosAoB(mp[i].n, VLight));

                        Color newCol = Color.FromArgb( (int)(alfa * mp[i].col.R),

                                                       (int)(alfa * mp[i].col.G),

                                                       (int)(alfa * mp[i].col.B) );

                        mp[i].Paint(g, new Pen(Brushes.Black, 1), newCol);

                    }

                    else

                    //PaintGuro(bmp, mp[i]);

                    PaintPhong(bmp, mp[i]);

                   

                }

            }

        }

 

        void RePaint()

        {

            g.Clear(Form1.DefaultBackColor);

            ViewTrans();

            Paint3DObject();

            pictureBox1.Image = bmp;

        }

 

        private void Form1_Shown(object sender, EventArgs e)

        {

            bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);

            g = Graphics.FromImage(bmp);

            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

            DefineCilinder();

            //DefineCube();

            //DefineCubePolygons();

            RePaint();

        }

    

        private void Form1_KeyDown(object sender, KeyEventArgs e)

        {

            if (e.KeyCode == Keys.Left)  QRot = new Quaternion(new Vector3D(0, 1.0, 0),  Math.PI / 64);

            if (e.KeyCode == Keys.Right) QRot = new Quaternion(new Vector3D(0, 1.0, 0), -Math.PI / 64);

            if (e.KeyCode == Keys.Up)    QRot = new Quaternion(new Vector3D(1.0, 0, 0), -Math.PI / 64);

            if (e.KeyCode == Keys.Down)  QRot = new Quaternion(new Vector3D(1.0, 0, 0),  Math.PI / 64);

            RePaint();

        }

 

        int x = 0;

        int y = 0;

 

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)

        {

            x = e.X;

            y = e.Y;

            pictureBox1.Cursor = System.Windows.Forms.Cursors.Hand;

        }

 

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)

        {

            if (e.Button == System.Windows.Forms.MouseButtons.Left)

            {

                int dx = e.X - x;

                int dy = e.Y - y;

                QRot = new Quaternion(new Vector3D(dy, -dx, 0), Math.PI / 128);               

                x = e.X;

                y = e.Y;

                RePaint();

            }

            if (e.Button == System.Windows.Forms.MouseButtons.Right)

            {

                int dx = e.X - x;

                QRot = new Quaternion(mv[8].v, -dx * Math.PI / 256);

                x = e.X;              

                RePaint();

            }

        }

 

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)

        {

            pictureBox1.Cursor = System.Windows.Forms.Cursors.Default;

        }

 

    }

}

 

 

 

 

 

 

 

Лист для замечаний

 

 


Информация о работе Моделирование геометрических объектов