Читайте также:
|
|
Проецирование-отображение трехмерного объекта на двухмерную плоскость. Перспективное преобразование имеет место, когда не равен нулю любой из первых трех элементов четвертого столбца обобщенной (4 х 4) - матрицы преобразования однородных координат. Центральная проекция - это проекция, которая образуется с помощью проецирующихся лучей, проходящих через одну точку. Параллельная проекция -проецирующие прямые идут параллельным пучком до пересечения с картинной плоскостью. Z-буфер. Обычный буфер кадра хранит коды цвета для каждого пиксела в пространстве изображения. Идея алгоритма состоит в том, чтобы для каждого пиксела дополнительно хранить еще и координату Z или глубину. При занесении очередного пиксела в буфер кадра значение его Z-координаты сравнивается с Z-координатой пиксела, который уже находится в буфере. Если Z-координата нового пиксела больше, чем координата старого, т.е. он ближе к наблюдателю, то атрибуты нового пиксела и его Z-координата заносятся в буфер, если нет, то ни чего не делается. Модель освещения это математическое представление физических свойств источников света и поверхностей, а также их взаимного расположения. Закраска методом Гуро. Его метод заключается в том, что используются не нормали к плоским граням, а нормали к аппроксимируемой поверхности, построенные в вершинах многогранника. После этого вычисляются интенсивности в вершинах, а затем во всех внутренних точках многоугольника выполняется билинейная интерполяция интенсивности. Метод Фонга. Он предложил вместо интерполяции интенсивностей произвести интерполяцию вектора нормали к поверхности на сканирующей строке. Этот метод требует больших вычислительных затрат, поскольку формулы интерполяции применяются к трем компонентам вектора нормали, но зато дает лучшую аппроксимацию кривизны поверхности. Поэтому зеркальные свойства поверхности воспроизводятся гораздо лучше. Нормали к поверхности в вершинах многогранника вычисляются так же, как и в методе Гуро. А затем выполняется билинейная интерполяция в сочетании с построчным сканированием. После построения вектора нормали в очередной точке вычисляется интенсивность.
35. Изложите основные принципы концепции SOLID используемые при дизайне классов в объектно-ориентированном проектировании
SOLID это аббревиатура пяти основных принципов дизайна классов в объектно-ориентированном проектировании которые облегчают работу программиста.
Single responsibility principle (принцип единственной обязанности) - обозначает, что каждый объект должен иметь одну обязанность и иметь одну и только одну причину измениться. Все его сервисы должны быть направлены исключительно на обеспечение этой обязанности.
Мотивация использования: Отсутствие ведёт к хрупкости дизайна (при изменении одного функционала отваливается другой)
Пример: Модуль, который может и производить манипуляции с картинкой (изменять размер/поворачивать и т.п.), и выводить её на экран не отвечает принципу SRP, так как отвечает за две обязанности: модификация картинки и её вывод на экран.
Open-closed principle (принцип открытости\закрытости) – обозначает, что программные сущности (классы, модули, функции и т. п.) должны быть открыты для расширения, но закрыты для изменения»
Мотивация использования: Позволяет быстро и безболезненно реагировать на изменения бизнес-логики
Пример: Есть два класса пишущих логи: один в БД второй в файл. Классы не реализуют общий интерфейс. Если сейчас используется один класс, то для замены его на второй надо менять все места его использования. Если реализовать общий интерфейс Logger и определить в нём метод log(string), то для внесения изменений будет достаточно поменять объявление объекта. (Logger logger = new FileLogger(); поменять на Logger logger = new DBLogger();). Добавили новый метод в интерфейс – все его имеют.
Liscov Substitution Principle (Принцип подстановки Барбары лИсков) – если для каждого объекта o1 типа S существует объект о2 типа T, который для всех программ P определён в терминах Т, то поведение Р не изменится, если о1 заменить на o2 при условии, что S является подтипом Т.
Мотивация использования: клиентский код начинает считать производный класс разновидностью базового, и возможно появление кода, явно использующего этот факт.
Пример: класс-родитель(тип S) описывает прямоугольник с полями: длина, ширина и методом getSquare() возвращающим площадь (длина * ширина). Класс-ребёнок описывает квадрат(тип Т) с перегруженными get\set для длины и ширины, которые устанавливают поля длина и ширина в родительском классе. Для тестирования создаём объект «прямоугольник» (o1) и объект «квадрат»(о2). Для обоих объектов вызовем методы setWidth(3) и setHeight(2). После этого вызовем метод getSquare(). Для прямоугольника метод вернёт 6, а для квадрата 4. Соответственно нельзя везде использовать объект o2 вместо о1.
Interface segregation principle (принцип изолированности интерфейса) – клиенты не должны зависеть от методов интерфейса, которые они не используют.
Мотивация использования: Если определить большой универсальный интерфейс, то в наследниках появится много методов-заглушек и много лишнего кода,который неудобно использовать.
Создаём трансформера. Делаем интерфейс IMegaTransformer с методами преобразоваться в машину,катер,самолёт. Потом делаем отдельных трансформеров каждый из которых может преобразовываться либо в машину, либо в катер, либо в самолёт. НО методы по преобразовыванию всё равно надо реализовывать. Решение – запилить три отдельных интерфейса.
Dependency Inversion Principle (принцип инверсии зависимостей):
1. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
2. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Мотивация использования: в противномслучае возникает паутина зависимостей, превращая реализацию нового изменения требований в невыполнимую задачу.
Задача избежать три компоненты:
1. Жесткость – изменение одной части кода затрагивает слишком мноого других частей.
2. Хрупкость – даже незначительное изменение в коде может привести к неожиданным проблемам
3. Неподвижность – никакая из частей приложения не может быть легко выделена и поторно использована
Дата добавления: 2015-11-14; просмотров: 46 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Объясните понятие «многомерное выражение». Сформулируйте основные подходы к построению запросов к многомерным базам данных | | | Основы машинной графики. |