Geometria - rzutowanie perspektywiczne

0

Każdemu, kto zajmuje się grafiką 3D znane są chyba (a przynajmniej powinny :P ), wzory na rzutowanie perspektywiczne z przestrzeni 3D na 2D :]

double v2D[2],v3D[3]; //v2D[0] - x; v2D[1] - y; v3D[0] - x; v3D[1] - y; v3D[2] - z;
...
v2D[0]=v3D[0]/v3D[2];
v2D[1]=v3D[1]/v3D[2];

Wiem te_sz, że można rzutować perspektywicznie przestrzenie więcej wymiarowe (np HyperCube etc).

Może ma ktoś z was pomysł jak wyprowadzić wzory na rzutowanie na 2D przestrzeni o dowolnej (ale skończonej ;) ) liczbie wymiarów [???]

...lub chociaż zna wzór dla rzutu 4D w 2D :>

ps: Ja próbowałem przez analogię do 3D -> 2D skonstruować rzutowanie 4D -> 3D no i potem używać tych wzorów powyżej. Czyli:

double v2D[2],v3D[3],v4D[4]; /*v2D[0] - x; v2D[1] - y; v3D[0] - x; v3D[1] - y; v3D[2] - z; v3D[3] - t;*/
...
v3D[0]=v4D[0]/v4D[3];
v3D[1]=v4D[1]/v4D[3];
v3D[2]=v4D[2]/v4D[3];

v2D[0]=v3D[0]/v3D[2];
v2D[1]=v3D[1]/v3D[2];

Ale okazało się, że dla wszystkich hyperkostek, dla których to testowałem, na płaszczyźnie wynikowej (tej w 2D) zawsze pokrywają się punkty z ich przesunieciem w czwartym wymiarze :/

0

mozna z 4d na 3d a potem na 2d

np rzut hiperkostki (najprosciej jak mozna) na 3d jest kostka a na 2d kwadratem

0
nn napisał(a)

np rzut hiperkostki (najprosciej jak mozna) na 3d jest kostka a na 2d kwadratem

user image
Czy to według ciebie jest kwadrat :-/

Mi chodzi o rzutowanie perspektywiczne [sciana]

0

user image
w<font size="1">n</span> - pozycja w wymiarze n gdzie 1 i 2 to wymiary na które rzutujesz
P - odległość obserwatora od monitora
N - ilość wymiarów minus 2
Rada na przyszłość:
Zanim zapytasz wyłącz kompa, usiądź w ciszy i pomyśl. Rozwiązanie będziesz miał szybciej i do tego satysfakcję. Mówię to, bo dla tego zadania nawet nie wyciągałem kartki a jestem w II klasie LO i mam dwóję z matmy :] <font size="1"></span>
Pozdrawiam

PS Nie jestem pewien, czy wartości sigmy dobrze zapisałem bo jeszcze tego na matmie nie mieliśmy :]

0

Aha...
jeszcze mówiłeś coś o nieskończonej liczbie wymiarów? :>
Pamiętam, że ktoś tam próbował umieścić Boga w takiej przestrzeni :]
Ogólnie sprawa się tak przedtawia: Jeżeli w tej nieskończenie wymiarowej przestrzeni jakiś punkt ma współżędne różne od 0 w nieskończonej ilości wymiarów (zauważ, że to nie oznacza we wszystkich :] ) w takim wypadku będzie od nas oddalony o nieskończenie dużą odległość a więc jak wynika z wzoru powyżej współżedne x i y będą dążyć do 0 a ponieważ nie mamy nieskończenie szczegółowego monitora więc będą dla nas oznaczać 0 :] . Natomiast gdy punkt będzie miał współżędne różne od zera w skończonej liczbie wymiarów będzie odległy od nas o skończoną odległość, jednak zauważ, że wynik będzie identyczny jak w przestrzeni o takiej ilości wymiarów w ilu punkt ma współżędne różne od 0 a więc możemy przyjąć, iż przestreń w której jest punkt nie ma nieskończonej liczby wymiarów. Sam więc widzisz, że nie jesteś w stanie narysować punktu w przestrzeni o nieskończonej liczbie wymiarów inaczej niż rysując punkt na środku ekranu :]
Pozdrawiam

0
V-tec napisał(a)

N - ilość wymiarów

Sprawdziłem :] << Wzór się zgadza gdy za N przyjmiesz ilość wymiarów :) Dzięki [browar]

V-tec napisał(a)

Rada na przyszłość:
Zanim zapytasz wyłącz kompa, usiądź w ciszy i pomyśl.

Tak tesz zrobiłem (no może nie 'zanim włączyłem kompa', ale przed napisaniem postu)... Tylko wyszedłem z błędnego założenia, że trzeba najpierw zrzutować w 3D :/

A co do nieskończonej liczby wymiarów to moja wiedza z Algebry nie dokońca się zgadza z tym co napisałeś ;)
Otóż, nie ważne, czy w skończono, czy w nieskończono wymiarowej przestrzeni liniowej każdy punkt (wektor) jest kombinacją liniową skończonej liczby wektorów z bazy tej przestrzeni.

Czyli z definicji odpada sytuacja z 'nieskończenie długim wektorem' [green] który miałby być przedstawiony jako punkt (0,0)... Inna sprawa, że te trochę krótsze wektorki, ze względu na ograniczoną rozdzielczość monitora mogłyby się tam znaleźć :P

poza tym, wcale nie miałem zamiaru robić wizualizacji przestrzeni nieskończenie wymiarowych (wspomniałem o nich tak tylko dla żartu ;) ) :-/

0

No wiesz, teraz to ja nie mam pojęcia o czym mówisz :]
Może to dla tego, że nie wiem co to "baza przestrzeni", ani nie znam tej definicji... mimo to moje rozumowanie wydaje mi się poprawne, więc sprawdź jeśli możesz, czy definicja ta dotyczy punktu, który ma nieskończoną ilość niezerowych współrzędnych...
Aha
Może pokażesz jakiś efekt tego wzoru, bo mi się nie chce pisać (a komu by się chciało dla ciekawości pisać coś takiego w asemblerze :] ) :d

A co do wyłączania kompa - to naprawdę pomaga :]

0
V-tec napisał(a)

No wiesz, teraz to ja nie mam pojęcia o czym mówisz :]
Może to dla tego, że nie wiem co to "baza przestrzeni", ani nie znam tej definicji... mimo to moje rozumowanie wydaje mi się poprawne, więc sprawdź jeśli możesz, czy definicja ta dotyczy punktu, który ma nieskończoną ilość niezerowych współrzędnych...

Właśnie o to chodz, że w przestrzeni liniowej nie może być wektorów (punktów), które mają nieskończoną ilość niezerowych współżędnych :P

A to definicje:
Przestrzeń liniowa (V, #, S, +, , .):
gdzie:
V - zbiór wektorów
S - zbiór skalarów
#: V#V -> V - wewnętrzne działanie addytywne w grupie wektorów
+: S+S -> S - wewnętrzne działanie addytywne w ciele skalarów
: S*S -> S - wewnętrzne działanie multiplykatywne w ciele skalarów
.: S.V -> V - działanie zewnętrzne (ale tego nie pamiętam dokładnie :0 )
Przestrzeń liniowa spełnia następujące aksjomaty:

 1) K(x,y e S) x+y==y+x //Przemienność dodawania
 2) K(x,y,z e S) x+(y+z)==(x+y)+z //Łączność dodawania
 3) I(0 e S) K(x e S) x+0==x //Istnienie 'zera'
 4) K(x e S) I(p e S) x+m==0 //Istnienie elementu przeciwnego
 5) K(x,y e S) x*y==y*x //Przemienność mnożenia
 6) K(x,y,z e S) x*(y*z)==(x*y)*z //Łączność Mnożenia
 7) K(x,y,z e S) x*(y+z)==x*y+x*z //Rozdzielność mnożenia względem dodawania
 8) I(1 e S) K(x e S) 1*x==x //Istnienie 'jedynki'
 9) K(x e S) I(c e S) x*c==1 //Istnienie elementu odwrotnego
10) K(v,w e V) v#w==w#v //Przemienność dodawania wektorów
11) K(v e V && x,y e S) (x*y).v==x.(y.v)
12) I(o e V) K(v e V) o#v==v //Istnienie wektora neutralnego
13) K(v e V) I(r e V) v#r==o //Istnienie wektora przeciwnego
14) K(v e V && x,y e S) (x+y).v==x.v#y.v
15) K(v,w e V && x e S) x.(v#w)==x.v#x.w
16) K(v,w e V && x,y e S) x.v#y.w e V

Żeby podać definicję bazy przyda się jeszcze definicja liniowej niezależności wektorów :]
Wektory liniowo niezależne:
Wektory v[1],v[2],...,v[n] e V nazywamy liniowo niezależnymi tylko wtedy gdy:
x[1].v[1]#x[2].v[2]#...#x[n].v[n]==o => x[1]*x[1]+x[2]*x[2]+...+x[n]*x[n]==0

Dla ułatwienia zbiór składający się z n wektorów liniowo niezależnych oznaczę symbolem B[n]

Baza przestrzeni liniowej:
Bazą przestrzeni liniowej (V, #, S, +, *, .) nazywamy największy (tzn składający się z największej liczby elementów) zbiór wektorów liniowo niezależnych zawierający się w V.

Zauważ, że każdy inny wektor tej przestrzeni da się uzyskać poprzez kombinację liniową wektorów z bazy ;) << Czyli dana baza wyznacza nam jednoznacznie przestrzeń liniową której jest bazą :)

A wymiar przestrzeni liniowej jest liczbą wektorów w jej bazie :]

teraz przykład:
Przestrzeń 2D - R^2
(V, #, R, +, *, .)
Bazą tej przestrzeni (chyba najczęściej urzywaną) jest np: {(1;0); (0;1)}
Są to wektory liniowo niezależne bo układ równań:

 / a*1+b*0==0
{
 \ a*0+b*1==0

ma dokładnie jedno rozwiązanie a==0 && b==0
Ale to nie jest jedyna baza tej przestrzeni :]
np inną bazą jest: {(1;2); (3;5)}

 / a*1+b*3==0
{
 \ a*2+b*5==0

tesz ma dokładnie jedno rozwiązanie a==0 && b==0
Ale bazą jusz nie jest: {(1;1); (2; 2)}

 / a*1+b*2==0
{
 \ a*1+b*2==0

bo dla a==2 && b==-1 równania są spełnione, ale aa+bb==22+(-1)(-1)==5!=0

A teraz przykład przestrzeni nieskończenie wymiarowej:
Ponieważ Baza Przestrzeni wyznacza nam jednoznacznie przestrzeń, której jest bazą, wystarczy tylko, że podam jej bazę :]

{1; sin(t); cos(t); sin(2t); cos(2t); sin(3t); cos(3t);...}
jest to przestrzeń liniowa funkcji zmiennej t e R ;P
(F(t), +, R, +, *, *)

Jeśli chcesz to możesz sobie sprawdzić, że nie da się dobrać takich x[1], x[2],... x[n] nie wszystkich równych 0, żeby funkcja
f(t)=x[1]*1+x[2]*sin(t)+x[3]*cos(t)+x[4]*sin(2*t)+x[5]*cos(2*t)+... +x[n]*sin(n*t) była tożsamościowo równa 0

Ja nie będę tego tu udowadniał - nie chce mi się :0

V-tec napisał(a)

Może pokażesz jakiś efekt tego wzoru, bo mi się nie chce pisać (a komu by się chciało dla ciekawości pisać coś takiego w asemblerze :] ) :d

Jak skończę - a podejżewam, że wyjdzie mi z tego tulbox do MatLab'a - to pewnie gdzieś to umieszcze :P
Najprawdopodobniej na stronce mojego roku :]
Jeśli chcesz to wrzucę też tu linka [green]</b>

<font size="1">A i jeszcze pewien drobiazg:
Ponieważ dość często gadam o problemach matematycznych przez gg etc opracowaliśmy z kolegami pewnego rodzaju konwencję zapisu wzorów... No i oczywiście wszystkie zawarte w tym poście są w ten sposób zapisane :]
A to niektóre oznaczenia w tej 'konwencji':
K(...) - 'dla każdego ...'
I(...) - 'istnieje ...'
x e X - 'element x należy do zbioru X'
&& - 'logiczne "i"'
|| - 'logiczne "lub"'
=> - 'znak implikacji ("jeżeli... to...")'
<=> - 'znak równoważności ("wtedy, i tylko wtedy, gdy")'
: - 'takie, że (jak w matematyce)'
== - 'porównanie (jak w C)'
^ - 'potęga'
A z B - 'zbiór A zawiera się w zbiorze B'

<< to chyba wszystko niezbędne do odszyfrowania tego posta [green] </span>

0

Właśnie o to chodz, że w przestrzeni liniowej nie może być wektorów (punktów), które mają nieskończoną ilość niezerowych współżędnych

A czy to nie oznacza, że przestrzeń nieskończenie wymiarowa jest matematycznie niemożliwa? :>

Wiesz, co zrobiłem po przeczytaniu twojego posta? Wróciłem do początku bo jedynym co wywnioskowałem za pierwszym razem to to, że zbiór skalarów jest grupą ze względu na mnożenie i dodawanie i zbiór wektorów jest grupą ze względu na dodawanie [green] ale to już dawno sobie udowadniałem :] .
Trochę mi zamieszało to, że nie podałeś definicji działania ".", ale jakoś doszedłem z tym do ładu :] .

Hmm
Sporo się napisałeś xD a ja w zasadzie jestem w trakcie czytania książki na ten temat, więc nie proszę cię, żebyś mi cokolwiek wyjaśniał. Dzięki za ten ostatni post - podejrzewam, że dłużej go pisałeś niż ja czytałem [green] . A matlaba nie mam, ale zrobię sobie w asmie coś takiego albo we flashu, żeby się nie męczyć.
Pozdrawiam

PS jedyne, co mnie ratuje od pełnego załamania się to to, że mi mimo braku tej całej wiedzy to mi udało się wyprowadzić wzór [green]

0
V-tec napisał(a)

A czy to nie oznacza, że przestrzeń nieskończenie wymiarowa jest matematycznie niemożliwa? :>

Ależ jest możliwa - przecież nawet podałem przykład :] - tyle, że po zrzutowaniu perspektywicnym na przestrzeń skończeniewymiarową zawsze będzie wyglądać jak by miała tyle wymiarów co najwięcej wymiarowy (w sense: najweięcej współżędnych !=0 ) wektor z rzutowanego obiektu.

V-tec napisał(a)

Wiesz, co zrobiłem po przeczytaniu twojego posta?

Ciekawe, czy jeszcze komukolwiek zechce się to przeczytac :P

V-tec napisał(a)

Trochę mi zamieszało to, że nie podałeś definicji działania ".", ale jakoś doszedłem z tym do ładu :] .

Podałem definicję - Jest to dowolne działanie z iloczynu kartezjańskiego zbiorów S i V w zbiór V (".: S.V -> V") takie, żeby spełniało aksjomaty (te od 1 do 15 :] )
I masz rację, tą listę aksjomatów możnaby znacznie skrucić, gdyby niektóre zastąpić takimi:
(S, +, *) - jest ciałem
(V, #) - jest grupą abbelową
Ale ja oczywiście musiałem rozpisać wszystkie w definicji :] (zresztą skąd mogłem wiedzieć, że wiesz co to ciało, grupa etc [???])

V-tec napisał(a)

PS jedyne, co mnie ratuje od pełnego załamania się to to, że mi mimo braku tej całej wiedzy to mi udało się wyprowadzić wzór [green]

Bo wiedza zabija myślenie [green] << dlatego nie lubię się uczyć ;)

0

(w sense: najweięcej współżędnych !=0 )

hmm
chciałem zadać jeszcze jedno pseudodociekliwe i nawet wg. mnie błyskotliwe pytanie na temat powyższego cytatu, ale doszedłem do wniosku, że - kto jak kto - ale ty wiesz o czym mówisz :D .
hmm
No rzeczywiście teraz widzę, co to jest działanie "." hmm nie przyjrzałem się zapisowi [green]

Jeszcze raz wielkie dzięki za pouczający wykład [green]

PS a co do wiedzy to masz trochę racji - ale nie do końca. Kiedy pierwszy raz zająłem się grafiką 3d (we flashu) mozolnie opracowywałem wszystkie wzory (musiałem się specjalnie do tego nauczyć funkcji trygonometrycznych :] ) w zasadzie metodą rysunkową, wyobraźni [green] męczyłem się z tym okrutnie, ale udało się a ja miałem sporą satysfakcję. Zresztą efekt możesz sobie tu zobaczyć - nadal jest biedny, niedokończony projekt nad którym spędziłem długie godziny... aż łezka się w oku kręci :D . http://www.v-tec.webpark.pl/pegaz.html
Kilka dni temu z kolei - robiłem jakieś zadanka dotyczące grup i wyprowadziłem sobie te same wzory w ciągu kilku minut. Może efektywniejale za to satysfakcja żadna i nie rozwinęło mnie to szczególnie też :] ale dzięki temu mogę przejść do bardziej skomplikowanych i ekscytujących rzeczy jak na przykład powyższe wzory etc. Z tego wynika, że wiedza może nie jest potrzebna do rozwoju, ale daje dużo większe pole do popisu

0
V-tec napisał(a)

chciałem zadać jeszcze jedno pseudodociekliwe i nawet wg. mnie błyskotliwe pytanie...

W sumie to spróbuję je zgadnąć [green]

  1. Nie wyjaśniłem co to są wsółżędne...
    Ale napisałem, że znając bazę B, każdy wektor z przestrzeni V (której to baza) da się jednoznacznie przedstawić jako kombinację liniową wektorów z bazy...
    K(v e V) I(n e N) I(b[1],b[2],...,b[n] e B && x[1],x[2],...,x[n] e S) v==x[1].b[1]#x[2].b[2]#...#x[n].b[n]
    W tym przypadku x-sy są współżędnymi wektora v w bazie B.

Jeżeli w bazie B jest przeliczalnie wiele wektorów to możesz sobie ustawić je w kolumnie i mnorząc przez wiersz współżędnych (tak jak się mnorzy macierze) otrzymasz wektor:

                   [b[1]]
v=[x[1] x[2] ... ].[b[2]]
                   [... ]

:0 Dlatego pewnie przyjął się zapis v=(x[1],x[2],...) :] //ale to tylko moje domysły ;)

Pewnie zastanawia Cię jak możemy mówić o przestrzeni nieskończenie wymiarowej gdy tak naprawdę każdy obiekt w niej się znajdujący ma skończenie wiele wymiarów :>

To jest właśnie taki moment w którym zawodzi intuicja :P
Wymiar przestrzeni to nie ilość niezerowych współżędnych, ale (jak jusz pisałem) ilość wektorów w bazie tej przestrzeni... a w konsekwencji największa ilość możliwych do znalezienia wektorów liniowo niezależnych.

niech e[i] oznacza ciąg samych zer z jedną jedynką na i-tej pozycji...
czyli:

e[1]=(1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0;...)
e[2]=(0; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0;...)
e[3]=(0; 0; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0;...)
e[4]=(0; 0; 0; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0;...)
...
e[i]=(0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; ... ; 1; 0; 0;...)

Zauważ że wektorki te są liniowo niezależne:
bo:
K(n) x[1].e[1]#x[2].e[2]#...#x[n].e[n]==o => x[1]*x[1]+x[2]*x[2]+...+x[n]*x[n]==0

Ale każdy z nich za i-tą pozycją ma jusz same zera :P
Jak dodasz pare takich wektorków np e[i]#e[j]#e[k]#e[n] to nadal za pozycją max(i,j,k,n) będą same zera :P
Niezależnie ile byś ich dodawał (a możesz tylko skończenie wiele :] ) i tak za którąś pozycją nadal będą zera :)

A wektorków e[...] jest dokładnie tyle samo co liczb naturalnych (a ile jest liczb naturalnych [???] - nieskończenie dużo :] )

0

Masz okazję się odwdzięczyć :D
Ostatnio wróciłem trochę do flasha i chciałem zrobić mały silniczek obsługujący właśnie punkty w przestrzeni 4-wymiarowej. No i zrobiłem a tu masz efekt:
http://www.v-tec.webpark.pl/engine4dbeta.html
To jest sześcian w 4d (zapomniałem jak się nazywa ;P ), obrócony wokół płaszczyzny yz o 1r i obracający się wokół płaszczyzny z4 (4wymiar ;] ) o 0,1 radiana na klatkę
To je nie widzę, że jest dobrze przez brak tekstur, czy nie jest dobrze? [???]
Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1