Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 50092.doc
Скачиваний:
17
Добавлен:
30.04.2022
Размер:
4.95 Mб
Скачать

3.2. Функции вычисления пересечений

Команды данного раздела отвечают за вычисление пересечений геометрических объектов друг с другом.

Функция Perpendicular производит вычисление координат точки пересечения отрезка и перпендикуляра к нему, проходящего через заданную точку. Формат команды следующий:

void Perpendicular (double x, double y, double x1, double y1, double x2, double y2, double *xp, double *yp) где,

x,y- координаты точки;

x1, y1- координаты начальной точки отрезка;

x2, y2- координаты конечной точки отрезка;

xp, yp- координаты точки пересечения отрезка и перпендикуляра к нему, проходящего через заданную точку.

Пример использования:

double x1,y1,x2,y2,xp,yp;

x1=50;y1=0;

x2=0;y2=50;

Perpendicular (0,0,x1,y1,x2,y2, &xp, &yp);

Point (xp,yp,0);

Функция IntersectCirLin позволяет получить координаты точек пересечения окружности и прямой. Формат команды следующий:

void IntersectCirLin (double xc, double yc, double rad, double x, double y, double ang, int *kp, double *xp, double *yp) где,

xc, yc- координаты центра окружности;

rad- радиус окружности;

x, y- координаты точки на прямой;

ang- угол наклона прямой;

kp- число пересечений (от 0 до 2);

xp, yp- координаты точки пересечения.

Пример использования:

double x, y;

int k;

double x1=25,y1=25,r=15;

double x2=0,y2=0,ang=45;

Circle ( x1, y1, r, 0);

Line ( x2, y2, ang);

IntersectCirLin (x1, y1, r, x2, y2, ang, &k, &x, &y);

char buf[128];

sprintf(buf, "Количество пересечений = %i", k);

::Message(buf);

Аналогично работают функции по определению координат пересечений прямой с отрезком, двух прямых, отрезков и окружностей.

3.3. Функции вычисления длин, расстояний, углов

Для ряда операций, позволяющих вести построение и определять положение объектов на плоскости, необходимо иметь информацию о расположении этих объектов-координат базовых точек, расстояния между ними и т.д. В систему Компас 3D интегрированы функции, позволяющие вычислять расстояния от точки до объекта, длины объектов, углы между объектами или между объектом и осью X.

Функция Angle производит вычисление угла (в градусах) между осью OX и вектором, заданным двумя точками. Формат команды следующий:

double Angle (double x1, double y1, double x2, double y2) где,

x1, y1- координаты начальной точки вектора;

x2, y2- координаты конечной точки вектора.

Функция вернет значение угла в градусах или 0, если команда некорректно определена.

Пример использования:

double ang;

LineSeg ( 0, 0, 60, 20, 1);

LineSeg ( 0, 0, 60, 0, 1);

ang = Angle (0, 0, 60, 40);

TCHAR buf[50];

_stprintf( buf, _T("Угол= %3.2f"),ang);

MessageT( buf );

Функция DistancePntPnt позволяет получить расстояние между двумя точками. Формат команды следующий:

double DistancePntPnt (double x1, double y1, double x2, double y2) где,

x1,y1- координаты первой точки;

x2,y2-координаты второй точки.

П

double length;

Point(10,20,1);

Point(201,-20,1);

length = DistancePntPnt (10,20, 201,-20);

TCHAR buf[50];

_stprintf( buf, _T("Расстояние между двумя точками= %lf"), length);

MessageT( buf );

ример использования:

Функция ksViewGetDensity вызывает диалоговое меню, в котором определены значения плотности некоторых материалов. Формат команды следующий:

double ksViewGetDensity (void * HWindow) где,

HWindow- handle "родительского" окна или NULL.

В случае успешного выполнения функция вернет значение плотности выбранного материала. Плотность выбирается из системного файла плотностей graphic.dns.

Пример использования:

double density = ksViewGetDensity(0);

TCHAR buf[50];

_stprintf( buf, _T(" density = %2.3f г/мм3"), density );

MessageT( buf );

Выполнение программного кода в прикладной библиотеке приведет к вызову диалога, представленного на рисунке 24.

Рис. 24. Выбор значения плотности материалов из базы данных системного файла «graphic.dns»

Функция ksDistancePntLineForPoint позволяет произвести вычисление расстояния между заданной точкой и прямой, проходящей через две точки, отличные от базовой. Формат команды следующий:

double ksDistancePntLineForPoint (double x, double y, double x1, double y1, double x2, double y2) где,

x, y- координаты базовой точки;

x1, y1- координаты первой точки на прямой;

x2, y2- координаты второй точки на прямой.

Функция вернет значение расстояния в случае успешного выполнения.

Пример использования:

double xb=100,yb=130;

double x1=-20,x2=70;

double y1=40,y2=-25;

Point(xb,yb,0);

LineSeg(x1,y1,x2,y2,0);

double length = ksDistancePntLineForPoint(xb,yb,x1,y1,x2,y2);

TCHAR buf[50];

_stprintf( buf, _T("Расстояние от точки до прямой=%.2f"), length);

MessageT( buf );