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

Листинг 4.7. Вращение объекта.

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. Структуры данных для задания вершин объектов. | Листинг 4.5. Описание астероида. |


Читайте также:
  1. Алгоритм 7.1. Тест видимости объекта.
  2. Блюбери Хилл и превращение в мумию Ленина
  3. Возвращение
  4. ВОЗВРАЩЕНИЕ
  5. ВОЗВРАЩЕНИЕ
  6. Возвращение
  7. ВОЗВРАЩЕНИЕ

void Rotate_0bject(object__ptr object, float angle)

{

int index;

float x_new, y_new,cs, sn;

// сначала вычислим синус и косинус угла

сs = cos(angle);

sn = sin(angle);

// поворачиваем каждую вершину на угол angle

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

{

x_new = object->vertices [index].x*cs-object->vertices[index].y*sn;

y_new = object->vertices [index].y*cs+object->vertices[index].x*sn;

// изменяем исходные координаты.на расчетные

object->vertices[index].x = x_new;

object->vertices[index].y = у_new;

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

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

Думаю, что надо кое-что объяснить. Я вычисляю заранее значения синуса и косинуса для данного угла. Зачем, спросите вы. Ответ прост — для скорости. Ибо заниматься вычислениями тригонометрических функций в процессе работы программы можно позволить себе только, имея математический сопроцессор.

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

Я хотел бы иметь поле астероидов различных размеров в количестве более 100 штук. И так, чтобы они могли вращаться. Для этого программа должна иметь следующую структуру:

Шаг 1. - Инициировать поле астероидов;

Шаг 2. - Стереть поле астероидов;

Шаг 3. - Трансформировать поле астероидов;

Шаг 4. - Нарисовать поле астероидов;

Шаг 5. - Перейти к Шагу 2, пока пользователь не нажмет на кнопку.

Чтобы сделать это проще, я добавил три новых поля к нашей структуре: одно для угла поворота и два - для скорости (целиком программа представлена в Листинге 4.8).


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


<== предыдущая страница | следующая страница ==>
Листинг 4.6. Масштабирование астероида.| Листинг 4.8. Программа, которая рисует поле астероидов (FIELD.С).

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