Ĺadny brzuch
Mam do was 2 pytanka odnośnie ich:
-Czy dobrze liczę długość wektora pierwiastkując z dwóch sume kwadratów składowych x,y,z? Moje wątpliwości kierowane są do tego, czy trzeba pierwiastkować z dwóch, czy trzech(jaka funkcja z biblioteki math za to odpowiada?).
-Czy ten wzór na prostopadły wektor jest dobry?:
[-y,x,-z]
cytat:gokudbz napisał:
Mam do was 2 pytanka odnośnie ich:
-Czy dobrze liczę długość wektora pierwiastkując z dwóch sume kwadratów składowych x,y,z? Moje wątpliwości kierowane są do tego, czy trzeba pierwiastkować z dwóch, czy trzech(jaka funkcja z biblioteki math za to odpowiada?).
-Czy ten wzór na prostopadły wektor jest dobry?:
[-y,x,-z]
Długość wektora A[x,u,z] to sqrt(sqr(x)+sqr(y)+sqr(z)) gdzie sqrt-pierwiastkowanie, sqr - potęgowanie.
Warunek na prostopadłość wektorów A[ax,ay,az] i B[bx,by,bz] to (kropka oznacza mnożenie):
(ax.bx) + (ay.by) + (az.bz) = 0 (iloczyn skalarny =0), więc wektor [-y,x,-z] nie jest prostopadły do wektora [x,y,z], bo ich iloczyn skalarny wynosi (z.z). Wektor prostopadły do [x,y,z] to np. [yz,xz,-2xy].
Pozdrawiam i zapraszam na *** www.windowsik.prv.pl ***
cytat:gokudbz napisał:
Mam do was 2 pytanka odnośnie ich:
-Czy dobrze liczę długość wektora pierwiastkując z dwóch sume kwadratów składowych x,y,z? Moje wątpliwości kierowane są do tego, czy trzeba pierwiastkować z dwóch, czy trzech(jaka funkcja z biblioteki math za to odpowiada?).
-Czy ten wzór na prostopadły wektor jest dobry?:
[-y,x,-z]
1. Tak, jeżeli używasz dwuwymiarowego układu współrzędnych. Przy 3d trzeba potęgować wszystkie składowe (x, y, z) i sume zpierwiastkować. Radzę wynik trzymać w double, dla wyższej dokładności (praktycznie wynik nigdy nie składa się tylko z liczb całkowitych)
2. Nie bardzo. Możesz użyć wzoru podanego przez Favex'a, lub wyliczyć go na podstawie trzech punktów płaszczyzny, na której chcesz znaleźć ten wektor:
punkty P1, P2, P3 // punkty płaszczyzny
wektory V1, V2 // potrzebne by liczyć dalej
V1 = P2 - P1 // chodzi o to by dla każdej składowej V1 wyliczył x, y, z przez różnicę składowych punktów (kolejność jest ważna)
V2 = P3 - P1 // to samo
Po tym jak masz dwa wektory wychodzące od jednego punktu (P1) możesz obliczyć wektor prostopadły, na podstawie iloczynu wektorowego:
wektor V3
V3.x = V1.y * V2.z - V2.y * V1.z
V3.y = V2.x * V1.z - V1.x * V2.z
V3.z = V1.x * V2.y - V2.x * V1.y
To jest trudny wzór więc radzę stworzyć odpowiednią funkcję.
I am the REAL Noname
Moja strona: www.coderulers.prv.pl Proszę o pomoc w rozkręceniu mojego forum
C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg." - Bjarne Stroustrup, twórca języka C++
Mam pewne pytanie odnośnie normalnych, ponieważ to jest związane z wektorami:
Otóż ja uczyłem się wyznaczać normalne tak, że wyznaczam go z iloczynu 2 wektorów, które opisują 2 proste idące z jednego punktu na powierzchni.
Nie jest to jednak do końca zgodne, ponieważ to co wyszło może być wektorem przeciwnym do tego, który chcemy osiągnąć. dzieje się tak chyba, ponieważ ten sposób "nie wie", która część tej płaszczyzny jest widoczna. Czy znacie jakieś inne sposoby?
cytat:gokudbz napisał:
... ponieważ ten sposób "nie wie", która część tej płaszczyzny jest widoczna. ...
Wie i ustala ZAWSZE jedną stronę. To w którą stronę będzie skierowany jest zależny od tego w jakiej kolejności podasz wektory. Jest to robione na podstawie "zegara" - aby patrząc na zegar (załużmy, że punkt pierwszy to jego środek) otrzymać wektor prostopadły skierowany na oglądającego, trzeba podać dwa następne wektory w kolejności zgodnej z ruchem wskazówek zegara. Jeżeli podasz odwrotnie to otrzymasz wektor "przeciwny". Większość prgramów 3d zapisuje trójkąty tak aby były składane zgodnie z ruchem wskazówek zegara, przez co łatwiej później wyznaczać wektory normalne.
I am the REAL Noname
Moja strona: www.coderulers.prv.pl Proszę o pomoc w rozkręceniu mojego forum
C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg." - Bjarne Stroustrup, twórca języka C++
Dzięki. Ale czy w ogóle tworząc 3d często wyznacza się normalne? bo takie informacje chyba są w prawie każdym formacie modelu 3d?
bez normalnych nie da się zrobić oświetlenia, więc pojawią się one w prawie każdym programie który zechcesz napisać (o ile będzie on wykożystywał oświetlenie). Poza tym normalne wykorzystuje się do wielu różnych efektów np. Volumetrycznych cieni.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
-Czy dobrze liczę długość wektora pierwiastkując z dwóch sume kwadratów składowych x,y,z? Moje wątpliwości kierowane są do tego, czy trzeba pierwiastkować z dwóch, czy trzech(jaka funkcja z biblioteki math za to odpowiada?).
-Czy ten wzór na prostopadły wektor jest dobry?:
[-y,x,-z]
cytat:gokudbz napisał:
Mam do was 2 pytanka odnośnie ich:
-Czy dobrze liczę długość wektora pierwiastkując z dwóch sume kwadratów składowych x,y,z? Moje wątpliwości kierowane są do tego, czy trzeba pierwiastkować z dwóch, czy trzech(jaka funkcja z biblioteki math za to odpowiada?).
-Czy ten wzór na prostopadły wektor jest dobry?:
[-y,x,-z]
Długość wektora A[x,u,z] to sqrt(sqr(x)+sqr(y)+sqr(z)) gdzie sqrt-pierwiastkowanie, sqr - potęgowanie.
Warunek na prostopadłość wektorów A[ax,ay,az] i B[bx,by,bz] to (kropka oznacza mnożenie):
(ax.bx) + (ay.by) + (az.bz) = 0 (iloczyn skalarny =0), więc wektor [-y,x,-z] nie jest prostopadły do wektora [x,y,z], bo ich iloczyn skalarny wynosi (z.z). Wektor prostopadły do [x,y,z] to np. [yz,xz,-2xy].
Pozdrawiam i zapraszam na *** www.windowsik.prv.pl ***
cytat:gokudbz napisał:
Mam do was 2 pytanka odnośnie ich:
-Czy dobrze liczę długość wektora pierwiastkując z dwóch sume kwadratów składowych x,y,z? Moje wątpliwości kierowane są do tego, czy trzeba pierwiastkować z dwóch, czy trzech(jaka funkcja z biblioteki math za to odpowiada?).
-Czy ten wzór na prostopadły wektor jest dobry?:
[-y,x,-z]
1. Tak, jeżeli używasz dwuwymiarowego układu współrzędnych. Przy 3d trzeba potęgować wszystkie składowe (x, y, z) i sume zpierwiastkować. Radzę wynik trzymać w double, dla wyższej dokładności (praktycznie wynik nigdy nie składa się tylko z liczb całkowitych)
2. Nie bardzo. Możesz użyć wzoru podanego przez Favex'a, lub wyliczyć go na podstawie trzech punktów płaszczyzny, na której chcesz znaleźć ten wektor:
punkty P1, P2, P3 // punkty płaszczyzny
wektory V1, V2 // potrzebne by liczyć dalej
V1 = P2 - P1 // chodzi o to by dla każdej składowej V1 wyliczył x, y, z przez różnicę składowych punktów (kolejność jest ważna)
V2 = P3 - P1 // to samo
Po tym jak masz dwa wektory wychodzące od jednego punktu (P1) możesz obliczyć wektor prostopadły, na podstawie iloczynu wektorowego:
wektor V3
V3.x = V1.y * V2.z - V2.y * V1.z
V3.y = V2.x * V1.z - V1.x * V2.z
V3.z = V1.x * V2.y - V2.x * V1.y
To jest trudny wzór więc radzę stworzyć odpowiednią funkcję.
I am the REAL Noname
Moja strona: www.coderulers.prv.pl Proszę o pomoc w rozkręceniu mojego forum
C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg." - Bjarne Stroustrup, twórca języka C++
Mam pewne pytanie odnośnie normalnych, ponieważ to jest związane z wektorami:
Otóż ja uczyłem się wyznaczać normalne tak, że wyznaczam go z iloczynu 2 wektorów, które opisują 2 proste idące z jednego punktu na powierzchni.
Nie jest to jednak do końca zgodne, ponieważ to co wyszło może być wektorem przeciwnym do tego, który chcemy osiągnąć. dzieje się tak chyba, ponieważ ten sposób "nie wie", która część tej płaszczyzny jest widoczna. Czy znacie jakieś inne sposoby?
cytat:gokudbz napisał:
... ponieważ ten sposób "nie wie", która część tej płaszczyzny jest widoczna. ...
Wie i ustala ZAWSZE jedną stronę. To w którą stronę będzie skierowany jest zależny od tego w jakiej kolejności podasz wektory. Jest to robione na podstawie "zegara" - aby patrząc na zegar (załużmy, że punkt pierwszy to jego środek) otrzymać wektor prostopadły skierowany na oglądającego, trzeba podać dwa następne wektory w kolejności zgodnej z ruchem wskazówek zegara. Jeżeli podasz odwrotnie to otrzymasz wektor "przeciwny". Większość prgramów 3d zapisuje trójkąty tak aby były składane zgodnie z ruchem wskazówek zegara, przez co łatwiej później wyznaczać wektory normalne.
I am the REAL Noname
Moja strona: www.coderulers.prv.pl Proszę o pomoc w rozkręceniu mojego forum
C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg." - Bjarne Stroustrup, twórca języka C++
Dzięki. Ale czy w ogóle tworząc 3d często wyznacza się normalne? bo takie informacje chyba są w prawie każdym formacie modelu 3d?
bez normalnych nie da się zrobić oświetlenia, więc pojawią się one w prawie każdym programie który zechcesz napisać (o ile będzie on wykożystywał oświetlenie). Poza tym normalne wykorzystuje się do wielu różnych efektów np. Volumetrycznych cieni.