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
Wyznaczanie wektora odbitego
Wyznaczanie wektora odbitego to podstawa przy programowaniu fizyki etc.
Najpierw funkcja
zwraca ona wektor odbity o długości 1