Построитель графиков на C#

Автор работы: Пользователь скрыл имя, 05 Октября 2011 в 16:20, дипломная работа

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

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

Содержание работы

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

ВВЕДЕНИЕ 7

1. ОБЩАЯ ЧАСТЬ 8

1.1. Обзор состояния вопроса 8

1.2. Основные этапы разработки программных продуктов 11

1.2.1. Концептуализация 12

1.2.2. Анализ разрабатываемого приложения 14

1.2.3. Проектирование разрабатываемого приложения 16

1.2.4. Эволюция приложения 17

1.2.5. Сопровождение приложения 19

1.3. Технологии разработки программных продуктов 20

1.3.1. Объектно-ориентированное программирование 20

1.3.2. Технология .NET 21

1.3.2.1. Компоненты .NET 23

1.3.2.2. Двоичный стандарт компонентов 25

2. СПЕЦИАЛЬНАЯ ЧАСТЬ 27

2.1. Разработка программы 27

2.1.1. Анализ разрабатываемого приложения 27

2.1.2. Проектирование разрабатываемого приложения 34

2.2. Языки программирования 35

2.3. Выбор языка программирования 37

2.4. Применение графиков в решении уравнений 38

3. ЭКОНОМИЧЕСКАЯ ЧАСТЬ 41

3.1. Исходные данные 41

3.2. Применяемые формулы с расшифровкой условных обозначений 42

3.3. Расчет полной себестоимости разработки программного

продукта по базовому варианту 45

3.4. Расчет полной себестоимости разработки программного

продукта по эксплуатационному варианту 46

3.5. Расчет полной себестоимости разработки программного

продукта по варианту разработки 57

3.6. Расчет экономической эффективности внедрения

программного продукта 48

3.7. Социально-психологические аспекты

использования разработки 50

4. ЭКСПЛУАТАЦИЯ ТЕХНИЧЕСКИХ И ПРОГРАММНЫХ

СРЕДСТВ 51

4.1. Эксплуатация технических средств 51

4.2. Эксплуатация разработанной программы 52

ЗАКЛЮЧЕНИЕ 54

СПИСОК ЛИТЕРАТУРЫ 55

ПРИЛОЖЕНИЕ 56

Содержимое работы - 1 файл

Дипломная.doc

— 1.25 Мб (Скачать файл)

2. СПЕЦИАЛЬНАЯ ЧАСТЬ 

      2.1. Разработка программы 

      2.1.1. Анализ разрабатываемого приложения 

      Имеет смысл создать два простых класса для работы с векторами и матрицами(class Vector и class Matrix). Для этого надо провести небольшой анализ, в процессе которого надо рассмотреть роли и обязанности данных абстракций (абстракция – это существенные характеристики объекта, которые отличают его от всех других объектов и четко определяют его концептуальные границы для наблюдателя). Класс Vector ответственен за операциями с векторами (сложение, вычитание, умножение, деление). Класс Matrix ответственен за операциями с матрицами (двумерные таблицы чисел). Также он ответственен за операции сложение, умножение, вращения вокруг осей X, Y, Z и операцию переноса. Определив поведение данной абстракции с точки зрения пользователя, нужно четко разделить интерфейс класса и его реализацию. Основная идея состоит в том, чтобы сначала определить внешний интерфейс каждого класса, не задумываясь при этом об особенностях его внутреннего строения.

      Таким образом абстракция классов Vector и Matrix выглядит как показано на рис.2.1:

   Имя:

          Vector

    Ответственность:

           Выполнение операций с векторами.

    Операции:

          operator +  Сложение 

          operator - Вычитание

          operator * Умножение 

          operator / Деление

    Атрибуты:

          x, y, z координаты вектора 

   Имя:

          Matrix

    Ответственность:

           Выполнение операций  с матрицами.

    Операции:

          operator + Сложение 

          operator * Умножение 

          RotateX поворот вокруг оси X

          RotateY  поворот вокруг оси Y

          RotateZ  поворот вокруг оси Z

    Атрибуты:

          X[4][4] таблица чисел 

    Рис.2.1 Абстракция классов Vector и Matrix 

      Введенную функцию необходимо считать с  элемента управления TextBox в строковую переменную. И так как необходимо строковое выражение преобразовать в алгебраическое выражение выделяется новая абстракция. Для этого создается новый класс, который мог бы реализовать данное преобразование. Экземпляр класса должен найти в строке числа и преобразовать их в вещественный тип, также он должен все неизвестные (х или x и y) преобразовать в соответствующие числа из заданного пользователем интервала. Далее он должен распознавать следующие знаки: ‘( )’,  ‘*’,  ‘/’,  ‘+’,  ‘-’,  ‘^’(степень),’| |’(модуль). Также должен выявлять sin(…), cos(…), tg(…), ctg(…).

      Таким образом абстракция класса SintaxAnalyser выглядит как показано на рис.2.2:

    Имя:

          TextAnalyser

    Ответственность:

           Преобразование текстового выражения в алгебраический вид и вычисление полученного выражения

    Операции:

          XorY определяет указывает ли в текущей индекс строки на X или Y и если указывает, то функция возвращает соответствующее значение число, в противном случае код ошибки.

          Number  определяет указывает ли текущей индекс строки на число и если указывает, то функция возвращает это число, в противном случае код ошибки.

      FindMulDel осуществляет поиск  первого знака  ‘*’ или ’/’

      FindSumSub осуществляет поиск  первого знака  ‘+’ или ’-’

      FindBrackets осуществляет поиск  скобок в выражении

      CalculateMulDel осуществляет умножение  и деление

      CalculateSumSub осуществляет сложение  и вычитание

      Function высчитывает все выражение полностью

      Рис.2.2 Абстракция класса SintaxAnalyser 

      Следует создать класс для моделирования  виртуальной камеры. Камера задается с помощью положения в пространстве и углов поворота, задающих ориентацию. Для камеры необходимо задать расстояние до объекта (графика), а также плоскость определенной ширины и высоты, представляющее конечное изображение, которое будет выведено на экран на определенном этапе и указать размеры экрана, представляющее окно растеризации. Все эти данные должны учитываться в модели камеры, поскольку они определяют видимое пространство, прилегающее к камере и задающее свойства.

      Таким образом абстракция класса Camera выглядит как показано на рис.2.3:

   Имя:

          Camera

    Ответственность:

           Для того, чтобы  “увидеть” график.

    Операции:

      InitCamera  инициализируются параметры камеры

      BuildCamera создание матрицы  вида графика и  осей 

      Рис.2.3 Абстракция класса Camera 

      Следует создать класс, который реализовал бы возможность вычисления координат заданной функции. Также этот класс должен отвечать за хранение и преобразования локальных координат в координаты экрана. Он должен хранить следующие характеристики графика: положение в пространстве, максимальное и текущее количество координат, начало, конец и шаг интервала, масштаб графика. Также этот класс должен иметь объект Axes и Camera. Под преобразованием координат имеется ввиду изменение координат врезультате поворотов, вращении, переносов в пространстве, масштабировании. Для описании формы графических объектов, задания расположения объектов в пространстве и их проекций на экран дисплея используются различные системы координат(СК). Локальная СК  представляет собой координата объекта в своей локальной СК. Т.е. центр объекта находится в начале координат. Также в этой СК осуществляется повороты объекта. Мировая СК это реальные координаты объекта в пространстве. В этой СК осуществляется перемещение и масштабирование объектов. Видовая СК(координаты камеры) нужна для того чтобы увидеть объект в мировых координатах. Экранная СК нужны для того чтобы спроецировать объекты на экран.

      Таким образом абстракция класса Object выглядит как на рис.2.4 (cм. Приложение):

   Имя:

          Object

    Ответственность:

           Вычисление локальных и экранных координат.

    Операции:

          Calculate2D вычисление координат функции от одной неизвестной

          Calculate3D вычисление координат функции от двух неизвестных   

          InitGraph  инициализация графика

          Build_XYZ_Rotation  создание матрицы поворота графика и осей

      TransformGraph преобразование координат  для поворота графика

      Local_To_World_Object  преобразование координат в мировые координаты

      World_To_Camera_Object   преобразование координат в координаты камеры

      Camera_To_Screen_Object  преобразование координат в координаты экрана

      MainGraph выполняет полное преобразования

    Атрибуты:

          num_vertices  количество вершин

      world_pos положение графика  в мировой СК

      vlist_local  локальные координаты графика

      vlist_trans  преобразованные  координаты графика

      begin, end, step начало, конец и шаг интервала

      scale масштаб графика 

      Рис.2.4 Абстракция класса Object 

  Для вычисления координат осей координат с метками, с названиями осей, следует создать следующий класс Axes. Этот класс должен иметь следующую функциональность: координатные оси должны вращаться вместе с графиком функции, метки на координатных осях должны масштабироваться вместе с графиком функции. Также он должен уметь вычислять координаты координатной сетки. 

      Таким образом абстракция класса Axes выглядит как на рис.2.5:

   Имя:

          Axes

    Ответственность:

           Вычисления координат  осей координат.

    Операции:

          InitLoopAxisX вычисление вычисление координат меток на оси X при повороте

        InitLoopAxisY вычисление вычисление координат меток на оси Y при повороте

      InitLoopAxisZ вычисление вычисление координат меток на оси Z при повороте

      ChangeScaleLoopAxis вычисление координат меток при масштабировании координатных осей 

      Рис.2.5 Абстракция класса Axes 

      Для определения свойств графика следует создать класс GraphicProperty. Этот класс будет отвечать определение таких свойств как четность/нечетность функции, область определения и область значения функции.

      Таким образом абстракция класса GraphicProperty выглядит как на рис.2.6: 

   Имя:

          GraphicProperty

    Ответственность:

           Определения свойств графика.

    Операции:

          CheckedParity проверка на четность/нечетность функции

        Range определение области значения функции

      Domain_of_function определение области определения функции

      Рис.2.6 Абстракция класса GraphicProperty 

      2.1.2. Проектирование разрабатываемого приложения 

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

      В разделе анализ выявлена несколько абстракций Vector и Matrix, которые отвечают за операции по вычислению координат. Для вывода графика на экран создан класс Object. Этот класс будет наделен такими методами как вычисление, преобразование координат и другими вспомогательными методами для вывода графика на экран.

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

      Класс SintaxAnalyser создан для преобразования тестового выражения в алгебраическое и вычислении этого алгебраического выражения

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

     

    Рис.2.7 Диаграмма структуры классов программы построения графиков функций 

    2.2. Языки программирования 

      В настоящее время насчитывается  более двух тысяч языков

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

Информация о работе Построитель графиков на C#