といいますか、もっと簡単な方法でOKでした。
vertical = dot( N, V ) * N;
horizontal = V - vertical;
reverse = -vertical + horizontal;