次の方法で共有


XMVector2Normalize 関数 (directxmath.h)

2D ベクターの正規化されたバージョンを返します。

構文

XMVECTOR XM_CALLCONV XMVector2Normalize(
  [in] FXMVECTOR V
) noexcept;

パラメーター

[in] V

2D ベクター。

戻り値

正規化されたバージョンの V を返します。

注釈

長さ 0 のベクトルの場合、この関数は 0 ベクトルを返します。 無限長のベクトルの場合、QNaN のベクトルを返します。

ほとんどのグラフィックス アプリケーションでは、ベクトルに正規化の問題を引き起こさない明確に定義された長さを確保することが一般的な方法であることに注意してください。 ただし、すべての浮動小数点入力に対して機能する堅牢な正規化が必要な場合は、代わりに次のコードを使用できます。


inline XMVECTOR XMVector2NormalizeRobust( FXMVECTOR V )
{
    // Compute the maximum absolute value component.
    XMVECTOR vAbs = XMVectorAbs(V);
    XMVECTOR max0 = XMVectorSplatX(vAbs);
    XMVECTOR max1 = XMVectorSplatY(vAbs);
    max0 = XMVectorMax(max0, max1);

    // Divide by the maximum absolute component.
    XMVECTOR normalized = XMVectorDivide(V, max0);

    // Set to zero when the original length is zero.
    XMVECTOR mask = XMVectorNotEqual(g_XMZero, max0);
    normalized = XMVectorAndInt(normalized, mask);

    XMVECTOR t0 = XMVector2LengthSq(normalized);
    XMVECTOR length = XMVectorSqrt(t0);

    // Divide by the length to normalize.
    normalized = XMVectorDivide(normalized, length);

    // Set to zero when the original length is zero or infinity.  In the
    // latter case, this is considered to be an unexpected condition.
    normalized = XMVectorAndInt(normalized, mask);
    return normalized;
}
    

プラットフォームの要件

Microsoft Visual Studio 2010 または Microsoft Visual Studio 2012 と Windows SDK for Windows 8。 Win32 デスクトップ アプリ、Windows ストア アプリ、Windows Phone 8 アプリでサポートされます。

要件

要件
対象プラットフォーム Windows
ヘッダー directxmath.h (DirectXMath.h を含む)

こちらもご覧ください

DirectXMath ライブラリ 2D ベクター幾何学的関数

XMVector2NormalizeEst