Вы находитесь на странице: 1из 23

Массивы в программировании

Массив — упорядоченный набор данных, используемый для хранения


данных одного типа, идентифицируемых с помощью одного или нескольких
индексов. В простейшем случае массив имеет постоянную длину и хранит
единицы данных одного и того же типа.
Количество используемых индексов массива может быть различным:
массивы с одним индексом называют одномерными, с двумя — двумерными,
и т. д. Одномерный массив — нестрого соответствует вектору в математике;
двумерный («строка», «столбец»)— матрице. Чаще всего применяются
массивы с одним или двумя индексами; реже — с тремя; ещё большее
количество индексов — встречается крайне редко.
Пример фиксированного массива на языке Паскаль

{Одномерный массив целых чисел.


Нумерация элементов от 1 до 15}
a: array [1..15] of Integer;
{Двумерный массив символов.
Нумерация по столбцам по типу Byte (от 0 до 255)
по строкам от 1 до 5}
multiArray : array [Byte, 1..5] of Char;
{Одномерный массив из строк.
Нумерация по типу word (от 0 до 65536)}
rangeArray : array [Word] of String;

Пример фиксированного массива на С/С++

int Array[10]; // Одномерный массив: целых чисел, размера 10;


// Нумерация элементов — от 0 до 9.

double Array[12][15]; // Двумерный массив:


// вещественных чисел двойной точности,
// размера 12 на 15;
// Нумерация: по строкам — от 0 до 11,
// по столбцам — от 0 до 14.

В некоторых языках программирования многомерные массивы


создаются на основе одномерных, у которых элементы являются
массивами[6].
Пример двумерного массива на JavaScript

//Создание двумерного массива чисел:


var array = [
[11, 12, 13, 14, 15, 16], // Первая строка-массив
[21, 22, 23, 24, 25, 26], // Вторая
[31, 32, 33, 34, 35, 36] // Третья
];

// Вывод массива на консоль:


array.forEach((subArray) => { // Для каждого под-массива,
subArray.forEach((item) => { // для каждого его элемента,
console.log(item); // — вывести этот элемент на консоль.
});
});

Динамическими называются массивы, размер которых может


изменяться во время выполнения программы. Обычные (не динамические)
массивы называют ещё фиксированными или статическими.
Динамические массивы могут реализовываться как на уровне языка
программирования, так и на уровне системных библиотек. Во втором случае
динамический массив представляет собой объект стандартной библиотеки, и
все операции с ним реализуются в рамках той же библиотеки. Так или иначе,
поддержка динамических массивов предполагает наличие следующих
возможностей:
1. Описание динамического массива. На уровне языка это может
быть специальная синтаксическая конструкция, на уровне библиотеки -
библиотечный тип данных, значение которого объявляется стандартным
образом. Как правило, при описании (создании) динамического массива
указывается его начальный размер, хотя это и не обязательно.
2. Операция определения текущего размера динамического массива.
3. Операция изменения размера динамического массива.
Ниже приведён пример конструкций для работы с динамическими
массивами на Delphi.

var // Описания динамических массивов


byteArray : Array of Byte; // Одномерный массив
multiArray : Array of Array of string; // Многомерный массив
...
SetLength(byteArray, 1); // Установка размера массива в 1 элемент.
byteArray[0] := 16; // Запись элемента.
SetLength(byteArray, Length(byteArray)+1); // Увеличение размера
массива на единицу
byteArray[Length(byteArray) - 1] := 10; // Запись значения в последний
элемент.
WriteLn(byteArray[Length(byteArray) - 1]); // Вывод последнего
элемента массива.
...
SetLength(multiArray, 20, 30); // Установка размера двумерного
массива
multiArray[10,15] := 12;
SetLength(multiArray, 10, 15); // Уменьшение размера
WriteLn(Length(multiArray), ' ', Length(multiArray[0])
Гетерогенные массивы
Гетерогенным называется массив, в разные элементы которого могут
быть непосредственно записаны значения, относящиеся к различным типам
данных. Массив, хранящий указатели на значения различных типов, не
является гетерогенным, так как собственно хранящиеся в массиве данные
относятся к единственному типу — типу «указатель». Гетерогенные массивы
удобны как универсальная структура для хранения наборов данных
произвольных типов. Реализация гетерогенности требует усложнения
механизма поддержки массивов в трансляторе языка.
Реализация
Типовым способом реализации статического гомогенного (хранящего
данные одного типа) массива является следующий :
1. Под массив выделяется непрерывный блок памяти объёмом
S*m1*m2*m3…mn, где S — размер одного элемента, а m1…mn — размеры
диапазонов индексов (то есть количество значений, которые может
принимать соответствующий индекс).
2. При обращении к элементу массива A[i1, i2, i3, …, in] адрес
соответствующего элемента вычисляется как B+S*((…(i1p*m1+i2p)*m2+…+i(n-
1)p)*mn-1+inp), где B — база (адрес начала блока памяти массива), ikp —
значение k-го индекса, приведённое к целому с нулевым начальным
смещением. Порядок следования индексов в формуле вычисления адреса
может быть различным. Приведённый соответствует реализации в
большинстве компиляторов языка Си; в Фортране порядок индексов
противоположен[3]).
Таким образом, адрес элемента с заданным набором индексов
вычисляется так, что время доступа ко всем элементам массива
одинаково. Примечание: Одинаковость времени доступа следует понимать
как отсутствие теоретической зависимости времени доступа от положения
элемента и размера массива. В действительности особенности аппаратной
реализации конкретной вычислительной платформы могут дать
определённый разброс времени доступа. Например, CAS-
латентность ОЗУ приводит к увеличению времени доступа к данным,
расположенным в другой колонке (странице) ОЗУ, по отношению к
предыдущим считанным данным. В практике программирования такими
тонкостями обычно пренебрегают, за редчайшими исключениями.
Первый элемент массива, в зависимости от языка программирования,
может иметь различный индекс. Различают три основных разновидности
массивов: с отсчетом от нуля (zero-based), с отсчетом от единицы (one-based)
и с отсчетом от специфического значения заданного программистом (n-
based). Отсчет индекса элемента массивов с нуля более характерен
для низкоуровневых языков программирования, хотя встречается и в языках
высокого уровня, например, в том же Си. В ряде языков
(Паскаль, Ада, Модула-2) диапазон индексов может определяться как
произвольный диапазон значений любого типа данных, приводимого к
целому, то есть целых чисел, символов, перечислений, даже логического
типа (в последнем случае массив имеет два элемента, индексируемых
значениями «Истина» и «Ложь»).
Переменные и константы в c++ способы их объявления
Константа, переменная — это базовые понятия в любом языке
программирования. Дадим им определения.
Константа — это величина, которая при выполнении программы
остаётся неизменной.
Переменная — это ячейка памяти для временного хранения данных.
Предполагается, что в процессе выполнения программы значения
переменных могут изменяться.
Описание и инициализация переменных
Прежде чем использовать в программе какую-то переменную, надо
дать ей описание, то есть сказать, какое имя имеет переменная и каков её
тип. Вначале указывается тип переменной, а затем её имя. Например:
int k; // это переменная целого типа int
double x; // это переменная вещественного типа удвоенной точности
Если имеется несколько переменных одного типа, то допускается их
описание через запятую в одном операторе, например:
double a, b, c;
После описания переменной её можно использовать, но возникает
вопрос: а какое значение имеет переменная сразу же после её описания?
Ответ таков: в программе на языке C или C++ переменная после описания
имеет произвольное значение, то есть ей просто выделяется свободный
участок памяти и на этом всё заканчивается. В переменной хранится та
последовательность двоичных цифр, которая была там до выделения памяти
под эту переменную. Такой подход таит определённую опасность: можно по
ошибке использовать в выражении переменную, которой не было присвоено
ни какое значение:
double x, y;
y = 2 * x;
Так как переменная x ни как не была определена, т. е. имела
произвольное значение (чаще всего — это очень большое число или
наоборот — очень маленькое), то и переменная y получит явно не то
значение, на которое рассчитывал пользователь.
Чтобы избежать такой ошибки, Бьерн Страуструп
рекомендует инициализировать переменные, то есть не просто выделять
память под переменные, но и задавать им при этом необходимые значения.
Например:
double a=3, b=4, c=5;
Инициализация переменных выполняется один раз на этапе
компиляции, она не снижает скорость работы программы, но при этом
уменьшает риск использования переменной, которая не получила ни какого
значения.
Операторы условного перехода в c++
Оператор условного перехода if позволяет организовать выбор хода
выполнения программы. Выбор осуществляется по некоторому условию.
Если условие выполняется, тогда выполнение программы происходит одним
путем. Иначе, программа выполняется другим путем.
Оператор условного перехода осуществляет ветвление в программе.
Оператор условного перехода может иметь следующие представления:
 полную форму ‘if … else’;
 сокращенную форму ‘if’;
 конструкцию вида ‘if … else … if’.
При решении задач, любая из форм может быть заменена другой. Одну
и ту же задачу можно решить несколькими способами. Выбор той или другой
формы оператора условного перехода if, при решении задачи, остается на
усмотрение программиста.
Общий вид полной формы оператора условного перехода if:
if (выражение)
{
// несколько операторов (инструкций)
// ...
}
else
{
// несколько операторов (инструкций)
// ...
}
где выражение – условное выражение (условие) согласно синтаксису
языка C++.
Оператор if работает следующим образом. Если элемент выражение
дает значение true (истина), тогда выполняются операторы сразу после
слова if. В противном случае (значение выражения равно false)выполняются
операторы, следующие после слова else.
Если после слова if или после слова else нужно выполнить только один
оператор (а не несколько), тогда фигурные скобки { } можно опустить.
Общая форма оператора, в котором после слов if и else нужно
выполнить только один оператор, может быть следующей:
if (выражение)
оператор1;
else
оператор2;

Пример 1. Написать фрагмент кода, в котором вычисляется значение


следующего выражения:

float f, x;

// ввод x
// ...

if ((-8<=x)&&(x<=5))
f = x*x+2*x-4;
else
f = x-5;
В вышеприведенном примере на основе значения x вычисляется
результирующее значение f.

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

Рис. 2.1. Простейшая диаграмма состояний процесса


Процесс, находящийся в состоянии процесс исполняется, через
некоторое время может быть завершен операционной системой или
приостановлен и снова переведен в состояние процесс не исполняется.
Приостановка процесса происходит по двум причинам: для его дальнейшей
работы потребовалось какое-либо событие (например, завершение операции
ввода-вывода) или истек временной интервал, отведенный операционной
системой для работы данного процесса. После этого операционная система
по определенному алгоритму выбирает для исполнения один из процессов,
находящихся в состоянии процесс не исполняется, и переводит его в
состояние процесс исполняется. Новый процесс, появляющийся в системе,
первоначально помещается в состояние процесс не исполняется.
Это очень грубая модель, она не учитывает, в частности, то, что
процесс, выбранный для исполнения, может все еще ждать события, из-за
которого он был приостановлен, и реально к выполнению не готов. Для того
чтобы избежать такой ситуации, разобьем состояние процесс не исполняется
на два новых состояния: готовность и ожидание
Граф существования процесса
Порождение – подготавливаются все условия для выполнения.
Готовность – предоставляются все ресурсы, но процесс не
исполняется, из-за внешних, по отношению к нему, обстоятельств.
Активное состояние – непосредственное использование процессора.
Ожидание – процесс может быть прерван по ряду причин: попытка
получения ресурса или отка от ресурса, порождение, уничтожение или
другие действия по отношению к другим процессам, возникновение
прерывания (арифметическое переполнение, обращение к защищенной
области оперативной памяти и др.), общая необходимость синхронизации
между параллельными процессами.
Окончание – нормальное или аварийное завершение работы.
15. Планирование процессов. Планировщик. Двухуровневая
система управления процессами. Типы планировщиков.
В мультипрограммных ОС на ресурсы могут претендовать сразу
несколько пользователей, то есть существует множество независимых
процессов, поэтому ОС должна осуществлять планирование.
Планирование процессов – управление распределением ресурсов
между различными процессами путём передачи им управления согласно
опеределённой стратегии.
Диспетчеризация процессов – выбор процесса и передачу на него
управления.
Диспетчер процессов – часть ОС, отвечающая за диспетчеризацию
процессов.
Планировщик процессов – набор функциональных модулей,
выполняющих операции, необходимые для управления процессом. Он
отвечает за постановку процессов в очередь на выполнение и управляет
структурой этой очереди.
Двухуровневая система управления процессами (используется в
большинстве ОС):
 Долгосрочное планирование – верхний уровень. На этот уровень
выносятся действия, редкие в системе, но требующие больших системных
затрат. процесс рассматривается как совокупность состояний по
использованию программы на виртуальной машине.
Состояние порождения для данного уровня – создание планировщиком
требуемой виртуальной машины. Особенность данного уровня в том, что
источник требований на порождение работы является внешним относительно
процессора. При порождении осуществляются следующие действия:
резервируются все необходимые ресурсы, резервируется память, создаётся
структура данных.
Состояние готовность – предоставлены все ресурсы виртуальной машины,
кроме виртуального процессора.
Состояние окончание – освобождены все ресурсы, которые были
использованы для построения виртуальной машины.
 Краткосрочное планирование – нижний уровень. На этом уровне
моделируется на процессоре деятельность виртуального процессора.
Состояние активность – выполнение работы на виртуальном процессоре.
Заявка на нижнем уровне … на верхнем. Доступ любого задания к
процессору осуществляется через системные программы планировщика и
диспетчера.
Типы планирования:
Единый планировщик - встроенный в ядро ОС, используется для всех
заданий.
 Разделённый планировщик – планировочный модуль помещён в
адресную часть каждой программы пользователя. Затем процесс
осуществляет подпрограмму вызова, для постановки самого себя в очередь
на исполнение. Это позволяет каждой программе иметь собственную
стратегию планирования.
16. Классические дисциплины обслуживания очереди на
исполнение процесса.
FIFO(First In – First Out) – минимизация дисперсии времени
ожидания.

LIFO (Last In – First Out) – проста в реализации, является основой для


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

Функции операционных систем


Основные функции ОС
 прием команд пользователя и их обработка;
 прием и исполнение запросов на запуск и остановку программ;
 загрузка программ, подлежащих выполнению, в оперативную
память;
 передача управления загруженной программе;
 обеспечение работы системы управления файлами;
 обеспечение режима мультипрограммирования, т.е. выполнения
двух и более программ на одном процессоре;
 обеспечение операции ввода-вывода;
 распределение памяти;
 обеспечение сохранности данных и другие.
Управление устройствами ввода и вывода операционных систем
Устройства ввода-вывода делятся на два типа: блок-
ориентированные устройства и байт-ориентированные устройства. Блок-
ориентированные устройства хранят информацию в блоках фиксированного
размера, каждый из которых имеет свой собственный адрес. Самое
распространенное блок-ориентированное устройство - диск. Байт-
ориентированные устройства не адресуемы и не позволяют производить
операцию поиска, они генерируют или потребляют последовательность
байтов. Примерами являются терминалы, строчные принтеры, сетевые
адаптеры. Однако некоторые внешние устройства не относятся ни к одному
классу, например, часы, которые, с одной стороны, не адресуемы, а с другой
стороны, не порождают потока байтов. Это устройство только выдает сигнал
прерывания в некоторые моменты времени.
Внешнее устройство обычно состоит из механического и электронного
компонента. Электронный компонент называется контроллером устройства
или адаптером. Механический компонент представляет собственно
устройство. Некоторые контроллеры могут управлять несколькими
устройствами. Если интерфейс между контроллером и устройством
стандартизован, то независимые производители могут выпускать
совместимые как контроллеры, так и устройства.
Операционная система обычно имеет дело не с устройством, а с
контроллером. Контроллер, как правило, выполняет простые функции,
например, преобразует поток бит в блоки, состоящие из байт, и
осуществляют контроль и исправление ошибок. Каждый контроллер имеет
несколько регистров, которые используются для взаимодействия с
центральным процессором. В некоторых компьютерах эти регистры
являются частью физического адресного пространства. В таких компьютерах
нет специальных операций ввода-вывода. В других компьютерах адреса
регистров ввода-вывода, называемых часто портами, образуют собственное
адресное пространство за счет введения специальных операций ввода-вывода
(например, команд IN и OUT в процессорах i86).
ОС выполняет ввод-вывод, записывая команды в регистры
контроллера. Например, контроллер гибкого диска IBM PC принимает 15
команд, таких как READ, WRITE, SEEK, FORMAT и т.д. Когда команда
принята, процессор оставляет контроллер и занимается другой работой. При
завершении команды контроллер организует прерывание для того, чтобы
передать управление процессором операционной системе, которая должна
проверить результаты операции. Процессор получает результаты и статус
устройства, читая информацию из регистров контроллера.

Компьютерная графика
Компьютерная графика – это совокупность методов и приемов для
преобразования данных в графическое
представление при помощи ЭВМ.
По способу формирования изображения:
Растовая графика: Изображение-матрица точек (пикселей); Требует
большого объема памяти; Качество зависит от разрешения экрана; Плохо
масштабируется; Максимально реалистична; Назначение – живопись, кино;
фото при сканировании; Основные форматы: pmp, pcd, tiff, gif, jpg, jpeg;
Системы растофой графики: Point, Adob Photoshop, Alive Colors, Color Pilot,
Corel PhotoPaint…
Векторная графика: Изображение – совокупность примитивов (линий,
фигур); Линии строятся по вычисленным координатам (вычисляемая
графика); В памяти хранятся параметры линий; Хорошо масштабируется;
Назначение – оформление работы, чертежи, карты и др.; Форматы: pdf, eps,
des, cdr, cmx; Средства: Adobe Illustratof, AutoCAD, CorelProwидр.
Фрактальная графика: Изображение – совокупность фракталов;
Фрактал – объект, обладающий свойствами самоподобия и детализации;
Изображение формируется по математическим расчетам (вычисляемая
графика); В памяти хранятся не объекты, а их уравнения; Назначение - для
формирования текстур, природных фонов, причудливые изображения;
Средства: Vitra Fractal, Fractal Explorer идр.
По размерности:
 2D-графика - плоские изображения
 3D-графика – графика с объемным изображением
По динамике изображения:
 Статическая графика
 Компьютерная анимация
По назначению:
 Иллюстративная – воспроизведение известных знаний
 Когнитивная – получение новых знаний, принятие решений
По области применения:
 Полиграфическая
 Для компьютерной живописи
 Для презентаций
 Кино, рекламы, клипов
 Деловая графика
 Конструкторская
 Научная
Основные цветовые модели в компьютерной графике
Цвет – один из факторов нашего восприятия светового излучения.
Считалось, что белый свет – самый простой. Опыты Ньютона это
опровергли. Ньютон пропустил белый свет через призму, в результате чего
тот разложился на 7 составляющих (7 цветов радуги). При обратном процессе
(т.е. пропускании набора различных цветов через другую призму) снова
получался белый цвет.
Видимый нами свет – это лишь небольшой диапазон спектра
электромагнитного излучения.
Белый цвет можно представить смесью всех цветов радуги. Иными
словами, спектр белого является непрерывным и равномерным – в нем
присутствуют излучения всех длин волн видимого диапазона. Можно
предположить, что, если измерить интенсивность света, испускаемого или
отраженного от объекта, во всех видимых длинах волн, то мы полностью
определим цвет этого объекта.
Однако в реальности такое измерение не предсказывает визуальное
представление объекта. Таким образом, можно определить только те
оптические свойства, которые влияют на наблюдаемый цвет:
1. Цветовой тон. Можно определить преобладающей длиной волны
в спектре излучения. Цветовой тон позволяет отличить один цвет от другого.
2. Яркость. Определяется энергией, интенсивностью светового
излучения. Выражает количество воспринимаемого света.
3. Насыщенность (чистота тона). Выражается долей присутствия
белого цвета. В идеально чистом цвете примесь белого отсутствует.
Поэтому для описания цвета вводится понятие цветовой модели -
как способа представления большого количества цветов посредством
разложения его на простые составляющие.
Для описания цветовых моделей существуют 2 системы
цветности:
 аддитивная: аддитивный синтез цвета предполагает получение
цвета смешением излучений. В аддитивном синтезе под белым цветом мы
понимаем смешение основных излучений в максимальном количестве, а
чёрный цвет - полное отсутствие излучений.
 субтрактивная: при субтрактивном синтезе компоненты
излучения попадают в глаз не напрямую, а преобразуясь оптической средой -
окрашенной поверхностью. Ее окраска выполняет функцию преобразователя
энергии излучения источника света. Отражаясь от нее или проходя насквозь,
одни лучи ослабляются сильнее, другие слабее.
Цветовая модель RGB.

В основе одной из наиболее распространенных цветовых моделей,


называемой RGB моделью, лежит воспроизведение любого цвета путем
сложения трех основных цветов: красного (Red), зеленого (Green)
и синего (Blue). Каждый канал - R, G или B имеется свой отдельный
параметр, указывающий на количество соответствующей компоненты в
конечном цвете.
Основные цвета разбиваются на оттенки по яркости (от темного к
светлому), и каждой градации яркости присваивается цифровое значение
(например, самой темной – 0, самой светлой – 255).
В модели RGB цвет можно представить в виде вектора в трехмерной
системе координат с началом отсчета в точке (0,0,0). Максимальное значение
каждой из компонент вектора примем за 1. Тогда вектор (1,1,1) соответствует
белому цвету. Внутри полученного куба и «находятся» все цвета, образуя
цветовое пространство.
Важно отметить особенные точки и линии этой модели.

 Начало координат: в этой точке все составляющие равны нулю,


излучение отсутствует (черный цвет)
 Точка, ближайшая к зрителю: в этой точке все составляющие
имеют максимальное значение (белый цвет)
 На линии, соединяющей предыдущие две точки (по диагонали),
располагаются серые оттенки: от черного до белого (серая шкала, обычно —
256 градаций). Это происходит потому, что все три составляющих одинаковы
и располагаются в диапазоне от нуля до максимального значения
 Три вершины куба дают чистые исходные цвета, остальные три
отражают двойные смешения исходных цветов.
Несмотря на неполный охват, стандарт RGB в настоящее время принят
практических для всех излучающих устройств графического вывода
(телевизоры, мониторы, плазменные панели и др.)

Цветовая модель CMY(K)

Модель CMY использует также три основных


цвета: Cyan (голубой), Magenta (пурпурный, или малиновый)
и Yellow (желтый).
Эти цвета описывают отраженный от белой бумаги свет трех основных
цветов RGB модели.
Формирование цвета происходит на белом фоне.
Цвета являются прямо противоположными красному, синему и
зеленому, т.е. голубой полностью поглощает красный, пурпурный - зеленый,
а желтый - синий.
Например, соединение в равных долях всех трех красок CMY в одной
точке приведет к тому, что весь белый свет не будет отражен, а
следовательно, цвет окажется черным. А вот одновременно и в равной
пропорции нанесенные всевозможные пары из тройки CMY дадут нам
основные цвета RGB.

Цвета модели CMY являются дополнительными к цветам RGB.


Дополнительный цвет - цвет, дополняющий данный до белого. Так,
например, дополнительный для красного цвета – голубой; для зеленого –
пурпурный; для синего - желтый

Особенные точки и линии модели.


 Начало координат: при полном отсутствии краски (нулевые
значения составляющих) получится белый цвет (белая бумага)
 Точка, ближайшая к зрителю: при смешении максимальных
значений всех трех компонентов должен получиться черный цвет.
 Линия, соединяющая предыдущие две точки (по диагонали).
Смешение равных значений трех компонентов даст оттенки серого.
 Три вершины куба дают чистые исходные цвета, остальные три
отражают двойные смешения исходных цветов.

Цветовая модель CMY является основной в полиграфии. В цветных


принтерах также применяется данная модель. Но для, что для того, чтобы
распечатать чёрный цвет, необходимо большое количество краски и кроме
того смешание всех цветов модели CMY на самом деле даст не чёрный, а
грязно-коричневый цвет. Поэтому, для усовершенствования модели CMY, в
неё был введён дополнительный цвет - чёрный. Он является ключевым
цветом при печати, поэтому последняя буква в названии модели - K (Key), а
не B. Таким образом, модель CMYK является четырёхканальной. В этом
заключается ещё одно отличие её от RGB.

Цветовая модель HSV


Рассмотренные модели ориентированы на работу с цветопередающей
аппаратурой и для некоторых людей неудобны. Поэтому модель HSV
опирается на интуитивные понятия тона насыщенности и яркости.

В цветовом пространстве модели HSV (Hue - тон, Saturation -


насыщенность, Value - количество света), используется цилиндрическая
система координат, а множество допустимых цветов представляет собой
шестигранный конус, поставленный на вершину.
Основание конуса представляет яркие цвета и соответствует V = 1.
Однако цвета основания V = 1 не имеют одинаковой воспринимаемой
интенсивности. Тон (H) измеряется углом, отсчитываемым вокруг
вертикальной оси OV. При этом красному цвету соответствует угол 0°,
зелёному – угол 120° и т. д. Цвета, взаимно дополняющие друг друга до
белого, находятся напротив один другого, т. е. их тона отличаются на 180°.
Величина S изменяется от 0 на оси OV до 1 на гранях конуса.
Конус имеет единичную высоту (V = 1) и основание, расположенное в
начале координат. В основании конуса величины H и S смысла не имеют.
Белому цвету соответствует пара S = 1, V = 1. Ось OV (S = 0) соответствует
ахроматическим цветам (серым тонам).
Процесс добавления белого цвета к заданному можно представить как
уменьшение насыщенности S, а процесс добавления чёрного цвета – как
уменьшение яркости V. Основанию шестигранного конуса соответствует
проекция RGB куба вдоль его главной диагонали.
Сферы употребления ростовой графики
Программы растровой графики работают с точками экрана
(пикселями). Точки не знают, какие объекты они представляют —
окружности, линии, прямоугольники.
Компьютер запоминает цвет каждой точки, а пользователь из таких
точек собирает рисунок, как в детской мозаике.
Достоинства растровой графики:
Растровые редакторы являются наилучшим средством обработки
фотографий и рисунков, т.к. обеспечивают высокую точность передачи
градаций цветов и полутонов.
Недостатки растровой графики:
Изображения, создаваемые в растровых программах, всегда занимают
много памяти. По этой причине информация в файлах растрового формата
хранится, как правило, в сжатом виде.
Растровые изображения невозможно увеличивать для уточнения
деталей. Так как изображение состоит из точек, то увеличение приводит к
тому, что точки становятся крупнее, что визуально искажает иллюстрацию.
Этот эффект называется пикселизацией.
Применение
Применяется для обработки фотоизображений, художественной
графике, реставрационных работ, работ со сканером.
Графические редакторы, в которых используется растровая
графика: Paint, PhotoShop.