Тема: Получение координат точки относительно другой точки

Не подскажите, как получить координаты точки (AcGePoint3d) относительно другой точки на известном расстоянии и под известным углом?
Сейчас приходится каждую точку AcGePoint3d переводить в ads_point через operator[], использовать функцию acutPolar, и потом опять ads_point переводить в AcGePoin3d.
Что-то мне подсказывает, что это способ "через одно место"...

Re: Получение координат точки относительно другой точки

Где-то так:

//////////////////////////////////////////////////////////////////////////
//  Функция для получения точки, которая находится на заданном расстоянии
//  под заданным углом относительно заданной точки. Угол поворота
//  измеряется в плоскости WCS
//////////////////////////////////////////////////////////////////////////
static AcGePoint3d polar(AcGePoint3d p, double ang, double dist)
{
  return (p+dist*AcGeVector3d::kXAxis).transformBy(
    AcGeMatrix3d::rotation(ang,AcGeVector3d::kZAxis,p));
}

Re: Получение координат точки относительно другой точки

> aazko
1) Исправленныый вариант лаконичней.
2) Зачем переводить AcGePoint3d в ads_point при помощи [] если есть функции asDblArray() и asPnt3d(). Поиши по форуму. Здесь есть примеры их использования.

Re: Получение координат точки относительно другой точки

Спасибо за совет.
Для это функции нужен угол. Можно получить из каждой точки вектор (AcGeVector) и использовать функцию angleTo. Но она возвращает угол в предалах от 0 до Pi. Приходится делать дополнительные проверки. Есть ли более простой способ определения угла?

Re: Получение координат точки относительно другой точки

aazko пишет:

Есть ли более простой способ определения угла?

Угла откуда и куда? Объясни что у тебя есть и что тебе нужно получить.

Re: Получение координат точки относительно другой точки

Есть отрезок, определённый двумя точками. Нужно получить точку на этом отрезке на определённом расстоянии от конца (начала) этого отрезка.
Функцию получения точки относительно уже существующей вы подсказали. Спасибо. Там нужно знать расстояние, на котором я хочу получить точку (здесь проблем нет) и угол наклона, такой, чтобы попасть на этот отрезок. Вот с быстрым определением этого угла у меня и есть небольшая проблемка... Использовую acutAngle(), но нужно преобразовывать точки...

Re: Получение координат точки относительно другой точки

> aazko
Теперь понятно:

//////////////////////////////////////////////////////////////////////////
// Функция для получения угла, который образует вектор с началом в p1 и
// концом в p2 с осью X в плоскости WCS - аналог функции acutAngle.
//////////////////////////////////////////////////////////////////////////
static double angle(AcGePoint3d p1, AcGePoint3d p2)
{
  return AcGeVector3d::kXAxis.angleTo(p2-p1,AcGeVector3d::kZAxis);
}

Или еще проще:

acutAngle(asDblArray(p1),asDblArray(p2));

Re: Получение координат точки относительно другой точки

Большое спасибо, Александр!
Теперь понял, почему вы предлагали посмотреть asDblArray() и asPnt3d(). Я посмотрел только asPnt3d(), понял, что она мне тут не поможет и отложил на потом... а зря. Ещё раз спасибо!