Odyssey paper #08
31 марта 1999

Алгоритмы - вращение в трехмерной системе координат. Матрицы.

Алгоритмы
 _________
 
 Подготовлено  по  материалам   зарубежной
прессы.



 Rotations - Вращения
 ____________________

 One thing that could look nice in our  3d
world, would be rotations. Actually, rota-
tions are what we use when doing   camera,
and rotation is also what we need to   add
if we want any object to move in any  way.
It would here, be an advantage to have le-
arned or have the knowledge about    sinus
and cosinus, but if this is not the  fact,
then just try to hang on.
 
 Есть одна вещь, которая помогает   выгля-
деть нашему 3D миру реально есть вращения.
Фактически, вращения - то, что мы  исполь-
зуем при движении камеры,и вращение - так-
же, что мы должны добавить, если мы хотим,
чтобы любой объект двигался в любом   нап-
равлении. Это надо   использовать,   чтобы
иметь преимущество, чтобы   изучить    или
иметь знание относительно синусов и  коси-
нусов, но если это - не так,     то только
пробуют зависать на ( надо знать sin,cos).

 At first, lets look at 2d rotations. What
we need here is to rotate a xy point  aro-
und the two axis', or the point 0,0.  This
is done with the formulars:

 Сначала, давайте рассмотрим 2D  вращения.
В чем мы нуждаемся, чтобы  вращать   точку
xy вокруг двух осей, или точки 0,0?

 Это формулы:

 newx = x*cos(theta) - y*sin(theta)


 newy = y*cos(theta) + x*sin(theta)


 Now, we can see thatnewx equals x multip-
lied with cos(theta) and added y multipli-
ed with sin(theta). Some might wanna   ask
why we have the y axis messed into the ro-
tation of x, but thats actually     pretty
simple. The result newx  have   absolutely
nothing to do with the origional x value ,
it is a product of x and y. Now, what   we
can see of the above formulars, we multip-
ly with the current axis and add a multip-
ly of the second axis. An example is given
below:

 Теперь, мы можем видеть, что newx  равня-
ется x*cos(theta)-y*sun(theta).  Некоторые
могли бы спросить, почему мы ось y смешали
во вращение с x? Это довольно просто.  Ре-
зультат newx не имеет абсолютно    ничего,
чтобы делать с оригинальным значением   x,
это - произведение x и y. Теперь, что   мы
можем видеть в вышеупомянутых формулах, мы
умножаемся с текущей осью  и   добавляемся
умножающийся из второй оси. Пример дан ни-
же:

  x = 10
  y = 0
  angle = 45



  newx  = 10*cos(10) - 0*sin(10)


  newy  = 0*cos(10) + 10*sin(10)


  newx  = 9.85


  newx  = 1.74


 Now, would we like to rotate around  ano-
ther point than 0,0 we have  to   subtract
the value from the x and y point. This wo-
uld look like this:

 Теперь, вращаем вокруг другой точки,  от-
личной от 0,0. Мы должны вычесть  значение
из точки y и x.

 Это выглядит следующим образом: 


 newx = (x-startx)*cos(theta) - (y-starty)
*sin(theta) + startx


 newy = (y-starty)*cos(theta) + (x-startx)
*sin(theta) + starty


 For an example, we want the point   (7,0)
rotated 180 degress around the point (6,0)
Now, by decreasing our point by (6,0)  we'
ve moved it into (1,0).
 If we rotate this by 180 degress it would
return (-1,0) and this we add  with    our
start x and y values to a final result  of
(5,0). A nice and correct result. But  all
of this have nothing to do with 3d rotati-
ons, so lets get on with that.

 Для примера, мы хотим чтобы точка (7,0) ,
повернулась на 180 градусов вокруг   точки
(6,0). Теперь, уменьшая нашу точку до  (6,
0) мы переместили ее в (1,0). Если мы вра-
щаем ее на 180 градусов, это возвратило бы
(-1,0), и это мы добавляем к нашему началу
x и значениями y  к  конечному  результату
(5,0). Хороший и правильный результат. 

 Matrices - Матрицы
 __________________

 Matrices are used to simplify code and in
most cases to make them faster.This we can
see in our rotation code,where we use them
to cut the normal 12 muls down to 9  muls.
Now, lets look at the basics. In   general
matrices are just an array of number,which
you give to a set of variables. Lets  look
at some of the matrices we use in the  co-
de.

 Матрицы используются, чтобы упростить код
и в большинстве случаев, чтобы сделать его
быстрее. Это мы можем видеть в нашем  коде
вращения, где мы используем их для  усече-
ния нормали  с 12 умножений до 9 умножений
Теперь, давайте рассмотрим основы.  Вообще
матрица - только таблица чисел, в  которой
Вы имеете множество переменных. Рассмотрим
некоторые из матриц, которые мы используем
в коде:

   [ x'] [1 0 0 -camerax] [x]


   [ y'] [0 1 0 -cameray] [y]


   [ z'] [0 0 1 -cameraz] [z]


   [ 1 ] [0 0 0     1   ] [1]


 This matrix is also called a 4x4 matrix ,
since it has four rows and coloums.   Now,
4x4 and 3x3 matrices are the most   common
matrices in 3d programming, but  they  can
ofcourse be found in any size. Now,   what
does the above matrix mean, and how do  we
get the right values and which   variables
do we change? Lets take a look.

 Эта матрица называется 4x4 матрицей,  так
как она имеет четыре строки и колонки. Те-
перь, 4x4 и 3x3 матрицы - наиболее   общие
матрицы в 3D программировании, но они  мо-
гут конечно быть любого размера.   Теперь,
что вышеупомянутая матрица означает, и как
мы получаем значения справа из переменных,
которые изменяются? Давайте рассмотрим.

 First we have the variables x', y',z' and
the number 1. After that we have four  set
of numbers. Then we have the variables  x,
y, z and the number 1 again. Now, what  we
basicly do here is that we multiply    the
first row of the second part of the matrix
with each of the variables in the   thirds
row, add them together and them give  them
to the variable in the first part of   the
matrix of that specific row. A better  way
to show this would be this:

 Сначала мы имеем переменные x ', y ', z '
и число 1. После этого мы имеем 4 множест-
ва чисел. Затем мы имеем переменные x,  y,
z и снова число 1. Теперь, что мы   просто
делаем? Мы умножаем первую строку   второй
части матрицы с каждой из переменных в ст-
роке третьей части, складываем их вместе и
присваеваем результат к переменной в  пер-
вой части матрицы этой специфической стро-
ки.

   x + y + z  +  1


   *   *   *      *

   [x']=[ 1   0   0  -camerax]
   [y']=[ 0   1   0  -cameray]
   [z']=[ 0   0   1  -cameraz]
   [ 1]=[ 0   0   0      1   ]


 In this case every variable would have  z
value:

 В этом случае каждая переменная имела  бы
значение:

   x' = 1*x + 0*y + 0*z + -camerax * 1


   y' = 0*x + 1*y + 0*z + -cameray * 1


   z' = 0*x + 0*y + 1*z + -cameraz * 1


   1' = 0*x + 0*y + 0*z + 1 * 1


 Now this might be a little hasty to begin
with, so lets take a look at some    other
way to explain matrices. Now, say we  need
to do the following:

 Теперь нам поможет небольшое отступление,
чтобы двинуться дальше, поэтому    давайте
посмотрим другой способ, чтобы   объяснить
матрицы. Теперь,  в чем мы нуждаемся , так
это сделать вот что:

    x' = 3x + 8y


 Or another way of saying this is:

 Или по-другому:

    x' = ax + by


 Следовательно мы можем делать матрицу:

   [x]


   x' = [a b][y]


 Now, lets make this a 2x2 matrix  instead
of 2x1.

 Теперь, поместим матрицу 2x2  вместо 2x1.

   x' = 3x + 8y
   y' = 6x + 2y


   x' = [3 8][x]
   y' = [6 2][y]



 Теперь, мы желаем делать так:

   x' = 3x + 8y + 9
   y' = 6x + 2y + 2


   x' = [3 8 9][x]
   y' = [6 2 2][y]
   1' = [0 0 1][1]


 As you can see, what we do is to take the
third part and multiply the first row with
the first coloumn, then add second row  of
the second part multiplied with the second
coloumn, and so on. This should be    very
simple and easy to understand. 

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





Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Железо - доpаботка Scorpiona, после котоpой будут pаботать все пpогpаммы, с пеpеключением стpаниц по #FD.
Помощь - об оболочке: произошли некоторые изменения в кнопках.
Обзор игрушек - Обзор игровых программ: Figus, Зеркало, Iron Man, Gyron Atrium, Homer Simpson in Russia, Головобол, Monster Land, Devil's course, Astro Ball, Net Walk, Nexus.

В этот день...   12 ноября