В настоящее время я проецирую круг с камерой. Класс камеры и разные углы обзора.
Характеристики:
Я использовал класс camera.Camera, и все вроде нормально, но когда я изменяю угол обзора по оси Y на более высокий, чем 60, точки внезапно образуют крест. (https://i.stack.imgur.com/GBvDX.png)
На мой взгляд, это проблема кода (он должен образовывать эллипс). Или это какое-то проективное явление?
Вот мой код:
cam = Camera()
cam.set_K_elements(0, 0, 1, a=1)
R = np.identity(3)
cam.set_R(R)
cam.set_t(np.array([[0], [0], [0]]))
rad_y = 1,0472
cam.set_R_euler_angles((0, rad_y, 0))
circle = get_circle_points(1000, 1)
cam.plot_world_points(circle, plot_style = "ro", solve_visibility=False)
Я новичок в проективной геометрии и не знаю, ожидается ли такое поведение или моя вина.
Я очень ценю любую помощь, которую вы можете оказать.
Извините, я не могу публиковать другие фотографии (я новичок). Но когда я рисую круг с углом = 0 -> я получаю хороший круг с радиусом 1 ... если я увеличиваю угол, я получаю эллипс (это то, что, как я думал, должно произойти). Но с углом> 50 я получаю такой результат и не знаю почему.
Но спасибо за ответ, попробую оценить свою функцию.
Не могли бы вы попробовать с rad_y = 1.0472
, версия с запятыми вообще не должна запускаться, поскольку она дает rad_y
целочисленный список в качестве значения. Не могли бы вы дать импорт библиотеки для не так уж и близко инициированных? Не является ли установка R
на идентичность избыточной, как вы установили чуть позже матрицу с использованием углов Эйлера? Было бы лучше упорядочить последовательность инициализации более интуитивно, то есть сначала установить положение камеры, затем остальную ориентацию, а затем изменить это, посмотрев на целевую позицию?
Привет, спасибо за ответ. Это всего лишь небольшой фрагмент кода, и я вычисляю радианты в градусах (радианах (угол)). Это просто опечатка. Да, наверное, вы правы, изменив последовательность. Проблему пока не нашел. Думаю, тут есть какое-то отношение к повороту камеры. Если я установлю для параметра resolve_visibility значение True, он ничего не покажет, и я не знаю почему.
Кажется, что точки образуют эллипс с 40 градусами, но с более чем 50 градусами точки появляются на другой стороне графика ... действительно странное Обновление: если вместо этого я изменю положение камеры по оси z на 0,5 из 0 работает отлично ...
Картина не похожа на какую-либо проекцию, которую мог бы дать круг. Может что-то не так в get_circle_points ()?