---
title: "ksTanCurvCurv - Получить координаты точек касания прямых к двум кривым"
type: guide
api: [api7]
tags: [guide, api7, kstancurvcurv]
sources:
  - kstancurvcurv.html
---

*API экспортных функций > Функции работы с графическим документом  > Вспомогательные построения  > Математические функции *


## ksTanCurvCurv - Получить координаты точек касания прямых к двум кривым

Пример...
Аналог данной функции при использовании Automation - метод ksMathematic2D::ksTanCurvCurv.
Синтаксис:
```
int ksTanCurvCurv(reference p1, reference p2,reference pointArr1,reference pointArr2);
Входные параметры:
p1    - указатель на первую кривую,
p2    - указатель на вторую кривую.
Выходные параметры:
pointArr1    - динамический массив математических точек POINT_ARR на кривой p1,
pointArr2    - динамический массив математических точек POINT_ARR на кривой p2.
Возвращаемое значение:
1    - успешное завершение,
0    - построить касательную нельзя (кривые совпадают или одна кривая вложена в другую),
-1    - первый объект не существует,
-2    - второй объект не существует,
-3    - кривые расположены в разных видах,
-4    - не совпадают СК определения кривых (геометрическая и аннотационная),
-5    - первый объект не является кривой,
-6    - второй объект не является кривой,
-7    - ошибка.
```


## ksTanCurvCurv - пример использования

double x = 0, y = 0;
if ( Cursor( NULL, &x, &y, NULL) )
{
reference obj1 = FindObj( x, y, ::ksGetCursorLimit() );
if ( obj1 )
{
if ( Cursor( NULL, &x, &y, NULL) )
{
reference obj2 = FindObj( x, y, ::ksGetCursorLimit() );
if ( obj2 && obj2 != obj1 )
{
reference pointArr1 = CreateArray( POINT_ARR, NULL );
reference pointArr2 = CreateArray( POINT_ARR, NULL );
if ( pointArr1 && pointArr2 )
{
int res = ksTanCurvCurv( obj1, obj2, pointArr1, pointArr2 );
if ( res == 1 )
{
int count = GetArrayCount( pointArr1 );
for ( int i = 0; i < count; i )
{
MathPointParam point1;
MathPointParam point2;
GetArrayItem( pointArr1, i, &point1, sizeof(MathPointParam) );
GetArrayItem( pointArr2, i, &point2, sizeof(MathPointParam) );
LineSeg( point1.x, point1.y, point2.x, point2.y, 1 );
}
}
}
DeleteArray( pointArr1 );
DeleteArray( pointArr2 );
}
}
}
}
