3-й к 2-й матрице проекции

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

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

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

16
задан Laurent 8 February 2014 в 19:52
поделиться

3 ответа

Это дает Вам два набора, каждое из трех уравнений в 3 переменных:

a*x0+b*y0+c*z0 = x0'
a*x1+b*y1+c*z1 = x1'
a*x2+b*y2+c*z2 = x2'

d*x0+e*y0+f*z0 = y0'
d*x1+e*y1+f*z1 = y1'
d*x2+e*y2+f*z2 = y2'

Просто использование безотносительно метода решения одновременных уравнений является самым легким в Вашей ситуации (даже не трудно решить их "вручную"). Затем Ваша матрица преобразования просто ((a, b, c) (d, e, f)).

...

На самом деле, который упрощен и принимает, камера указала на источник Вашей 3D системы координат и никакой перспективы.

Для перспективы, матрица преобразования работает больше как:

               ( a, b, c, d )   ( xt )
( x, y, z, 1 ) ( e, f, g, h ) = ( yt )
               ( i, j, k, l )   ( zt )

( xv, yv ) = ( xc+s*xt/zt, yc+s*yt/zt ) if md < zt;

, но 4x3 матрица более ограничивается, чем 12 степеней свободы, так как мы должны иметь

a*a+b*b+c*c = e*e+f*f+g*g = i*i+j*j+k*k = 1
a*a+e*e+i*i = b*b+f*f+j*j = c*c+g*g+k*k = 1

, Таким образом, у Вас должно, вероятно, быть 4 точки, чтобы заставить 8 уравнений покрывать эти 6 переменных для положения камеры и угла и еще 1 для масштабирования 2-D точек наблюдения, так как мы сможем устранить "центральные" координаты (xc, yc).

Поэтому, если Вы имеете 4 точки и преобразовываете Ваши 2-D точки наблюдения, чтобы быть относительно центра Вашего дисплея, затем можно получить 14 одновременных уравнений в 13 переменных и решить.

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

12
ответ дан 30 November 2019 в 22:37
поделиться

Ваша камера имеет (по крайней мере) 7 степеней свободы - 3 для положения, 3 для ориентации и 1 для FOV. Я уверен, что кто-то исправит меня, если я буду неправ, но не кажется, что 3 точки достаточно для полного решения.

Для обобщенного решения этой проблемы, ищите 'Корреляцию Представления' в Графических Драгоценных камнях II.

3
ответ дан 30 November 2019 в 22:37
поделиться

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

0
ответ дан 30 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: