Wyznaczanie wektora odbitego

Wyznaczanie wektora odbitego to podstawa przy programowaniu fizyki etc. Najpierw funkcja zwraca ona wektor odbity o długości 1
void vectorReflect( const double fVec[ 3 ] , const double fNormal[ 3 ] , double fOut[ 3 ] ){
double fVecCopy[ 3 ];
double fNormalCopy[ 3 ];

fVecCopy[ 0 ]	=	fVec[ 0 ];
fVecCopy[ 1 ]	=	fVec[ 1 ];
fVecCopy[ 2 ]	=	fVec[ 2 ];

fNormalCopy[ 0 ]	=	fNormal[ 0 ];
fNormalCopy[ 1 ]	=	fNormal[ 1 ];
fNormalCopy[ 2 ]	=	fNormal[ 2 ];

// wyznaczanie długości wektorów
double fVecCopyLen	=	sqrt( fVecCopy[ 0 ] * fVecCopy[ 0 ] + fVecCopy[ 1 ] * fVecCopy[ 1 ] + fVecCopy[ 2 ] * fVecCopy[ 2 ] );
double fNormalCopyLen	=	sqrt( fNormalCopy[ 0 ] * fNormalCopy[ 0 ] + fNormalCopy[ 1 ] * fNormalCopy[ 1 ] + fNormalCopy[ 2 ] * fNormalCopy[ 2 ] );
// normalizacja wektorów
fVecCopy[ 0 ]		/=	fVecCopyLen;
fVecCopy[ 1 ]		/=	fVecCopyLen;
fVecCopy[ 2 ]		/=	fVecCopyLen;

fNormalCopy[ 0 ]	/=	fNormalCopyLen;
fNormalCopy[ 1 ]	/=	fNormalCopyLen;
fNormalCopy[ 2 ]	/=	fNormalCopyLen;

double fTmp[ 3 ];
// wyznaczanie iloczynu skalarnego
double fDot	=	fVecCopy[ 0 ] * fNormalCopy[ 0 ] + fVecCopy[ 1 ] * fNormalCopy[ 1 ] + fVecCopy[ 2 ] * fNormalCopy[ 2 ];

fTmp[ 0 ]	=	fNormalCopy[ 0 ] * fDot;
fTmp[ 1 ]	=	fNormalCopy[ 1 ] * fDot;
fTmp[ 2 ]	=	fNormalCopy[ 2 ] * fDot;

fTmp[ 0 ]	*=	2.0;
fTmp[ 1 ]	*=	2.0;
fTmp[ 2 ]	*=	2.0;

fOut[ 0 ]	=	fVecCopy[ 0 ] - fTmp[ 0 ];
fOut[ 1 ]	=	fVecCopy[ 1 ] - fTmp[ 1 ];
fOut[ 2 ]	=	fVecCopy[ 2 ] - fTmp[ 2 ];
}
a teraz skąd to się wzięło 1 parametr to wektor padający drugi to wektor normalny czyli wektor prostopadły do powierzchni , 3 parametr to tablica 3 elementowa w której zostanie zapisany wektor odbity na początku normalizujemy wektory ( normalizacja to podzielnie składowych wektora przez jego długość przez co otrzymujemy wektor którego długość wynosi 1 ) U to wektor normalny V to wektor padający zaczepiamy teraz wektor U i V w tym samym punkcie rzutujemy teraz V na U dzięki czemu otrzymamy wektor W jak łatwo teraz można zauważyć jeśli od wektora V odejmiemy dwa razy wektor W ( wektor W możemy po prostu pomnożyć przez 2 i odejmować tylko raz ) to otrzymamy wektor odbity

Dodaj komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.