Method GetCurvature

Программирование для CATIA.

Method GetCurvature

Сообщение Mihan » 16 ноя 2010 15:53

Может кто-нибудь подскажет как работает этот метод, может есть пример. Мне нужно узнать "направление" окружности, т.е. есть начальная точка на окружности и есть конечная точка окружности, нужно узнать как идет окружность от н.т до к.н. или от к.н. до н.т. Вот что есть в хелпе:
o Sub GetCurvature( double iParam,
CATSafeArrayVariant oCurvature)

Returns the curvature and curvature direction at the parameter specified.
Parameters:
iParam
The parameter of the chosen point on the curve.
oCurvature[0]
The curvature at the specified parameter.
oCurvature[1;2]
The unit-vector of curvature direction at the specified parameter.
Mihan
Новичок
Новичок
 
Сообщения: 11
Зарегистрирован: 23 мар 2008 22:14
Откуда: Ульяновск

Re: Method GetCurvature

Сообщение booSter » 16 ноя 2010 17:44

Если под "направлением окружности" понимается "по часовой стрелке" либо "против часовой стрелки" в контексте плоскости на которой лежит окружность, то GetCurvature вам вряд ли чем поможет, поскольку она возвращает радиус кривизны (который для окружности постоянен и равен её радиусу) и вектор направления кривизны (который по сути нормаль)

Если начальная точка (A), конечная (B) и центр окружности (O) заданы координатами, то задачу можно решить посчитав угол межу векторами OA и OB и сравнив его с PI.

Если точки заданы параметром на кривой (P1) (P2) то по знаку разности P2-P1, хотя тут есть нюансы связанные с параметризацией самой окружности: вроде как (-PI,PI]
Сделаешь доброе дело за деньги - скажут спасибо,
Сделаешь бесплатно - сядут на шею...
©пёрто
Аватара пользователя
booSter
Moderator
 
Сообщения: 227
Images: 15
Зарегистрирован: 09 фев 2008 16:48
Откуда: Minsk

Re: Method GetCurvature

Сообщение Mihan » 16 ноя 2010 20:47

А как же выбрать, если у нас начальная(А), конечная(В) и центр окружности(О) лежат на одной прямой, т.е. на диаметре. Какую полуокружность выбрать???
Mihan
Новичок
Новичок
 
Сообщения: 11
Зарегистрирован: 23 мар 2008 22:14
Откуда: Ульяновск

Re: Method GetCurvature

Сообщение bit » 17 ноя 2010 00:42

А если просто взять начальный и конечный параметры GetParamExtents. Направление от меньшего к большему.

Если нужно знать обход по часовой стрелке или против , попробуйте так:
Сx, Сy - координаты центра
Bx, By - координаты первой точи
1. взять касательную в начальной точке - GetTangent
Tx, Ty
2. Построить вектор из начальной точки к центру
Vx = Cx-Bx; Vy = Cy-By (по иде должно совпасть с направлением кривизны в начальной точке, GetCurvature)
3. направление обхода можно определить по знаку выражения:
Vx*Ty-Vy*Tx
если >0, по часовой стрелке, <0 - против
Если GetTangent возвращает правильное направление, должно сработать.
bit
Участник
Участник
 
Сообщения: 166
Images: 3
Зарегистрирован: 24 июл 2008 11:45
Откуда: Минск

Re: Method GetCurvature

Сообщение Mihan » 18 ноя 2010 19:35

Может конечно глупый вопрос, но как вызвать процедуру GetParamExtents???Какие нужны входные параметры???
Вот что написано в хелпе:
o Sub GetParamExtents( CATSafeArrayVariant oParams)

Returns the parametric extents of the curve. This is the parametric equivalent of the end-points.
Parameters:
oParams[0]
The parameter associated with the start point of the curve
oParams[1]
The parameter associated with the end point of the curve

И что это за тип CATSafeArrayVariant???
Mihan
Новичок
Новичок
 
Сообщения: 11
Зарегистрирован: 23 мар 2008 22:14
Откуда: Ульяновск

Re: Method GetCurvature

Сообщение Mihan » 19 ноя 2010 01:29

Вроде разобрался, что то начало выводиться. Еще вопросик: во всех процедурах(GetCurvature, GetTangent и т. д.) используется параметр iParam. Откуда его брать??? Может он получается на выходе от процедуры GetParamExtents???
Mihan
Новичок
Новичок
 
Сообщения: 11
Зарегистрирован: 23 мар 2008 22:14
Откуда: Ульяновск

Re: Method GetCurvature

Сообщение bit » 19 ноя 2010 02:04

Mihan писал(а):Еще вопросик: во всех процедурах(GetCurvature, GetTangent и т. д.) используется параметр iParam. Откуда его брать??? Может он получается на выходе от процедуры GetParamExtents???

Именно так.
bit
Участник
Участник
 
Сообщения: 166
Images: 3
Зарегистрирован: 24 июл 2008 11:45
Откуда: Минск

Re: Method GetCurvature

Сообщение booSter » 19 ноя 2010 12:22

Уравнение кривой можно преобразовать к параметрическому виду:

Код: Выделить всё
 | x = PX(t)
{ y = PY(t)
 | z = PZ(t)

где t - и есть этот самый iParam.

Физический смысл этого параметра - длинна вдоль кривой от её начальной точки (в некотором масштабе). Функция GetParamExtents возвращает границы параметризации кривой. Обычно это диапазон [0,1]: 0 - начало, 1 - конец, но есть и исключения (утверждать не стану, но вроде как окружность и дуга параметризованны через угол в радианах от оси ОХ).
Сделаешь доброе дело за деньги - скажут спасибо,
Сделаешь бесплатно - сядут на шею...
©пёрто
Аватара пользователя
booSter
Moderator
 
Сообщения: 227
Images: 15
Зарегистрирован: 09 фев 2008 16:48
Откуда: Minsk


Вернуться в CAA-RADE

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron