Использование базовых геометрических типов
Следующие примеры показывают некоторых из обычно используемых функций и операторов в точке, векторе, и матричных классах. Эти примеры используют трехмерные классы, но большинство их также обращается к 2-ым классам также.
Заданный по умолчанию конструктор для точек и векторов инициализирует все координаты к 0.
Точки и векторы могут также быть созданы, определяя их координаты следующим образом:
AcGePoint3d p1 (2.0,5.0, -7.5), p2, p3 (1.0,2.0,3.0);
AcGeVector3d v1 (3.0,4.0,5.0), v2 (0.0,1.0, -1.0), v3;
Точка и векторные классы обеспечивают +, + =, -, и - = операторы. Эти операторы позволяют точки и векторы использоваться аналогичным способом, поскольку встроенные типы, типа удваиваются и целые числа. Следующее - примеры добавления и вычитания точек и векторов:
p2 = p1 + v1; // Set p2 to sum of p1 and v1.
p1 += v1; // Add v1 to p1.
p3 -= v1; // Subtract v1 from p3.
v3 = v1 + v2; // Set v3 to sum of v1 and v2.
v1 + = v2; // Прибавляют v2 к v1.
v3 = v1 - v2; // Набор v3 к различию v1 и v2.
Не имеется никакого + оператор для добавления двух точек; однако, точка может быть преобразована к вектору, который может тогда быть добавлен к другой точке:
p1 + = p2.asVector ();
Следующее - примеры того, как получить негатив вектора:
v2 = -v1; // Набор v2 к негативу v1.
v1.negate (); // Это эквивалентен v1 = -v1.
Следующее - примеры различных способов масштабировать вектор:
v1 * = 2.0; // Удваивает длину v1.
v3 = v1 / 2.0; // Набор v3 к половине длины v1.
v1.normalize (); // Делают v1 единичным вектором.
Точка и векторные классы содержат множество функций запроса для вычислительных расстояний и длин:
double len = v2.length(); // Длина v2.
len = p1.distanceTo (p2); // Расстояние от p1 до p2.
Следующая функция очень полезна для вычисления угла между двумя трехмерными векторами. Следующие возвращения угол между v1 и v2, где угол принят, чтобы быть против часовой стрелки относительно v3 (v3, приняты, чтобы быть перпендикулярными к v1 и v2):
angle = v1.angleTo (v2, v3);
Следующие функции возвращают Булево значение (TRUE или FALSE) и могут использоваться внутренние условные операторы:
if (v1.isZeroLength ())
if (v1.isParallelTo (v2))
if (v1.isPerpendicularTo (v2))
Векторный класс содержит функции для обычных векторных операций:
len = v1.dotProduct (v2);
v3 = v1.crossProduct (v2);
Заданный по умолчанию конструктор для матрицы инициализирует матрицу к единичной матрице:
AcGeMatrix3d mat1, mat2, mat3;
Следующее вращает p3 90 градусов относительно линии, определенной p1 и v1:
mat1.setToRotation (kPi/2.0, v1, p1);
p3 = mat1 * p2;
Матрица может быть инвертирована, если это не сингулярно:
if (!mat2.isSingular())
mat2.invert();
* оператор определен для связывания матриц:
mat3 = mat1 * mat2;
Следующие испытания, содержит ли матрица равное масштабирование во всех трех координатах (то есть это не изменяет форму любого примитива, к которому это применяется):
if (mat.isUniScaledOrtho ())