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

Точка в трехмерном пространстве

Читайте также:
  1. V. Пивотная точка
  2. А. ЭНЕРГЕТИЧЕСКАЯ ТОЧКА КРЕСТЦОВОЙ ПОМПЫ
  3. Б. Формирование представлений и понятий о пространстве
  4. В. ТОЧКА НАДПОЧЕЧНИКОВ Т-11
  5. Визитная карточка студента
  6. Все наши маршруты каньонинга оборудованы надежным точками креплений от Веревочного Парка Приключений «ТЕТИС».
  7. ВЫСОКАЯ ФИНАНСОВАЯ ПОЛИТИКА, или Точка безразличия

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

 

Литералы

Точка в трехмерном пространстве записывается своими координатами 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 | Нарушение авторских прав


Читайте в этой же книге: Выделение памяти и уборка мусора | Литералы имен объектов | Литералы массивов | Выражения сравнения | Блоковые выражения | Контекстные выражения | Каскадирование префиксов | Операторы цикла do и while | Создание функций, локальных внутри структуры | Символьные строки |
<== предыдущая страница | следующая страница ==>
Логические (Булевы) значения| Точка в двумерном пространстве

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