В листинге приведено определение очень простого класса для представления двумерных векторов. Каждый вектор будет состоять из двух чисел, хранящихся в private-элементах х и у.
На данный момент в классе vector_2d есть девять методов. Скоро их количество увеличится. Пока список методов начинается с двух конструкторов. За ними идет метод записи значения компонента х вектора. Следующий метод позволяет считывать это значение. Аналогичная пара методов записывает и считывает значение компонента у вектора. Кроме того, в классе есть методы для записи и чтения обоих компонентов одновременно. Завершает определение класса перегруженный оператор присваивания, позволяющий присваивать один объект класса vector_2d другому такому объекту этого класса.
Поскольку методы класса весьма просты, их код в книге не приводится. Если вы хотите посмотреть этот код, он находится на компакт-диске в папке Source\Chapter03, в файле PMMathLibVl. h. more…
Archive for » March, 2008 «
Почему мы начали с угловой скорости, а не с вектора, определяющего ориентацию, аналогично скаляру ориентации G в двумерном случае? Потому что связь между вектором ориентации и угловой скоростью в этом случае не такая простая, как в двумерном. Собственно говоря, ш, вектор угловой скорости, не является производным какого-то другого вектора. Почти все параметры (угловая скорость, угловое ускорение и вращающий момент) определяются похожими методами, поэтому мы начнем с них.
Вектор углового ускорения а есть производная угловой скорости по времени:
а = cL»/dt
Вроде бы неплохо. Эта формула выглядит привычно. Мы просто применили в ней векторы. Следующее, что мы сделали для двумерного тела, - связали угловые скорость и ускорение со скоростями и ускорениями частиц, образующих твердое тело. Попробуем сделать то же самое и для трехмерного тела. more…
Related posts
Ускорить работу этого алгоритма можно несколькими способами. Можно, например, использовать быстрые способы приближенного вычисления квадратных корней. Но внимательные читатели, вероятно, предложат еще лучший способ: вообще не вычислять квадратный корень!
Если у нас есть два положительных числа х и у, то, если х больше у, то и х2 будет больше у2, правда? Так почему бы нам ни сравнивать квадрат расстояния с квадратом суммы радиусов вместо расстояния с суммой радиусов?
Вот код, в котором реализована эта идея:
// Вычисляем разницу векторов местоположения сфер. vector_3d distance = balll.Location() - ball2.location(); // Находим расстояние между центрами сфер (длину вектора // расстояния).
scalar magnitude = distance.NormSquared();
// Вычисляем минимальное расстояние, при котором столкновение // не произойдет.
scalar minDistance = (balll.Radius() + ball2.Radius()); more…
Related posts
Как и в главе 6 «Сетчатые модели и Х-файлы» программа передает параметры инициализации Windows и Direct3D с помощью структуры типа d3d_init_params. В нее добавлено несколько новых элементов, позволяющих задавать местоположение и размеры окна. Кроме того, один из новых элементов указывает, нужно ли включать или отключать моделирование освещения при запуске программы. Вот определение новой версии структуры:
struct d3d_init_params {
DWORD renderingDeviceClearFlags; D3DCOLOR surfaceBackgroundColor; bool enableAutoDepthStencil; D3DFORMAT autoDepthStencilFormat; bool enableD3DLighting;
В строке 18 листинга 7.5 функция OnAppLoad () устанавливает в true элемент этой структуры enableD3DLightning. Затем структура передается функции InitAppO. Эта функция - элемент класса d3d_app. Данный класс определен в файле PMD3DApp. h, который тоже находится в папке Source\Chapter07\PointMass на компакт-диске. Код функции InitAppO приведен в листинге 7.6. more…
Related posts
Итак, теперь у нас есть готовый к применению класс d3d_point_mass. Давайте используем его в программе. Но прежде чем мы это сделаем, я хочу немного поговорить об освещении в Direct3D. Мы воспользуемся некоторыми возможностями Direct3D по моделированию освещения, чтобы получить в примере программы реалистично выглядящий шар.
ВКЛЮЧЕНИЕ МОДЕЛИРОВАНИЯ ОСВЕЩЕНИЯ В DIRECT3D more…
Related posts
Возможно, вы удивитесь, зачем вам нужны четырехмерные векторы, если вы не работаете с теорией относительности. Оказывается, четырехмерные векторы очень важны в ЗР-графике.
Длина или магнитуда (magnitude) вектора - это скалярная величина, называемая также нормой (norm) вектора. Норму вектора часто записывают в виде вектора в прямых скобках, например, |v|. Физики обычно записывают норму просто как скаляр с тем же буквенным обозначением, что и вектор, например, норма вектора v обозначается v.
Обратите внимание, что иногда норма обозначается прямыми двойными скобками, например, ||v||, поскольку прямые одинарные скобки могут обозначать абсолютное значение числа. Но, на мой взгляд, это слишком. Поскольку векторы обозначаются жирными буквами, можно отличить норму вектора |v| от абсолютного значения числа |v|.
Замечание more…
Related posts
В книгах векторы обычно обозначаются жирными строчными буквами, например, v. Чтобы записать вектор на бумаге, поставьте над буквой стрелочку, например,v. Хотя вектор существует независимо от какой-то конкретной системы координат, в любой двумерной системе координат вектор можно представить в виде пары чисел - компонентов вектора. Компоненты двумерного вектора v в некоторой координатной системе можно записать в виде (vx, vy).
Восприняв вектор в виде стрелки, указывающей из начала координат - точки с координатами (0, 0) - в точку, координаты которой заданы компонентами вектора, мы получим графическое представление длины и направления этого вектора. Если вам трудно уяснить только что сказанное, взгляните на рисунок 3.9. Представляя себе вектор таким образом, помните, что у вектора есть только длина и направление, но нет местоположения. Вектор можно размещать там, где это удобно. more…
Related posts
Все производные единицы измерения и константы в этой книге основываются на системе МКС, в которой базовыми единицами являются метр, килограмм и секунда. В таблице 3.4 перечислены некоторые производные Физики используют метрическую систему, поскольку при изучении английской системы может показаться, что ее составлял накачанный наркотиками мутант. 12 дюймов в футе; 5 280 футов в миле; 16 унций в фунте. В тесте, который автору довелось сдавать в колледже, ответ нужно было давать в фэрлонгах. После теста мы спросили у профессора, чему равен фэрлонг, и получили ответ: он равен десяти длинам поля для игры в крикет. М-да…
Метрическая система куда как проще. 1000 метров в километре; 1000 миллиметров в метре; 1000 грамм в килограмме; 1000 миллиграмм в грамме - все ясно.
Как получилось, что английская система так сложна? Эта система складывалась в течение долгого времени, и происхождение используемых в ней единиц разное. Например, фут равен средней длине ступни. more…
Related posts
Числа, определяющие координаты точек в системе координат - это расстояния, измеренные в определенных единицах. Пространство, с которым мы будем работать, обычно представляет собой привычное нам пространство, и единицами будут привычные нам единицы расстояния, например, метры или километры.
В этой книге в основном используются метрические единицы. Хотя тип используемых единиц измерения не слишком важен для компьютерных игр, почти во всех книгах по физике (и почти везде за пределами США) используются метрические единицы, поэтому будет удобнее использовать их, создавая физические модели. Метрические единицы - это часть Международной системы единиц СИ (SI - Systeme International). В таблице 3.1 перечислены основные метрические единицы, а в таблице 3.2 - некоторые коэффициенты преобразования английских единиц измерения в метрические.
Таблица 3.1. Основные метрические единицы измеренияФизики используют метрическ more…
Related posts
Замечание
Возможно, вас интересует, почему системы координат называются «правосторонними» и «левосторонними». Попробуйте вытянуть руку в направлении оси х в системе координат и согните пальцы в направлении оси у. Отогните большой палец. Если это ваша правая рука, большой палец будет указывать в вашем направлении. Поэтому в правосторонней системе координат ось z указывает на вас (из страницы), если проделать тот же опыт для левой руки, большой палец будет указывать в направлении от вас. Поэтому в левосторонней системе координат ось z указывает от вас (в страницу).
Если правосторонняя система координат была стандартом в течение столетия, как вы думаете, какая система координат используется в Di-rect3D? Увы! Левосторонняя. Чтобы увидеть разницу между этими двумя системами, посмотрите на рисунок.Из-за этой путаницы многие авторы книг по программированию используют разные координатные системы, не замечая этого. Будьте внимательны! more…
