Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Листинг 4.6. Масштабирование астероида.

Листинг 3.3. Программа работы с джойстиком (JOY.C). | Bios INT 16h | Листинг 3.5. Получение скан-кодов с клавиатуры. | Листинг 3.7. Демонстрационная программа работы с клавиатурой (KEY.C). | Bios INT 33h | Листинг 3.8. Работа с мышью (MOUSE.C). | МЕХАНИЗМЫ ДВУХМЕРНОЙ ГРАФИКИ | Листинг 4.1. Программа, рисующая точки (POINTY.C). | Листинг 4.2. Программа, рисующая линии (LINER.С). | Листинг 4.4. Структуры данных для задания вершин объектов. |


Читайте также:
  1. Visual Basic. Масштабирование размеров формы с помощью метода Scale. Методы Pset, Line, Circle.
  2. Алгоритм 8.1. Масштабирование спрайта.
  3. Листинг 11.2. Структура данных игрока.
  4. Листинг 11.3. Функции полета мухи.
  5. Листинг 11.4. Муравейник (ANTS.С).
  6. Листинг 11.5. Падение мяча (BALL.C).
  7. Листинг 11.6. Идеальный газ (GAS.C).

void Scale_Object(object_ptr object,float scale)

{

int index;

// для всех вершин масштабируем х- и у-компоненты

for (index = 0; index<object->num vertices; index++)

{

object->vertices [index].х *= scale;

object->vertlces[index].y *= scale;

} // конец цикла for

} // конец функции

 

Функция из Листинга 4.6 работает путем масштабирования координат каждой из вершин объекта. Если нам придет в голову увеличить наш объект «астероид»- в два раза, то нам потребуется написать следующее:

 

Scale_Object((object_ptr)&asteroid,2, 0};

 

С этим, вроде, все. Теперь мы уже готовы приступить к вращению объекта.

Вращение объектов

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

Если экран — это плоскость X-Y, то ось Z — это перпендикуляр к осям Х и Y. Таким образом, если мы описываем наши объекты относительно двухмерного мира, то у нас появляется возможность вращать их относительно оси Z,

Следующие формулы позволяют вращать произвольную точку (X,Y) отно­сительно оси Z:

 

new_x = x*cos(angle) - y*sin(angle) new_у = y*cos(angle) + y*sin(angle)

 

где angle — это угол, на который вы хотите повернуть точку. Кроме этого вам стоит помнить еще пару вещей:

§ Положительные углы имеют эффект вращения по часовой стрелке;

§ Отрицательные углы имеют эффект вращения против часовой стрелки.

 

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

Deg_To_Rad(deg) {pi*deg/180;}

Rad_To_Deg(rad) {180*rad/pi;}

Другими словами, это значит, что в круге 360 градусов или 2хPi радиан. Теперь нам нужно написать функцию для вращения объекта. Давайте просто используем формулы, не задумываясь о том, как и почему они работают. Функция в Листинге 4.7 делает именно то, что мы хотим.


Дата добавления: 2015-07-12; просмотров: 79 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Листинг 4.5. Описание астероида.| Листинг 4.7. Вращение объекта.

mybiblioteka.su - 2015-2024 год. (0.005 сек.)