Главная » Delphi, OLE, САПР » Построение перпендикуляра к отрезку – КОМПАС в DELPHI

0

 

Постановка задачи

Рассмотрим такую задачу: предположим у нас есть какой-то отрезок. Как построить перпендикуляр к этому отрезку, проходящий через заданную точку?

Если мы имеем дело с горизонтальным или вертикальным отрезком, то это не проблема: строим вертикальный или горизонтальный отрезок. Но как быть, если изначальный отрезок ориентирован произвольным образом. Тогда есть два выбора:

1)                                            решать данную задачу вручную с использованием знаний аналитической геометрии или векторной алгебры1;

2)                                            использовать систему КОМПАС, которая сама решит эту задачу за нас.

Вот о том, как решать эту задачу с использованием системы КОМПАС мы и поговорим.

Метод ksPerpendicular

У интерфейса ksMathematic2D, с которым мы уже работали в предыдущих главах, есть специальный метод, предназначенный как раз для решения нашей задачи ksPerpendicular. Вот прототип этого метода:

ksPerpendicular(

x: Double; y: Double; x1: Double; y1: Double; x2: Double; y2: Double;

var xp: Double; var yp: Double

): WordBool;

Здесь: x и y – координаты точки, через которую должен проходить перпендикуляр;

x1 и y1 – координаты первой точки отрезка, к которому ищется перпендикуляр;

x2 и y2 – координаты второй точки отрезка, к которому ищется перпендикуляр;

xp  и  yp  –  в  эти  параметры  будут  записаны  координаты найденной точки пересечения отрезка и перпендикуляра к нему.

В случае успешного выполнения данный метод возвращает значение

true.

Вроде бы ничего сложного. Переходим к практике.

1 В терминах векторной алгебры данная задача решается до неприличия просто. Если у нас задан вектор [x;y], то перпендикулярный ему вектор будет задаваться: либо [-y;x], либо [y;-x]


Решение задачи

Ниже  приводится  фрагмент программы  демонстрирующей  работу с этим методом.

var

kompas: KompasObject; Document2D: ksDocument2D; Mathematic2D: ksMathematic2D; xp, yp: Double;

……………………

Begin

……………………

//Строим отрезок, перпендикуляр к которому мы и будем искать

Document2D.ksLineSeg(100, 100, 120, 140, 1);

//Получаем интерфейс ksMathematic2D

Mathematic2D:=ksMathematic2D(kompas.GetMathematic2D());

//Помечаем кружочком точку, через которую должен проходить перпендикуляр

Document2d.ksPoint(140,150, 5);

//Ищем перпендикуляр

Mathematic2D.ksPerpendicular(140, 150, //x, y

100, 100, //x1, y1

120, 140, //x2, y2

xp, yp);

//Строим найденный перпендикуляр

Document2D.ksLineSeg(140, 150, xp, yp, 1);

//Помечаем крестиком точку, найденную системой КОМПАС

Document2d.ksPoint(xp,yp, 1); kompas.Visible:=true;

end;

В  результате  работы  этой  программы  вы  увидите  приблизительно следующую картину:

Как видите на ней изображено два отрезка перпендикулярных друг к другу. Первый (тот, что длиннее) мы построили в самом начале программе и именно для него мы искали перпендикуляр. Система КОМПАС нашла точку пересечения между прямой,  которой принадлежит этот отрезок и перпендикуляром к ней, проходящим через точку с координатами (140;150) (она помечена кружочком). Найденная системой КОМПАС точка помечена крестиком. Можно легко убедиться в том, что она принадлежит той же прямой, что и первоначальный отрезок.

Источник: Норсеев Сергей, «РАЗРАБОТКА ПРИЛОЖЕНИЙ ПОД КОМПАС В DELPHI»

По теме:

  • Комментарии