Forum

Author Topic: Вопрос по Vector в python  (Read 6473 times)

godszerg

  • Newbie
  • *
  • Posts: 13
    • View Profile
Вопрос по Vector в python
« on: January 17, 2019, 06:26:22 PM »
Здравствуйте, обьясните пожалуйста систему Векторов в скрипте и приложении. Ну или где почитать про это в документации.

Почему спрашиваю

в скрипте добовляю маркер со след координатами
Code: [Select]
chunk.addMarker([1.6,-7.7,2.2],visibility=True)
Во вкладке Reference у маркера совсем другие координаты.
X 0.852 Y 4.410 Z 6.819

PS

Тестирую скрипты на проекте с сайта https://www.agisoft.com/datasets/doll.zip
« Last Edit: January 18, 2019, 07:38:37 PM by godszerg »

Alexey Pasumansky

  • Agisoft Technical Support
  • Hero Member
  • *****
  • Posts: 14813
    • View Profile
Re: Вопрос по Vector в python
« Reply #1 on: January 18, 2019, 09:00:41 PM »
Добрый день,

Дело в том, что практически все координатные элементы, соответствующие содержимому чанка, имеют координаты во внутренней системе, которая отличается от координат итоговой модели, если чанк привязан или даже отмасштабирован.

Речь идёт, например, о таких элементах, как camera.center, marker.position, region.center и т.д.

Функция addMarker также на вход получает координаты в этой внутренней системе. Если чанк в вашем проекте привязан в локальных координатах, то связь между внутренней и "внешней" системой такая:

T = chunk.transform.matrix
coord_external = T.mulp(coord_internal)
в обратную сторону:


Далее вопрос в том, какая задача стоит перед Вами. Если хочется, зная локальные координаты, создать маркер, то это можно сделать так:
Code: [Select]
T = chunk.transform.matrix
chunk.addMarker(T.inv().mulp(Metashape.Vector([1.6, -7.7, 2.2])))
Best regards,
Alexey Pasumansky,
Agisoft LLC

godszerg

  • Newbie
  • *
  • Posts: 13
    • View Profile
Re: Вопрос по Vector в python
« Reply #2 on: January 18, 2019, 10:18:45 PM »
Спасибо за ответ! Задача такая. Хочу наладить связь между проектом в Unity 3D и Metashape. Координаты из Unity передать в Metashpe и зменить допустим размер и положение (наклон в том числе) region (bounding box)

Для проверки я добавил маркер в ручную в программе с координатами из юнити и положение маркера совпало с точкой в юнити. А вот если я добавил маркер через скрипт в этот же проект получил результат выше и другое положение маркера.

godszerg

  • Newbie
  • *
  • Posts: 13
    • View Profile
Re: Вопрос по Vector в python
« Reply #3 on: January 18, 2019, 10:30:19 PM »
Далее вопрос в том, какая задача стоит перед Вами. Если хочется, зная локальные координаты, создать маркер, то это можно сделать так:
Code: [Select]
T = chunk.transform.matrix
chunk.addMarker(T.inv().mulp(Metashape.Vector([1.6, -7.7, 2.2])))

А можно как то всю систему координат чанка инвертировать?

Alexey Pasumansky

  • Agisoft Technical Support
  • Hero Member
  • *****
  • Posts: 14813
    • View Profile
Re: Вопрос по Vector в python
« Reply #4 on: January 19, 2019, 08:59:36 PM »
Вы можете прислать пример такого проекта, например, только с результатами выравнивания, привязкой (если она выполнена) и координатами для рабочей области, которую Вы хотите задать?

Есть пример в другой теме, где положение и размер бокса задаются на основе координат выровненных камер:
https://www.agisoft.com/forum/index.php?topic=10102.msg46135#msg46135

В общем случае, если у Вас есть координаты в локальной или географической системе координат, то для пересчёта во внутреннюю систему координат нужно произвести пересчёт:
Code: [Select]
coord_internal = chunk.transform.matrix.inv().mulp(coord_local) #если в локальной СК
coord_internal = chunk.transform.matrix.inv().mulp(chunk.crs,unproject(coord_local)) # если в географической СК
Best regards,
Alexey Pasumansky,
Agisoft LLC

godszerg

  • Newbie
  • *
  • Posts: 13
    • View Profile
Re: Вопрос по Vector в python
« Reply #5 on: January 22, 2019, 06:39:13 PM »
Проект еще в сыром виде. Как допилю пришлю.

С координатами разобрался. Спасибо.

Подскажите последнюю вещь: Вращение.

у меня есть матрица вращения в юнити 4х4.
Как создать новую матрицу вразения в MetaShape из этой матрицы. и приминиеть ее к региону(bounding box) ?

Спасибо.
« Last Edit: January 22, 2019, 07:56:51 PM by godszerg »

Alexey Pasumansky

  • Agisoft Technical Support
  • Hero Member
  • *****
  • Posts: 14813
    • View Profile
Re: Вопрос по Vector в python
« Reply #6 on: January 24, 2019, 09:13:14 PM »
Можете прислать вид этой матрицы? Если её левый верхний блок 3х3 соответствует вращению, а самый правый вектор - позиции, то скорее всего можно будет пересчитать в region.rot и region.center. Нужно только понять, какой порядок вращения вокруг осей у матрицы из Юнити.
Best regards,
Alexey Pasumansky,
Agisoft LLC

godszerg

  • Newbie
  • *
  • Posts: 13
    • View Profile
Re: Вопрос по Vector в python
« Reply #7 on: January 24, 2019, 11:50:19 PM »
Спасибо! Я извлекаю ее так сейчас.

Code: [Select]
R = Metashape.Matrix([[0.99756, -0.02948, -0.06322,0],
[0.00000, 0.90631 ,-0.42262,0],
[0.06976, 0.42159 ,0.90410,0],
[0.0,0.0,0.0,1.0]]).rotation()

Да ее верхняя часть 3х3 то что мне нужно.
« Last Edit: January 24, 2019, 11:51:56 PM by godszerg »