Powiem to z góry: ten problem jest trudny. Istnieje powód, dla którego powiązane pytanie Dana Story'ego nie zostało wysłuchane. Pozwolić na wyjaśnienie dla osób, które chcą się w to włożyć. Mam jednak nadzieję, że nie mam racji co do tego, jak ciężko jest.
Zakładam, że współrzędne ekranu 2D i macierz projekcji/perspektywy są znane. Musisz wiedzieć przynajmniej tyle (jeśli nie znasz macierzy projekcji, w zasadzie używasz innej kamery, aby spojrzeć na świat). Nazwijmy każda para ekranie 2D współrzędne (a_i, b_i)
i będę zakładać macierz projekcji ma postać
P = [ px 0 0 0 ]
[ 0 py 0 0 ]
[ 0 0 pz pw]
[ 0 0 s 0 ], s = +/-1
Prawie każdy rozsądny występ ma ten formularz. Praca za pośrednictwem rurociągu renderowania, można zauważyć, że
a_i = px x_i/(s z_i)
b_i = py y_i/(s z_i)
gdzie (x_i, y_i, z_i)
są oryginalne Współrzędne 3D punktu.
Załóżmy teraz, że znasz swój kształt w zestawie współrzędnych kanonicznych (cokolwiek chcesz), aby wierzchołki były (x0_i, y0_i, z0_i)
. Możemy ustawić je jako kolumny macierzy C
. Rzeczywiste współrzędne kształtu są sztywną transformacją tych współrzędnych. W podobny sposób uporządkuj rzeczywiste współrzędne jako kolumny macierzy V
.Następnie te są powiązane
V = R C + v 1^T (*)
gdzie 1^T
jest wektorem rząd te o odpowiedniej długości, R
jest macierzą ortogonalną, obrót sztywnej transformacji i v
jest przesunięciem wektora transformacji.
Teraz masz wyrażenie dla każdej kolumny V
z góry: pierwsza kolumna to { s a_1 z_1/px, s b_1 z_1/py, z_1 }
i tak dalej.
Musisz rozwiązać układ równań (*)
dla zestawu skalarów z_i
i sztywna transformacja zdefiniowane R
i v
.
Trudności
- Równanie jest nieliniowa w niewiadomych, z udziałem ilorazy
R
i z_i
- założyliśmy do teraz, że wiesz, który koordynuje 2D odpowiadają których wierzchołki pierwotnego kształtu (jeśli twój kształt jest kwadratowy, jest to nieco mniejszy problem).
- Zakładamy, że istnieje nawet rozwiązanie; jeśli są błędy w danych 2D, to trudno powiedzieć, jak dobrze zostanie spełnione równanie
(*)
; transformacja będzie nieszablonowa lub nieliniowa.
Pytanie o konkretne rozwiązanie tego problemu, a nie ogólne techniki, bardzo przypomina pracę domową. –
oh, sprawa jest ogólna, a konkretne rozwiązanie będzie ogólne dla wielu takich przypadków (dla trójkątów z ex ...) – Rella
możliwy duplikat [Normalny wektor trzech punktów] (http: // stackoverflow .com/questions/2035659/normal-vector-of-three-points) – dmckee