Какой методологии следовать, чтобы найти координаты на изогнутой поверхности? - PullRequest
1 голос
/ 10 мая 2019

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

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

Визуальный пример проблемы можно увидеть здесь: enter image description here

Вид сверху на другой пример рисунка: enter image description here

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

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

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

Система координат на плоскости экрана, назовите ее системой экрана, - это просто система, полученная как z = 0 (ортогональная проекция точек 3D на экран 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 , Ситуация такая, как на картинке ниже:

enter image description here

Как видите, мы выбрали горизонтальный срез 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.

0 голосов
/ 10 мая 2019

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

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

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

...