function plotPoint(object) {
(1) → // Берем координаты объекта.
x = object.x;
o = object.o
z = object.z;
(2) →// Вычисляем расстояние от центра.
radius = Math.sqrt (x*x+y*y);
(3) →// Вычисляем первый угол.
if (x == 0) angle = Math.atan(l000000) [11] ;
else angle = Math.atan(y/x);
if (x < 0) angle += Math.PI;
(4) →// Поворачиваем объект.
angle += rotation;
(5) →// Вычисляем новые координаты.
realx = radius*Math.cos(angle);
realz = radius*Math.sin(angle);
realy = z;
(6) →// Определяем новое расстояние от центра.
radius = Math.sqrt(realy*realy+realz*realz);
(7) →// Вычисляем второй угол.
if (realz == 0) angle = Math.atan(1000000);
else angle = Math.atan(realy/realz);
if (realz < 0) angle += Math.PI;
(8) →// Добавляем угол наклона сечения.
angle += plane;
(9) →// Вычисляем координаты для экрана.
screenx = realx;
screeny = radius*Math.sin(angle);
screenz = radius*Math.cos(angle);
(10) →// Центрируем положение объекта.
screenx += 275;
screeny += 200;
(11) →// Возвращаем новые координаты.
return({x:screenx,y:screeny,z:screenz});
...
Примечание
Функция Math. atan () преобразует линию в угол в радианах. Необходимо указать значение разницы между начальной и конечной точками линии по вертикали, разделенное на значение этой же разницы по горизонтали. Например, если значения координат начальной и конечной точек линии соответственно равны (200, 200) и (275, 250), то, чтобы получить угол, необходимо записать Math.atan(75/50). Результатом будет значение .9828 радиан, что составляет примерно 56°. В действительности функция Math.atan() немного сложнее, однако данный пример позволит вам создать обшее представление о ней.
Опишем каждый шаг вышеприведенного кода:
(1) Задаются координаты x, у и z объекта.
(2)Вычисляется расстояние на плоскости xy от центра координат до проекции объекта на плоскость.
(3)Определяется угол на плоскости xy.
(4)Значение угла увеличивается на величину поворота объекта.
(5)Задаются новые координаты x, у и z с учетом изменения угла.
(6)Задается расстояние от центра координат до объекта на плоскости yz.
(7)Определяется угол на плоскости yz.
(8)Задается наклон плоскости.
(9)Задаются новые координаты x, у и z с учетом наклона.
(10) Центр новых координат имеет значение 0. Для корректировки к ним прибавляется действительное значение центра экрана (в данном случае (275, 200)).
(11) Теперь координаты x и у могут использоваться для отображения объекта на экране. С помошью координаты z можно также снизить яркость объектов, которые должны казаться расположенными дальше от пользователя.
Функция plotPointпреобразует точки с трехмерными координатами в точки с двумерными координатами при помоши ортогональной проекции. Это означает, что перспектива здесь не используется, и объекты, находяшиеся на дальнем плане, не уменьшаются. Это подходит для моделирования небольших объектов и специальных эффектов, но не годится для создания больших трехмерных сцен.
Углы куба
Теперь приступим к созданию восьми вершин куба. Данные о каждой вершине будем хранить в объекте со свойствами x, у и z. Весь список объектов хранится в массиве.
// Создаем массив из 8 точек для вершин куба.
function makePointsO {
points = new Array();
points[0] = {x: 30, y: 30, z: 30};
points[1] = {x: -30, y: 30, z: 30};
points[2] = {x: -30, y: -30, z: 30};
points[3] = {x: 30, y: -30, z: 30};
points[4] = {x: 30, y: -30, z: -30};
points[5] = {x: 30, y: 30, z: -30};
points[6] = {x: -30, y: 30, z: -30};
points[7] = {x: -30, y: -30, z: -30};
// Создаем восемь клипов для вершин куба.
for(i=0;i
attachMovie("point", "point"+i, i)
}
}
Данная функция создает восемь клипов из эталона, храняшегося в библиотеке. Имя каждого клипа состоит из слова «point» и числа от 0 до 7. Число соответствует точке массива, которую представляет клип.
...
Примечание
Команда attachMovie создает новый клип из эталона, храняшегося в библиотеке. Однако для того, чтобы его можно было воспроизвести во Flash player или на Web-странице, необходимо назначить ему свойство Export for ActionScript. Это можно сделать, выбрав команду Options → Linkage в окне Library. Вы также должны назначить клипу идентификатор. В данном случае назовем его "point".
Кроме точек и функции, преобразуюшей их координаты в экранное представление, необходимо ввести небольшую функцию, которая бы соединяла линиями полученные точки. Помимо параметров _x и _y каждой точки клипа, задается также параметр _alpha, описываюший уменьшение яркости точек по мере их удаления вглубь экрана.
Читать дальше
Конец ознакомительного отрывка
Купить книгу