Читайте также:
|
|
Точка в трехмерном пространстве определяется тремя координатами, которые представляют собой вещественные числа. В зависимости от задачи, точка может интерпретироваться и как вектор.
Литералы
Точка в трехмерном пространстве записывается своими координатами X, Y и Z, разделенными запятыми и заключенными в квадратные скобки.
[ Координата_X, Координата_Y, Координата_Z ]
В качестве координат могут выступать как числа, так и сколь угодно сложные выражения, результатом которых будут вещественные или целые числа. Имеются три предопределенных значения
x_axis -- то же что [ 1, 0, 0 ]
y_axis -- то же что [ 0, 1, 0 ]
z_axis -- то же что [ 0, 0, 1 ]
соответственно обозначающие единичные вектора, направленные по осям X, Y и Z.
Конструкторы
Точка в трехмерном пространстве очевидным образом задается своими координатами
point3 Число_1 Число_2 Число_3
Указанные числа задают координаты соответственно X, Y и Z. Кроме этого точка может быть преобразована из цвета
Цвет as point3
При этом координата X будет равна красной составляющей цвета, Y – зеленой, Z – синей.
Свойства
Точка в трехмерном пространстве имеет только три свойства, обеспечивающих доступ к ее координатам
Точка_в_3D_пространстве. x
Точка_в_3D_пространстве. y
Точка_в_3D_пространстве. z
Операторы
Для точек в трехмерном пространстве определены две операции сравнения – равенство и неравенство
Точка_в_3D_пространстве_1 = = Точка_в_3D_пространстве_2
Точка_в_3D_пространстве_1! = Точка_в_3D_пространстве_2
Определены и операции сложения, умножения, вычитания и деления
Точка_в_3D_пространстве_1 + Точка_в_3D_пространстве_2_или_число
Точка_в_3D_пространстве_1 * Точка_в_3D_пространстве_2_или_число
Точка_в_3D_пространстве_1 - Точка_в_3D_пространстве_2_или_число
Точка_в_3D_пространстве_1 / Точка_в_3D_пространстве_2_или_число
Эти операции перемножают, складывают, вычитают и делят соответствующие координаты точек. Например, если есть точка p1 с координатами x1, y1 и z1 и точка p2 с координатами x2, y2 и z2, то произведение p1*p2 будет иметь координаты x1*x2, y1*y2 и z1*z2. При умножении или сложении точки с числом каждая координата этой точки перемножается или складывается с этим числом. Что касается деления и вычитания точки и числа, то здесь необходимо учитывать некоторую тонкость. Представим себе, что мы решили вычесть из определенной выше точки p1 число a. В этом случае координаты результирующей точки p1-a будут x1-a, y1-a и z1-a. Все правильно, а теперь попробуем вычесть из числа a точку p1. Логично было бы ожидать, что результат a-p1 будет иметь координаты a-x1, a-y1 и a-z1. Ничуть не бывало, при вычитании точки и числа имеет место парадоксальное равенство p1-a = a-p1. То же касается и деления – p1 / a окажется равно a / p1.
Точка может умножаться и на матрицу 4х3
Точка_в_3D_пространстве * Матрица_4х3
при этом умножение можно производить только в таком порядке – точку на матрицу, но не наоборот – матрицу на точку. Результатом будет преобразование координат точки в соответствии с заданной матрицей. Аналогичная картина наблюдается и при умножении точки на кватернион
Точка_в_3D_пространстве * Кватернион
Результат такого умножения – поворот точки в пространстве в соответствии с кватернионом. Точно так же, как в случае с матрицей, порядок записи компонентов при умножении важен.
Последним оператором, определенным для точки, является унарный минус.
- Точка_в_3D_пространстве
Он обращает знаки всех координат точки.
Методы
Для точки в трехмерном пространстве определена функция копирования
copy Точка_в_3D_пространстве
Функция
length Точка_в_3D_пространстве
возвращает длину вектора, то есть квадратный корень из суммы квадратов координат. Скалярное произведение двух векторов вычисляется с помощью функции
dot Точка_в_3D_пространстве_1 Точка_в_3D_пространстве_2
Точки при этом выступают как вектора. Векторное произведение векторов рассчитывается с помощью функции
cross Точка_в_3D_пространстве_1 Точка_в_3D_пространстве_2
Чтобы нормализовать вектор, то есть, оставив прежним направление, сделать его длину равной единице, применяют функцию
normalize Точка_в_3D_пространстве
Функция
distance Точка_в_3D_пространстве_1 Точка_в_3D_пространстве_2
вычисляет величину расстояния между двумя точками в трехмерном пространстве. Генерацию случайной точки в трехмерном пространстве осуществляет функция
random Точка_в_3D_пространстве_1 Точка_в_3D_пространстве_2
при этом координаты результирующей точки лежат в диапазоне координат указанных точек. Имеется две функции, генерирующие матрицу по заданной точке. Первая из них
arbAxis Точка_в_3D_пространстве
возвращает матрицу 4х3, определяющую произвольную систему координат, ось Z которой направлена по вектору, определяемому указанной точкой. Часть матрицы, соответствующая перемещению точки (четвертая строка) нулевая. Коэффициенты масштабирования по всем осям – единичные. Вторая функция
matrixFromNormal Точка_в_3D_пространстве
так же генерирует матрицу, определяющую систему координат. Ее ось Z, то есть третья строка матрицы, в точности повторяет координаты заданной точки. Четвертая строка результирующей матрицы – нулевая. Что касается коэффициентов масштабирования, то они определяются как единица, деленная на коэффициент, нормализующий вектор, заданный исходной точкой.
Для точек в трехмерном пространстве определены функции генерации помех.
noise3 Точка_в_3D_пространстве
реализует псевдослучайный трикубический сплайн. Возвращает вещественное число в диапазоне от минус до плюс единицы. При задании одной и той же точки, возвращаемый результат всегда один и тот же.
noise4 Точка_в_3D_пространстве Число
Работает так же, как и noise3, но параметры сплайна могут варьироваться с помощью второго параметра.
turbulece Точка_в_3D_пространстве Число
Имитирует турбулентную помеху. Частота турбулентности задается вторым параметром, возвращаемое значение – вещественное число в диапазоне от нуля до плюс единицы. И последняя функция генерации помех
fractalNoise Точка_в_3D_пространстве Число_1 Число_2 Число_3
три последних числа представляют собой параметры фрактальной помехи. Первый параметр должен находится в диапазоне от нуля до плюс единицы. При значении нуль генерируется белый шум, при единице выходное значение относительно гладкое. Второй параметр – промежуток между частотами, рекомендуемое значение – 2.0. Третий – количество частот в выходном значении. Для примера рассмотрим скрипт, реализующий текстуры с помощью перечисленных функций помех.
b_width = 320 -- ширина результирующей текстуры
b_height = 320 -- высота результирующей текстуры
size=10.0 -- расстояние между крайними точками
-- по горизонтали и вертикали
z = 0. -- z координата точек
phase = 0.5 -- дополнительный параметр для noise4
frequency = 10. -- параметр турбулентности
fract_interval = 0.5 -- параметры функции fractalNoise
lacunarity = 2.0
octaves = 5
-- **********************************************************
whichfunc=1 -- номер функции помех
-- 1 = noise3; 2 = noise4; 3 = turbulence; 4 = fractalNoise
-- **********************************************************
b = bitmap b_width b_height -- создадим текстуру как битовую карту
for h = 0 to (b_height-1) do -- цикл по высоте текстуры
(h_norm = (h as float/(b_height-1))*size -- расчет координаты Y
row = for w=0 to (b_width-1) collect -- соберем массив цветных точек
(w_norm=(w as float/(b_width-1))*size -- расчет координаты X
noise_val = case whichfunc of -- выбор функции помехи
(1: noise3 [w_norm, h_norm, z]
2: noise4 [w_norm, h_norm, z] phase
3: turbulence [w_norm, h_norm, z] frequency
4: fractalNoise [w_norm, h_norm, z] fract_interval lacunarity octaves
)
noise_val = 0.5*(1.+noise_val) -- перевод выходного значения в
-- диапазон от 0.0 до 1.0
white*noise_val -- цвет точки получается умножением
-- результата на белый цвет
)
setpixels b [0,h] row -- заполним строку текстуры получившимися точками
)
display b -- вывод получившейся текстуры
Заменяя номер функции в строке, выделенной звездочками, можно получить следующие картинки
noise3 (1) noise4 (2)
turbulence (3) fractalNoise (4)
Дата добавления: 2015-10-31; просмотров: 126 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Логические (Булевы) значения | | | Точка в двумерном пространстве |