Какой методологии следует придерживаться, чтобы найти координаты на искривленной поверхности?

У меня проблема с поиском «координат на изогнутой поверхности», когда я ее фотографирую. Представьте себе бочку или изогнутую поверхность, на поверхности которой есть n точек, и нам нужно определить их расположение. Когда поверхность фотографируется «спереди» и повернута примерно на 30 градусов, относительное положение точек будет выглядеть иначе.

Если бы это была плоская пластина, я бы подумал нормализовать длины и найти относительную координату каждой точки. Поскольку это плоская пластина, каждая нормированная координата будет давать одно и то же число независимо от угла поворота. Но когда он находится на изогнутой поверхности, эта нормализация не помогает найти координаты. Существует ли методология, которой нужно следовать, чтобы найти координаты при вращении объекта?

Наглядное изображение примера проблемы можно увидеть здесь: Какой методологии следует придерживаться, чтобы найти координаты на искривленной поверхности?

Можно увидеть вид сверху на другой пример рисунка: Какой методологии следует придерживаться, чтобы найти координаты на искривленной поверхности?

Вы знаете математику поверхности? Есть ли у вас какие-либо данные (например, окончательный цвет), которые идентифицируют пиксель поверхности, связанный с его положением перед проецированием?

Ripi2 10.05.2019 19:04

Прежде всего, как вы проецируете точки с поверхности на экран камеры? Вы используете ортогональную проекцию на плоскость экрана? Или вы используете стандартную точечно-экранную проекцию (проецирование путем рисования линий между фиксированной точкой за экраном и точками в 3D и просмотр пересечения линий с плоскостью экрана)? Во-вторых, является ли ваша поверхность цилиндрической в ​​том смысле, что это всегда одна и та же кривая, когда вы разрезаете ее, скажем, горизонтальной плоскостью, и эта кривая в основном перемещается вертикально, охватывая поверхность?

Futurologist 11.05.2019 22:24

Во-вторых, вы всегда вращаете камеру вокруг фиксированной оси, движущейся вертикально? По крайней мере, так это выглядит на ваших фотографиях. А у вас есть координаты точек на экране для каждого снимка камеры? В частности, можем ли мы предположить, что вы очень хорошо знаете параметры камеры, такие как расстояние между точкой, с которой вы смотрите на трехмерный мир, и экраном (если применимо) и где находится ортогональная проекция этой точки на экран. (обычно он должен быть в начале 2D-системы координат экрана). Вы знаете уравнение поверхности?

Futurologist 11.05.2019 23:18

Здравствуйте, спасибо за ваши ответы. К сожалению, это будет применяться к реальным объектам для измерения, а это значит, что у меня не будет уравнения поверхности. Я думаю о том, чтобы снимать достаточно далеко, чтобы получить почти ортогональные проекционные изображения и избавиться от эффекта перспективы. А при неподвижной камере объект вращается вокруг своей оси.

dacets 13.05.2019 15:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
575
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Предполагая, что точки на этом цилиндре всегда находятся на одинаковом расстоянии друг от друга, вам просто нужно вычислить одну из троек координат, а затем вы можете вычислить другие координаты по геодезической.

Так было бы в геодезической системе координат: (х1, у1, z1) (x1 + расстояние, y1, z1) (x1 + 2*расстояние, y1, z1)

Это применимо только в том случае, если расстояние между координатами постоянно и известно, и вы знаете угол геодезической ...

Я думаю, что могу сравнить угол объекта, сравнив их ширину, просто взяв acos(widthx/width1), так как это хорошо работает для плоской пластины. Расположение точек фиксировано, но расстояние между ними может быть расстоянием1 и расстоянием2, которые могут различаться как по оси x, так и по оси y, если смотреть на двухмерную «фотографию» объекта.

dacets 10.05.2019 14:58
Ответ принят как подходящий

Похоже, вы находитесь в следующей ситуации: у вас есть фиксированная вертикальная линия, называемая axis, которая является вертикальной осью вращения, вокруг которой вы вращаете поверхность. Кроме того, у вас есть плоскость S, представляющая собой экран вашей камеры. Экран-плоскость S также вертикальна, что эквивалентно тому, что она параллельна вращению axis. Тогда вектор нормали N плоскости экрана S указывает на axis.

Вводим фиксированную систему координат (она называется камера-система, мы видим мир с точки зрения камеры и она неподвижна, потому что ваша камера неподвижна) следующим образом: выбираем неподвижную точку O на screen-plane S и нарисуйте ось O ---> y на S как уникальную линию на S, параллельную axis и проходящую через O. Ось O ---> x — это уникальная линия, перпендикулярная оси O ---> y и, следовательно, горизонтальная. Вектор нормали N совмещен с осью O ---> z, которая также горизонтальна, начинается от камеры и проходит через axis, пересекая последнюю ортогонально.

Система координат на плоскости экрана, назовем ее системой-экраном, — это просто система, полученная как z = 0 (ортогональная проекция трехмерных точек на экран S), т. е. двумерная система O x y, где O--->x и O--->y оси системы экрана также являются осями системы камеры, определенной выше.

Насколько я понимаю, вы дважды фотографируете поверхность, один раз в одном положении, второй раз после поворота вокруг axis под углом a. Возьмите одну из отмеченных точек P на поверхности перед вращением. Тогда его ортогональная проекция p1 на экран S имеет координаты [x1,y1] в системе screen0. После поворота на угол a поверхности вокруг axis точка P теперь имеет ортогональную проекцию p2 на экран S с новыми координатами [x2,y2] в экранной системе. Я предполагаю, что вы можете определить координаты любой точки на экране относительно системы экрана. Если я не ошибаюсь, цель эквивалентна определению координат P до и после поворота в трехмерном пространстве O x y z. Однако, поскольку ваша проекция на экран S ортогональна, вам просто нужно определить z координаты точки P до и после поворота. Оттуда вы можете найти криволинейные координаты P на поверхности, которые могут быть просто координатами экрана, спроецированного на поверхность, поэтому параметризация поверхности может быть, например:

X = x1
Y = y1
Z = z1(x1, y1)    

Предположим также, что вы знаете расстояние l между экраном камеры S и осью вращения axis. Я считаю, что все эти предположения, сделанные до сих пор, очень разумны, поскольку вы можете контролировать настройку камеры (то есть плоскость экрана S вместе с ее системой координат, что довольно естественно) и ось вращения axis. Ситуация как на картинке ниже:

Как видите, мы выбрали горизонтальный срез y = y1 и из-за всего расположения систем координат экрана и камеры имеем y = y1 = y2. Обратите внимание, что из-за вращения axis у нас есть dist(P0, axis) = dist(Pa, axis). Следовательно, треугольник P0 Pa axis равнобедренный с углом a при вершине axis. Итак, если вы проведете ось отражательной симметрии этого треугольника через вершину axis, вы получите две копии одного и того же прямоугольного треугольника, в котором у вас есть уравнение

dist(P0, Pa)/(2*dist(axis, P0)) = sin(a/2)

Объедините это последнее уравнение с уравнением

dist(P0, axis) = dist(Pa, axis) 

Если возвести оба уравнения в квадрат и составить из них одну систему, то получится система двух уравнений

dist(P0, Pa)^2 = 4*(dist(axis, P0))^2*(sin(a/2))^2

dist(P0, axis)^2 = dist(Pa, axis)^2 

Если вы посмотрите на три (прямоугольных) трапеции O p1 P0 axis, то O p2 Pa axis и, наконец, P0 p1 p2 Pa получите систему двух квадратных уравнений, двумя неизвестными которой являются координаты z z1 и z2. Остальные параметры приведены: x1, x2, l, a. Вы должны решить для z1 и z2. Будет четыре пары решений, вы должны выбрать те, которые соответствуют реальной ситуации. Однако точное решение системы может быть затруднено, поэтому вы можете просто использовать метод Ньютона, чтобы найти очень хорошее приближенное решение.

Я написал систему на картинке, вы можете увидеть ее в формулах. Угол a ваш theta.

Другие вопросы по теме