Agisoft Metashape > Other Languages

Вопрос новичка по синтаксису в скрипте

(1/5) > >>

HongSe:
Не могу понять зачем после единицы стоит точка?
R = R * (1. / s)
И в инете не могу найти.

Alexey Pasumansky:
Добрый день,

Обычно точка ставится для того, чтобы указать, что это вещественное число, а не целое. Скорее всего в данном случае можно обойтись и без точки.

HongSe:
Спасибо!
Разбираюсь со скриптом, позволяющим ориентировать Boundary box chunk-а по осям системы координат (СК).
В скрипте есть строчки:
   M_chunk = chunk.transform.matrix
   v_t = M_chunk.mulp(PhotoScan.Vector([0, 0, 0]))
   m = chunk.crs.localframe(v_t)
В первой строке получаем матрицу преобразования между мировой СК и СК chunk-а.
Во второй строке переменной v_t, путем умножения матрицы преобразования chunk.transform.matrix на нормализованный вектор PhotoScan.Vector([0, 0, 0]), возвращается вектор положения начала СК chunk-а в мировой системе координат.
В третьей строке переменной m возвращается так же матрица преобразования, но уже из геоцетрической СК в локальную СК.
Читаю описание в руководстве по API.
Для первой строки:
   Transformation between chunk and world coordinates systems.
Для третьей строки:
   Returns 4x4 transformation matrix to LSE coordinates at the given point.
      Parameters point (Vector) – Coordinates of the origin in the geocentric coordinates.
      Returns Transformation from geocentric coordinates to local coordinates.
Насколько я понял из руководства по API, есть четыре СК: мировая, chunk-а, локальная, геоцетрическая и географическая.
И вот с этими СК прошу помочь разобраться. Какая между ними взаимосвязь? Мировая СК - это геоцентрическая СК, а локальная СК - это СК chunk-а?
Например, у меня есть построенное облако точек с привязкой к системе координат MSK. Как мне перейти от координат какой-либо точки в MKS, полученной, например, путем измерения командой "Линейка",  к координатам этой точки в любой другой из этих координат? Или, например, получить координаты центра Boundary box-а chunk-а в MSK?

Alexey Pasumansky:
Добрый день,

Скорее всего в ближайшее время будет доступен онлайн курс по Python в PhotoScan Pro, где вопросы систем координат будут также затронуты. Когда будет открытый доступ, я выложу ссылку в эту тему.

В целом же связь следующая:
- есть внутренняя СК чанка (существует всегда даже без привязки), координат в этой системе по умолчанию и получаются при обращении к рабочей области chunk.region, положениям камер camera.center, вершинам полигональной модели и т.д.
- из внутренней системы можно перейти в геоцентрическую систему, путём домножения на chunk.transform (в случае, если привязка модели произведена в Локальных Координатах, то chunk.transform будет пересчитывать из внутренней системы в эти локальные координаты),
- географическая система (система привязки чанка) - чтобы пересчитать координаты в эту систему, нужно использовать метод chunk.crs.project() на координаты в геоцентрической системе.
Помимо этого существует локальная прямоугольная система координат (LSE - Local Space Euclidean), касательная к эллипсоиду, для пересчёта в неё используется метод chunk.crs.localframe(), он используется, чтобы, например, рассчитывать углы ориентирования камеры (курс, крен, тангаж) через скрипт.


Чтобы пересчитать координаты из внутренней системы чанка в географическую (МСК в Вашем случае, например):

--- Code: ---point_geog = chunk.crs.project(chunk.transform.matrix.mulp(point_internal))
--- End code ---
в геоцентрическую:

--- Code: ---point_geoc = chunk.transform.matrix.mulp(point_internal)
--- End code ---
Чтобы пересчитать в обратную сторону нужно, соответственно, инвертировать операции:

--- Code: ---point_local = chunk.transform.matrix.inv().mulp(chunk.crs.unproject(point_geog))
--- End code ---

HongSe:
Алексей, если можно, помогите разобраться с матрицей chunk.region.rot.
Какие элементы в ней за что отвечают? Например, мне нужно получить поворот вокруг одной из осей региона на определенный угол.

Navigation

[0] Message Index

[#] Next page

Go to full version