Точка пересечения двух кривых.

Автор Alexey001, 10.01.17, 20:17:40

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Alexey001

Доброго времени суток. Как с помощью API 5 построить точку пересечения двух кривых, точнее ее координаты.

Заранее спасибо

Golovanev

Используя только API 5 многого не добиться. Можно использовать разное API в приложении.
Без проблем.

Alexey001

У меня просто весь код в API 5. А каким методом?

Golovanev

Ну вообще и в API 5 целых три функции (ниже выдержка из LibTool.pas)

//--------------------------------------------------------------------------------
//   Пересечение  двух кривых .
//   Возвращает:
//   1 успешное завершение
//   0 кривые не пересекаются или совпадают
//   -1 первый объект не существует
//   -2 второй объект не существует
//   -3 кривые расположены в разных видах
//   -4 не совпадают СК определения кривых (геом и анн) (?)
//   -5 первый объект не является кривой
//   -6 второй объект не является кривой
//   -7 ошибка
//   динамический массив точек пересечения array должен быть создан до передачи его в функцию.
//---------------------------------------------------------------------------------
function  ksIntersectCurvCurv ( p1 : Reference;      // указатель на первую кривую
                                p2 : Reference;      // указатель на вторую кривую
                                pArr : Reference ) : Integer;  stdcall; // динамический массив точек пересечения MathPointParam


// Экспортный номер - 1031
//--------------------------------------------------------------------------------
//  Пересечение двух кривых.
//---------------------------------------------------------------------------------
procedure IntersectCurvCurvEx ( p1 : Reference;       //указатель на первую кривую
                                p2 : Reference;       //указатель на вторую кривую
                            Var kp : Integer;   //количество точек пересечения
                            xp, yp : Pointer;   //массивы точек пересечения
                          maxCount : Integer;   //максимально-допустимое количество точек в массивах
                      touchInclude : Integer );      // учитывать точки касания
                                     stdcall;
// Экспортный номер - 1032
//--------------------------------------------------------------------------------
//   Пересечение  двух кривых .
//   Возвращает:
//   1 успешное завершение
//   0 кривые не пересекаются или совпадают
//   -1 первый объект не существует
//   -2 второй объект не существует
//   -3 кривые расположены в разных видах
//   -4 не совпадают СК определения кривых (геом и анн) (?)
//   -5 первый объект не является кривой
//   -6 второй объект не является кривой
//   -7 ошибка
//---------------------------------------------------------------------------------
function ksIntersectCurvCurvEx ( p1           : Reference; // указатель на первую кривую
                                 p2           : Reference; // указатель на вторую кривую
                                 pArr         : Reference; // динамический массив точек пересечения MathPointParam
                                 touchInclude : Integer ) : Integer; // учитывать точки касания
                                                stdcall;


Golovanev

// Для случая двух точек пересечения, ну а если точка одна, то Kp вернет 1, и в xp[1] и yp[1] будет точка пересечения

Var
kp, i : Integer;
xp,yp : Double2;
begin


        IntersectCurvCurvEx(clsLantWheel.CycloidProfile, clsClocGea.CycloidProfile, kp, @xp, @yp, 2, 1);
        if kp > 0 then
        begin
         //
        end;

end;

Golovanev

Цитата: Sabahs от 10.01.17, 21:01:21
LibTool - это отдельный модуль, от API5 и API7.

Да какая разница... Все можно скрестить в одном модуле. Чаще всего так и происходит. Как проще сделать, так и лучше.
Совершенно не обязательно замыкаться на каком то одном API

Вы exe файл скомпилируйте на функциях LibTool.pas, тогда разницу поймёте.