русс | укр

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

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Лекция №2


Дата добавления: 2013-12-23; просмотров: 993; Нарушение авторских прав


Список литературы

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

Цветовые модели YUV, YPbPr и YCbCr

Расcмотрим цветовую модель YUV. U и V отвечают за цветовую информацию и определяются через преобразование из RGB:

Y = 0,299R + 0,587G + 0,114B;

U = 0,492(B - Y) = -0,147R - 0,289G + 0,436B;

V = 0,877(R - Y) = 0,615R - 0,515G + 0,100B;

Модель YUV применяется в телевизионной системе PAL.


Рис. 1.17. RGB-куб в пространстве YUV, диаграмма UV при Y = 0,5.

Цветовые модели YCbCr и YPbPr являются вариациями YUV с другими весами для U и V (им соответствуют Cb/Pb и Cr/Pr). YPbPr применяется для описания аналоговых сигналов (преимущественно в телевидении), а YCbCr - для цифровых. Для их определения используются два коэффициента: Kb и Kr (полный набор формул см. в [1-4]). Выбор Kb и Kr зависит от воспроизводящего оборудования. Обычно берется, как и выше, Kb = 0.114; Kr = 0.299. В последнее время также используют Kb = 0.0722; Kr = 0.2126, что лучше отражает характеристики современных устройств отображения.

Цветовая модель YIQ применялась в телевизионной системе NTSC (I - от англ. in-phase, Q - от англ. quadrature; происходят от особенностей систем декодирования). Она тесно связана с моделью YUV, так как переход от YUV к YIQ является поворотом в плоскости UV = IQ на 33°:

Y = 0,299R + 0,587G + 0,114B

I = 0,735(R - Y) - 0,268(B - Y) = 0,596R - 0,274G + 0,321B

Q = 0,478(R - Y) + 0,413(B - Y) = 0,211R - 0, 523G + 0,311B

Обратные преобразования для всех моделей получаются в результате применения обратных матриц.

 

 

1. Порев В.Н. Компьютерная графика. –СПб.: БХВ-Петербург, 2002. –432с.

2. Хилл Ф. OpenGL. Программирование компьютерной графики. – С.Пб: Питер, 2002. 1088с.

3. Шикин Е.В., Боресков А.В. Компьютерная графика. Полигональные модели. –М.: ДИАЛОГ-МИФИ, 2001.-464с.



4. Иванов Д.В., Карпов А.С., Кузьмин Е.П., Лемпицкий В.С., Хропов А.А, Алгоритмические основы растровой машинной графики. БИНОМ. Лаборатория знаний, Интернет-университет информационных технологий - ИНТУИТ.ру, 2007 (http://www.intuit.ru/shop/product-2493469.html)

Переменные

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

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

Имя переменной (например myVariable) можно представить себе как надпись на ячейке, по которой ее можно найти, даже не зная ее настоящего номера (адреса памяти).

Согласно этой схеме, переменная myVariable начинается в ячейке с адресом 103.

Определяя переменную, необходимо предоставить компилятору информацию о ее типе: int, float и др. Благодаря этой информации компилятору будет известно, сколько места нужно выделить для хранения переменной и какого рода значение будет в ней находиться.

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

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

Функция sizeof() поддерживается каждым компилятором, и возвращает размер объекта, переданного ей в качестве параметра.

Все целочисленные типы существуют в двух вариантах: signed (знаковые) и unsigned (беззнаковые). Это связано с тем, что отрицательные числа иногда не нужны. А поскольку как для знаковых, так и для беззнаковых целых отводится одно и тоже число байтов, то максимальное число, которое можно хранить в беззнаковом целом, вдвое превышает максимальное положительное число, которое можно хранить в знаковом целом.

Ниже представлена таблица основных типов переменных.

Тип Размер Значение
bool 1 байт true или false
unsigned short int 2 байта от 0 до 65 535
short int 2 байта от -32 768 до 32 767
unsigned long int 4 байта от 0 до 4 294 967 295
long int 4 байта от -2 147 483 648 до 2 147 483 647
int (16 разрядов) 2 байта от -32 769 до 32 767
int (32 разряда) 4 байта от -2 147 483 648 до 2 147 483 647
unsigned int (16 разрядов) 2 байта от 0 до 65 535
unsigned int (32 разрядов) 4 байта от 0 до 4 294 967 295
Char 1 байт 256 значений символов
Float 4 байта от 1,2е-38 до 3,4е38
double 8 байт от 2,2е-308 до 1,8е308

 

Чтобы создать или определить переменную, необходимо указать ее тип, за которым (после одного или нескольких пробелов) должно следовать ее имя, завершающееся точкой с запятой. Для имени переменной можно использовать практически любую комбинацию букв, но оно не должно содержать пробелов: x, J23qwer и myAge.

Некоторые слова изначально зарезервированы в языке С++ и поэтому их нельзя использовать в качестве имен переменных. Такие слова называются ключевыми и используются компилятором для управления программой. В их число входят if, while, for, main и так далее.

Для присвоения переменной значения используется оператор присвоения (=). Присвоить переменной Width число 5 можно следующим образом:

int Width;

Width = 5;

Эти строки можно объеденить в одну: int Width = 5;

Ниже показана полностью готовая к компиляции программа, которая вычисляет площадь прямоугольника и выводит на экран результат.

Строка 5 содержит директиву препроцессора include, подключающую библиотеку iostream, которая обеспечивает работоспособность объекта cout. Программа начинает работу в строке 8. Строка 10 говорит, что будут использоваться объкты из стандартного пространства имен (std).

В строке 12 переменная Width определяется как int и сразу же инициализируется числом 5. В этой же строке определяется еще одна переменная Length такого же типа, но без инициализации. В строке 13 переменной Length присваивается значение 10.

В строке 16 определяется переменная типа int, которая инициализируется значением, полученным в результате умножения значений Width и Length. В строках 18-20 значения всех переменных выводятся на экран. Для переноса строк используется специальный оператор endl.

Переменные типа unsigned long int могут хранить очень большое, но все-таки конечное число.если необходимо работать с еще большими числами, придется перейти к использованию типов float или double, но при этом возможен некоторый проигриш в точночти. Переменные типа float и double могут хранить чрезвычайно большие числа (а также числа с плавающей точкой, дробные числа), но на большинстве компов значимыми остаются лишь первые 7 или 9 цифр, т.е. после указанного количества цифр число округляется.

Переполнение регистра переменной типа short

В строке 12 обявлена переменная Number типа unsigned short int, которая на компьютере является двухбайтовой , способной хранить занчение от 0 до 65 535. Тут же ей присваивается максимально допустимое значение , а в строке 13 она выводится на экран.

В строке 14 переменная увеличивается на 1. Приращение осуществляется с помощью оператора инкримента, имеющего вид двух символов плюс (++). Следовательно, значение переменной Number должно стать 65 536. Но переменная типа unsigned short int не может хранить число, большее 65 535, поэтому ее значение сбрасывается в 0, которое и выводится на экран в строке 15.

В строке 16 переменная Number вновь увеличивается на единицу, после чего ее новое значение опять выводится на экран.

Переполнение регистра переменной типа signed integer

Константы

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

В языке С++ предусмотрено два типа констант: литеральные и символьные.

Литеральная константа - это значение, непосредственно вводимое в самой программе. Например, в выражении int myAge = 25; слово myAge является переменной типа int, а число 25 – литеральной константой. Константе 25 никакого иного значения присвоить нельзя.

Символьная константа – это константа, представляемая именем. Но в отличии от переменной, значение инициализированной константы изменить нельзя.

Если впрограмме есть одна целочисленная переменная с именем students, a другая с именем classes, то можно было бы вычислить общее количество учеников школы при условии, что известно, сколько классов в школе и сколько учеников в каждом классе (допустим каждый класс насчитывает 15 учеников):

students = classes * 15;

В этом примере число 15 является литеральной константой. Но если эту литеральную константу заменить символьной, то программу будет легче читать и изменять в будущем:

students = classes * studentsPerClass;

для определения константы традиционным способом введите следущее выражение:

#define studentsPerClass 15

Обратите внимание, константа studentsPerClass не имеет ни какого конкретного типа. Директива #define просто выполняет текстовую подстановку. Каждый раз, когда препроцессор встречает слово studentsPerClass, он заменяет его литералом 15.

Существует новый, более удобный способ определения константы:

const int studentsPerClass = 15;

В этом примере также объявляется константа с именем studentsPerClass, но на сей раз для нее задается тип int. При таком способе определения константы компилятор может проследить за ее приминением только по назначению (т.е. в соответствии с объявленным типом).



<== предыдущая лекция | следующая лекция ==>
 | ПОСТРОЕНИЕ ГРАФИКА ФУНКЦИИ, ЗАДАННОЙ НЕЯВНО


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.