コード例 #1
0
ファイル: Vector.cpp プロジェクト: FloodProject/flood
	//
	// Returns a vector that is orthogonal to A (but of arbitrary length). 
	//
	Vector OrthogonalTo( const Vector &A )
	{
		Vector B( A.Size() );
		double c = 0.5 * SupNorm( A );

		if( A.Size() < 2 ) 
		{
			// Just return the zero-vector.
		}
		else if( c == 0.0 ) 
		{
			B(0) = 1.0;
		}
		else for( register int i = 0; i < A.Size(); i++ )
		{
			if( Abs( A(i)) > c )
			{
				int k = ( i > 0 ) ? i - 1 : i + 1;
				B(k) = -A(i);
				B(i) =  A(k);
				break;
			}
		}
		return B;
	}
コード例 #2
0
	/*-------------------------------------------------------------------------*
	* O R T H O G O N A L  T O                                                *
	*                                                                         *
	* Returns a vector that is orthogonal to A (but of arbitrary length).     *
	*                                                                         *
	*-------------------------------------------------------------------------*/
	Vec3 OrthogonalTo( const Vec3 &A )
	{
		float c = 0.5 * SupNorm( A );
		if( c ==       0.0  ) return Vec3(    1.0,    0.0,    0.0 );
		if( c <= Abs(A.X()) ) return Vec3( -A.Y(),  A.X(),    0.0 );
		if( c <= Abs(A.Y()) ) return Vec3(    0.0, -A.Z(),  A.Y() );
		return Vec3(  A.Z(),    0.0, -A.X() );
	}