exit;
end;
for i:=0 to N do Result := Result + VI[i] * V2[i];
end;
function CosVector(const VI, V2: TVector): real;

// Косинус угла между двумя векторами

// Реализация далеко не самая быстрая, но компактная

begin

Result := MultSVector(VI, V2) / (ModVector(VI) * ModVector(V2));
end;

function FVector(const VI, V2: TVector): real; // Угол в радианах между двумя векторами begin

Result := ArcCos(CosVector(VI,V2));
end;
function MultWector (const VI, V2: array of real): TVector;

// Векторное умножение двух трехмерных векторов

begin

ErrorMatrix := false;

if(Length(VI) <> 3) or (Length(V2) <> 3) then begin

Messages (1 Функция MultWector :'#13 + 'Заданы не трехмерные векторы');
exit;
end;
SetLength(Result, 3);
Result[0] := VI[1] * V2[2] - VI[2] * V2[1];
Result [1] := Vl[2] * V2[0] - V1[0] * V2[2];
Result [2] := VI [0] * V2[l] - VI [1] * V2 [Ob-end;
end;

В интерфейсе модуля объявлен тип векторов TVector как динамический массив действительных чисел. Далее идут объявления переменных, функций и процедур. Процедура сообщений об ошибках Messages и связанные с нею переменные рассматривались ранее в гл. 1, в разд. 1.1.1.3, и повторно мы не будем на ней останавливаться. Перегруженная функция Create Vector создает массив типа TVector. Вариант функции с целым аргументом, указывающим размер вектора, создает массив указанного размера и заполняет его нулями. Вариант с аргументом в виде открытого массива создает вектор и заполняет его указанными значениями. Например, оператор

VI := CreateVector([2,3,4,3,25]);

создает вектор VI с элементами 2, 3, 4, 3, 25. Реализация функций Create Vector очень проста и вряд ли нуждается в дополнительных комментариях.

Функция Dim Vector возвращает размерность вектора, переданного в нее как параметр, а функция High Vector возвращает индекс последнего элемента вектора, т.е. значение, на 1 меньшее размерности. Обе эти функции являются вспомогательными и их реализация очевидна.

Функция ModVector возвращает модуль вектора. Если размер вектора 0, то функция возвращает 0. Функция EqVector осуществляет сравнение двух векторов. Если векторы равны (имеют одинаковый ненулевой размер и все элементы векторов совпадают), то возвращается true. В противном случае возвращается false. Функция Sum Vector возвращает вектор, равный сумме двух векторов одинаковой размерности, переданных в нее в качестве аргументов. В случае, если размерность векторов не одинакова, выдается сообщение об ошибке. Аналогично работает функция Sub Vector, возвращающая разность двух векторов. Функция CMultVector возвращает вектор, равный произведению числа, указанного первым аргументом, на вектор, указанный вторым аргументом.

Функция MultSVector возвращает действительное число, равное скалярному произведению двух векторов одинаковой размерности, переданных в нее в качестве аргументов. Функция Cos Vector возвращает косинус угла между двумя векторами. Реализация этой функции, приведенная в коде, использует вызовы функций MultSVector и ModVector. Это позволяет реализовать функцию всего одним оператором. Но надо отметить, что это, конечно, далеко не самый эффективный метод вычисления. Функция FVector возвращает значение в радианах угла между двумя векторами. Реализация этой функции сводится к вызову функции Cos Vector и последующему вызову стандартной функции ArcCos. Функция MultVVector вычисляет векторное произведение двух трехмерных векторов.

2.1 Векторы || Оглавление || 2.1.3 Тестовое приложение


⇐ Предыдущая страница|

Приемы программирования в Delphi на основе VCL



Новости за месяц

  • Июнь
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31