Построение эллипсоида в компьютерной геометрии

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

Рубрика Математика
Вид курсовая работа
Язык русский
Дата добавления 26.01.2017
Размер файла 730,0 K

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

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

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

СОДЕРЖАНИЕ

1. Постановка задачи

2. Используемые алгоритмы

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

2.2 Алгоритм рисования эллипсоида

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

3.1 Диаграмма классов

3.2 Класс Program

3.3 Класс основное окно приложения - EllipsoidForm

3.4 Класс диалогового окна EllipsoidParametersForm

3.5 Класс Ellipse - описание эллипса

3.6 Класс CuttingEllipse - описание секущего эллипса

3.7. Класс Ellipsoid - описание эллипсоида

3.8 Класс Vector - вектор, содержащий координату

4. Тестирование программы

4.1 Описание интерфейса

4.2 Пример выполнения программы

Список использованных источников

1. ПОСТАНОВКА ЗАДАЧИ

эллипсоид координаты рисование программа

Необходимо построить эллипсоид. Каноническое уравнение эллипсоида в декартовых координатах, совпадающих с осями деформации эллипсоида, имеет следующий вид:

где a, b и c - произвольные положительные числа, определяющие длины полуосей эллипсоида соответственно по осям координат x, y и z (Рис. 1).

Рисунок 1 - Эллипсоид

Примем за основу, что полуоси эллипсоида относятся в соответствии с соотношением a?b?c. Для построения эллипсоида будем использовать декартову систему координат в пространстве

Рисунок 2 - Декартова система координат

Здесь ось X направлена влево и вниз, ось Y - вправо, ось Z - вверх.

Будем строить эллипсоид по точкам с использованием секущих плоскостей. Пересекая эллипсоид плоскостями z=h(-c?h?c), получим в сечении эллипсы

с полуосями

, .

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

Примем за основу, что условный «северный» полюс эллипсоида (значение z = c при нулевых значениях x и y) имеет значение и = 0, а условный «южный» полюс - и = 180. В секущих плоскостях точка x = a, y = 0 будет иметь значение = 0, точка x = 0, y = b - = 90, точка x = -a, y = 0 - = 180, а точка x = 0, y = -b - = 270.

2. ИСПОЛЬЗУЕМЫЕ АЛГОРИТМЫ

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

Алгоритм реализован следующим образом:

1. При выборе пункта меню «Эллипсоид» - «Задать параметры» высвечивается диалоговое окно ввода параметров, в котором задаются следующие значения - длины полуосей a, b и с и шаг разбиения в градусах по параллелям и меридианам.

2. Создается объект коллекции параллелей Dictionary, в котором в качестве ключа используется значение параллелей в градусах от 0 до 180 с заданным шагом разбиения, а в качестве значений - также объекты Dictionary, представляющие собой коллекции ключ-значение точек на секущих эллипсах (коллекции меридианов для данного сечения). Ключем является угол в градусах от 0 до (360 - шаг разбиения) относительно положительного направления оси x, а значением - вектор [x, y, z] декартовой координаты точки.

3. Изменяя значение и от 0 до 180 с заданным шагом разбиения по параллелям, создаем объекты Dictionary, в которые добавляем вычисленные координаты точек поверхности эллипсоида для данного сечения (значения пересечения i-ой параллели с j-ым меридианом) от 0 до (360 - шаг разбиения) с заданным шагом разбиения по меридианам. Затем добавляем коллекцию точек i-го сечения в коллекцию параллелей.

4. Когда пройдены все значения, считаем, что мы сформировали коллекцию точек эллипсоида.

2.2 Алгоритм рисования эллипсоида

1. Для рисования используем элемент отображения Chart.

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

3. Рисуем оси координат - ось z направлена вверх, ось y - вправо, ось x - влево и вниз.

4. Проходя по всем элементам коллекции коллекций триад координат [x, y, z], выполняем перерасчет пространственных координат в координаты на плоскости следующим образом: X1 = Y - X*cos(30); Y1=Z - X*sin(30), где X, Y и Z - пространственные координаты, а X1 и Y1 - координаты на плоскости.

5. Добавляем полученные координаты в соответствующие коллекции параллелей и меридианов элемента отображения Chart.

3. ОПИСАНИЕ ПРОГРАММЫ

Программа написана на языке программирования C# с использованием IDE Visual Studio 2013 и состоит из следующих модулей.

3.1 Диаграмма классов

Программа состоит из следующих основных классов (Рис. 3.). Здесь не показан класс Program, так как он был полностью сгенерирован IDE Visual Studio и в него изменения не вносились.

Рисунок 3 - Диаграмма классов

3.2 Класс Program

Как уже указывалось выше, класс Program был сгенерирован IDE и в него изменения не вносились. Он содержит одну статическую функцию Main и выполняет единственную задачу - создать объект основного окна программы.

3.3 Класс основное окно приложения - EllipsoidForm

Состоит из двух модулей - EllipsoidForm.cs и EllipsoidForm.Designer.cs. Первый был модифицирован для решения поставленной задачи, второй - полностью сгенерирован IDE.

Рисунок 4 - Главное окно программы

Модуль EllipsoidForm.cs содержит следующие поля и функции (см.таблицы 1 и 2).

Таблица 1 - Поля класса EllipsoidForm

Название поля

Тип

Описание

_semiaxisA

double

Длина полуоси эллипсоида по оси X

_semiaxisB

double

Длина полуоси эллипсоида по оси Y

_semiaxisC

double

Длина полуоси эллипсоида по оси Z

_gridStep

double

Шаг сетки элемента отображения Chart

_parallels

int

Количество сегментов между двумя параллелями

_meridians

int

Количество меридианов

Таблица 2 - Функции класса EllipsoidForm

Название

Тип

Описание

EllipsoidForm

 

Конструктор класса

ToolStripMenuItem_Ellipsoid_Options_Click

void

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

ToolStripMenuItem_Ellipsoid_Quit_Click

void

Обработчик события завершения работы

InitChart

void

Инициализация элемента отображения Chart

Calculate

void

Перерасчет вычисленных точек на поверхности эллипсоида и их отображение.

3.4 Класс диалогового окна EllipsoidParametersForm

Состоит из двух модулей - EllipsoidparametersForm.cs и EllipsoidParametersForm.Designer.cs. Первый был модифицирован для решения поставленной задачи, второй - полностью сгенерирован IDE.

Рисунок 5 - Диалоговое окно выбора параметров

Модуль EllipsoidParametersForm.cs содержит следующие функции и свойства (см. таблицу 3).

Таблица 3 - Функции и свойства класса EllipsoidParametersForm

Название

Тип

Описание

EllipsoidParametersForm

 

Конструктор класса

SemiaxisA

double

Свойство. Возвращает и устанавливает длину полуоси эллипсоида по оси X

SemiaxisB

double

Свойство. Возвращает и устанавливает длину полуоси эллипсоида по оси Y

SemiaxisC

double

Свойство. Возвращает и устанавливает длину полуоси эллипсоида по оси Z

ParallelGrid

int

Свойство. Возвращает и устанавливает шаг разбиения по параллелям в градусах

MeridianGrid

int

Свойство. Возвращает и устанавливает шаг разбиения по меридианам в градусах

3.5 Класс Ellipse - описание эллипса

Модуль Ellipse.cs содержит описание класса эллипса Ellipse, который содержит следующие поля, свойства и функции (см. таблицы 4 и 5).

Таблица 4 - Поля класса Ellipse

Название поля

Тип

Описание

_semiaxisA

double

Длина полуоси эллипсоида по оси X

_semiaxisB

double

Длина полуоси эллипсоида по оси Y

Angle

enum

Определяет в радианах или градусах задаются аргументы функций

Таблица 5 - Функции и свойства класса Ellipse

Название

Тип

Описание

Ellipse

 

Конструктор по умолчанию

Ellipse(double semiaxisA, double semiaxisB)

 

Конструктор. Выполняет инициализацию экземпляра класса эллипса с заданными значениями полуосей.

SemiaxisA

double

Свойство. Возвращает и устанавливает длину полуоси эллипса по оси X

SemiaxisB

double

Свойство. Возвращает и устанавливает длину полуоси эллипса по оси Y

Eccentricity

double

Свойство. Возвращает эксцентриситет эллипса.

FocalLength

double

Свойство. Возвращает фокальное расстояние эллипса.

FocalParameter

double

Свойство. Возвращает фокальный параметр эллипса.

PeryFocalLength

double

Свойство. Возвращает значение перифокального расстояния эллипса

ApoFocalLength

double

Свойство. Возвращает значение апофокального расстояния эллипса

Perimeter

double

Свойство. Возвращает приблизительное значение периметра эллипса

Square

double

Свойство. Возвращает значение площади эллипса

this[double fi, Angle angles]

Vector

Индексатор. Возвращает вектор с координатами точки на поверхности эллипса. Виртуальный. Может быть переопределен в порожденных классах

X(double fi, Angle angles = Angle.Radian)

double

Метод. Выполняет вычисление координаты X на поверхности эллипса в зависимости от заданного угла относительно координаты X.

Y(double fi, Angle angles = Angle.Radian)

double

Метод. Выполняет вычисление координаты Y на поверхности эллипса в зависимости от заданного угла относительно координаты X.

Ro(double fi, Angle angles)

double

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

Values(int points)

Dictionary<double, Vector>

Метод. Формирует коллекцию пар угол/координата для эллипса

3.6 Класс CuttingEllipse - описание секущего эллипса

Класс CuttingEllipse, порожденный из класса Ellipse, представляющий собой описание объекта эллипса сечения эллипсоида по определенной параллели.

Содержит следующие поля, свойства и функции (см.таблицы 6 и 7).

Таблица 6 - Поля класса CuttingEllipse

Название поля

Тип

Описание

_semiaxisA

double

Длина полуоси эллипса по оси X. Унаследован от Ellipse

_semiaxisB

double

Длина полуоси эллипса по оси Y. Унаследован от Ellipse

Angle

enum

Определяет в радианах или градусах задаются аргументы функций. Унаследован от Ellipse

_parallel

double

Значение параллели в радианах.

_valueZ

double

Значение координаты Z.

Таблица 7 - Функции и свойства класса CuttingEllipse

Название

Тип

Описание

CuttingEllipse

 

Конструктор по умолчанию

CuttingEllipse(double semiaxisA, double semiaxisB, double semiaxesC, double valueZ)

 

Конструктор. Выполняет инициализацию экземпляра класса эллипса с заданными значениями полуосей и значением высоты секущей плоскости.

CuttingEllipse(double semiaxisA, double semiaxisB, double semiaxesC, double parallel, Angle angles)

 

Конструктор. Выполняет инициализацию экземпляра класса эллипса с заданными значениями полуосей и значением параллели.

SemiaxisA

double

Свойство. Возвращает и устанавливает длину полуоси эллипсоида по оси X. Унаследован от Ellipse

SemiaxisB

double

Свойство. Возвращает и устанавливает длину полуоси эллипсоида по оси Y. Унаследован от Ellipse

Eccentricity

double

Свойство. Возвращает эксцентриситет эллипса. Унаследован от Ellipse

FocalLength

double

Свойство. Возвращает фокальное расстояние эллипса. Унаследован от Ellipse

FocalParameter

double

Свойство. Возвращает фокальный параметр эллипса. Унаследован от Ellipse

PeryFocalLength

double

Свойство. Возвращает значение перифокального расстояния эллипса. Унаследован от Ellipse

ApoFocalLength

double

Свойство. Возвращает значение апофокального расстояния эллипса. Унаследован от Ellipse

Perimeter

double

Свойство. Возвращает приблизительное значение периметра эллипса. Унаследован от Ellipse

Square

double

Свойство. Возвращает значение площади эллипса. Унаследован от Ellipse

ParallelRadian

double

Свойство. Возвращает значение параллели эллипсоида в радианах

ParallelGradus

double

Свойство. Возвращает значение параллели эллипсоида в градусах

Z

double

Свойство.

this[double fi, Angle angles]

Vector

Индексатор. Возвращает вектор с координатами точки на поверхности эллипса. Переопределен

X(double fi, Angle angles = Angle.Radian)

double

Метод. Выполняет вычисление координаты X на поверхности эллипса в зависимости от заданного угла относительно координаты X. Унаследован от Ellipse

Y(double fi, Angle angles = Angle.Radian)

double

Метод. Выполняет вычисление координаты Y на поверхности эллипса в зависимости от заданного угла относительно координаты X. Унаследован от Ellipse

Ro(double fi, Angle angles)

double

Метод. Выполняет вычисление радиус-вектора эллипса в зависимости от заданного угла относительно координаты X. Переопределен

Values(int points)

Dictionary<double, Vector>

Метод. Формирует коллекцию пар угол/координата для эллипса. Унаследован от Ellipse

3.7 Класс Ellipsoid - описание эллипсоида

Класс Ellipsoid представляющий собой описание объекта. Содержит следующие поля, свойства и функции (см.таблицы 8 и 9).

Таблица 8 - Поля класса Ellipsoid

Название поля

Тип

Описание

_semiaxisA

double

Длина полуоси эллипсоида по оси X

_semiaxisB

double

Длина полуоси эллипсоида по оси Y

_semiaxisC

double

Длина полуоси эллипсоида по оси Z

_parallelsCount

int

Количество сегментов между двумя параллелями

_meridiansCount

int

Количество меридианов

_parallelDiscretization

ParallelDiscretization

Определяет, разбиение в градусах или в радианах

ParallelDiscretization

enum

Определяет, разбиение в градусах или в радианах

Таблица 9 - Функции и свойства класса Ellipsoid

Название

Тип

Описание

Ellipsoid(double semiaxisA, double semiaxisB, double semiaxisC)

 

Конструктор. Задаются только длины полуосей, остальные параметры по умолчанию

Ellipsoid(double semiaxisA, double semiaxisB, double semiaxisC, int parallelsCount, int meridiansCount, ParallelDiscretization parallelDiscretization = ParallelDiscretization.Gradus)

 

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

SemiaxisA

double

Свойство. Возвращает длину полуоси эллипсоида по оси X

SemiaxisB

double

Свойство. Возвращает длину полуоси эллипсоида по оси Y

SemiaxisC

double

Свойство. Возвращает длину полуоси эллипсоида по оси Z

ParallelsCount

int

Свойство. Возвращает количество секторов между параллелями

MeridiansCount

int

Свойство. Возвращает количество меридианов.

ParallelDiscretization

ParallelDiscretization

Свойство. Возвращает вид разбиения - в градусах или линейное

CreateEllipsoid

Dictionary<double, Dictionary<double, Vector>>

Метод. Выполняет расчет точек координат поверхности эллипсоида.

3.8 Класс Vector - вектор, содержащий координату

Класс Vector представляющий собой вектор, содержащий значение координаты.

Содержит следующие поля, свойства и функции (см.таблицы 10 и 11).

Таблица 10 - Поля класса Vector

Название поля

Тип

Описание

_vector

double[]

Массив, содержащий координаты

Таблица 11 - Функции и свойства класса Vector

Название

Тип

Описание

Vector(int length = 3)

 

Конструктор. Создает вектор координат.

Length

int

Свойство. Возвращает текущую длину вектора

this[int index]

double

Индексатор. Возвращает и устанавливает координату по заданному индексу

X

double

Свойство. Возвращает и устанавливает координату X.

Y

double

Свойство. Возвращает и устанавливает координату Y.

Z

double

Свойство. Возвращает и устанавливает координату Z.

Ro

double

Свойство. Возвращает значение радиус-вектора.

Teta

double

Свойство. Возвращает значение возвышения Teta.

Fi

double

Свойство. Возвращает значение азимута Fi.

operator + (Vector v1, Vector v2)

Vector

Оператор + Выполняет сложение двух векторов

operator - (Vector v1, Vector v2)

Vector

Оператор - Выполняет вычитание двух векторов

operator * (Vector v, double val)

Vector

Оператор * Выполняет умножение вектора на число

operator * (double val, Vector v)

Vector

Оператор * Выполняет умножение вектора на число

operator / (Vector v, double val)

Vector

Оператор / Выполняет деление вектора на число

4 ТЕСТИРОВАНИЕ ПРОГРАММЫ

4.1 Описание интерфейса

После запуска программы выбирается пункт меню «Эллипсоид» - «Задать параметры», после чего появляется диалоговое окно, в котором вводятся необходимые параметры и нажимается кнопка «Принять». После расчета точек на экране появляется изображение эллипсоида.

Пример задания параметров см. рис.6.

Рисунок 6 - Задание параметров отображения

4.2 Пример выполнения программы

Результат работы программы представлен на рис. 7.

Рисунок 7 - Результат выполнения программы

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Гуриков С. Р. Введение в программирование на языке Visual C#. - Инфра-М, 2013. - 448 c.

2. Джейсон, Прайс; Майк, Гандэрлой Visual C# .NET. Полное руководство. - М.: КОРОНА принт., 2009. - 960 c.

3. Мартин Р. С., Мартин М. Принципы, паттерны и методики гибкой разработки на языке C#. - М.: Символ-Плюс, 2011. - 768 c.

4. Рихтер, Джефри CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке C#. - СПБ.: Питер, 2007. - 656 c.

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

...

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

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

    курсовая работа [225,0 K], добавлен 30.04.2011

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

    курсовая работа [212,6 K], добавлен 11.12.2013

  • Форма для ввода целевой функции и ограничений. Характеристика симплекс-метода. Процесс решения задачи линейного программирования. Математическое описание алгоритма симплекс-метода. Решение задачи ручным способом. Описание схемы алгоритма программы.

    контрольная работа [66,3 K], добавлен 06.04.2012

  • Классификация различных точек поверхности. Омбилические точки поверхности. Строение поверхности вблизи эллиптической, параболической и гиперболической точек. Линии кривизны поверхности и омбилические точки. Поверхность, состоящая из омбилических точек.

    дипломная работа [956,7 K], добавлен 24.06.2015

  • Обобщенные координаты, силы и скорости. Условия равновесия системы в обобщенных координатах. Уравнения Лагранжа. Системы с голономными связями (геометрические и интегрируемые дифференциальные). Доказательство уравнения движения механической системы.

    презентация [1,4 M], добавлен 26.09.2013

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

    контрольная работа [1,1 M], добавлен 16.04.2010

  • История интегрального исчисления. Определение и свойства двойного интеграла. Его геометрическая интерпретация, вычисление в декартовых и полярных координатах, сведение его к повторному. Применение в экономике и геометрии для вычисления объемов и площадей.

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

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

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

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

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

  • Минимальное остовное дерево связного взвешенного графа и его нахождение с помощью алгоритмов. Описание алгоритма Краскала, возможность строить дерево одновременно для нескольких компонент связности. Пример работы алгоритма Краскала, код программы.

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

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

    контрольная работа [102,5 K], добавлен 04.12.2013

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

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

  • Искривленность пространства. Изучение "параллельных прямых" на поверхности планеты. Первая и вторая основная квадратичная форма. Классификация точек поверхности. "Мыльные пленки", возникающие на замкнутых контурах. Нахождение средних кривизн поверхностей.

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

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

    курсовая работа [542,6 K], добавлен 25.06.2014

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

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

  • Основные свойства кривых второго порядка. Построение кривой в канонической и общей системах координат. Переход уравнения поверхности второго порядка к каноническому виду. Исследование формы поверхности методом сечений и построение полученных сечений.

    курсовая работа [166,1 K], добавлен 17.05.2011

  • Вычисление корня функции нелинейного уравнения методом деления отрезка пополам. Способы ввода, вывода и организации данных. Модульная организация программы. Разработка блок-схемы алгоритма задачи. Порядок создания программы на алгоритмическом языке.

    реферат [30,0 K], добавлен 28.10.2010

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

    курсовая работа [362,9 K], добавлен 24.11.2010

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

    курсовая работа [495,4 K], добавлен 19.09.2011

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

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

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