ПО документации написано, что поворот будет по часовой стрелке, по картинкам же мы видим, что поворот против часовой стрелки.
Подскажите, что мы делаем не так? Или как повернуть изображение корректно на заданный угол?
// Повернуть объект вокруг заданной в прямоугольной системе точки // на заданный угол // info - идентификатор объекта карты в памяти // center - координаты точки, вокруг которой поворачивается объект (метры) // angle - угол поворота по часовой стрелке (радианы, от -PI до +PI) // При ошибке возвращает 0
_MAPIMP long int _MAPAPI mapRotateObject(HOBJ info, DOUBLEPOINT *center, double *angle);
В более новой версии файла mapapi.h комментарий уже поправлен и имеет вид:
Код
// Повернуть объект вокруг заданной в прямоугольной системе точки
// на заданный угол
// info - идентификатор объекта карты в памяти
// center - координаты точки, вокруг которой поворачивается объект (метры)
// angle - угол поворота против часовой стрелки (радианы, от -PI до +PI)
// При ошибке возвращает 0
_MAPIMP long int _MAPAPI mapRotateObject(HOBJ info, DOUBLEPOINT *center, double *angle);
Повороты выполняются против часовой стрелки. Для поворота по часовой стрелке можно задать отрицательное значение угла. Извините за неточность.
Вопрос: ПО документации написано, что поворот будет по часовой стрелке, по картинкам же мы видим, что поворот против часовой стрелки. Подскажите, что мы делаем не так? Или как повернуть изображение корректно на заданный угол?
Ответ: Повороты выполняются против часовой стрелки. Для поворота по часовой стрелке можно задать отрицательное значение угла.
Векторный объект обычно рисуется по направлению второй точки. Применять функции поворота не обязательно, можно управлять второй точкой.
Нулевое значение означает, что поворот не выполняется. Это относительное значение для поворота от текущего положения, а не азимут или дирекционный угол.
Oleg Belenkov написал: Нулевое значение означает, что поворот не выполняется. Это относительное значение для поворота от текущего положения, а не азимут или дирекционный угол.
Хорошо. Подскажите какой метод использовать для нахождения дирекционного угла объекта?
Для нахождения дирекционного угла применяется функция mapSideDirection (mapapi.h):
Код
// Вычисление дирекционного угла участка объекта (стороны)
// Возвращает величину угла в радианах
// Для последней точки вычисляет направление на первую точку
// У замкнутых объектов первая и последняя точки совпадают
// info - идентификатор объекта карты в памяти
// number - номер точки, начиная с 1
// subject - номер подобъекта (если = 0, обрабатывается объект)
// При ошибке возвращает 0 (при совпадении точек также)
_MAPIMP double _MAPAPI mapSideDirection(HOBJ info,long int number,
long int subject/* = 0*/);
Для нахождения дирекционного угла применяется функция mapSideDirection (mapapi.h):
Код
// Вычисление дирекционного угла участка объекта (стороны)
// Возвращает величину угла в радианах
// Для последней точки вычисляет направление на первую точку
// У замкнутых объектов первая и последняя точки совпадают
// info - идентификатор объекта карты в памяти
// number - номер точки, начиная с 1
// subject - номер подобъекта (если = 0, обрабатывается объект)
// При ошибке возвращает 0 (при совпадении точек также)
_MAPIMP double _MAPAPI mapSideDirection(HOBJ info,long int number,
long int subject/* = 0*/);
number - уточните как получить номер?
Использовали этот метод, при первом запуске давал одно значение, а при последующих уже 0, причем не понятно 0 это значение угла или ошибка?
НЕ ясно какие именно должны быть входные значения long int number, long int subject?
Анастасия написал: number - уточните как получить номер?
В поле number указывается порядковый номер точки объекта от 1 до значения, возвращаемого функцией mapPointCount (mapapi.h):
Код
// Запрос числа точек метрики объекта/подобъекта
// info - идентификатор объекта карты в памяти
// subject - номер подобъекта (если = 0, обрабатывается объект)
// (если = -1, вернуть общее число точек всех контуров объекта)
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapPointCount(HOBJ info, long int subject);
В поле subject указывается либо 0 для обработки самого объекта, либо номер подобъекта от 1 до значения, возвращаемого функцией mapPolyCount (mapapi.h):
Код
// Запрос числа составных частей (подобъектов + 1)
// info - идентификатор объекта карты в памяти
// Если подобъектов нет - возвращает 1 (только объект)
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapPolyCount(HOBJ info);
Дополнительно к предыдущему ответу уточняем алгоритм поворота на заданный угол относительно текущего дирекционного угла: - запросить текущий дирекционный угол с помощью функции mapSideDirection (описано выше); - вычислить разницу между необходимым значением угла и текущим дирекционным углом; - выполнить поворот на полученное значение угла с помощью функции mapRotateObject.