1/*---------------------------------------------------------------------------*
2  Project:  Horizon
3  File:     math_Vector3.ipp
4  Copyright (C)2009-2010 Nintendo Co., Ltd.  All rights reserved.
5  These coded instructions, statements, and computer programs contain
6  proprietary information of Nintendo of America Inc. and/or Nintendo
7  Company Ltd., and are protected by Federal copyright law. They may
8  not be disclosed to third parties or copied or duplicated in any form,
9  in whole or in part, without the prior written consent of Nintendo.
10  $Revision: 13623 $
11 *---------------------------------------------------------------------------
12
13
14*/
15
16#include <cmath>
17
18namespace nn {
19namespace math {
20namespace ARMv6 {
21/* ------------------------------------------------------------------------
22        VEC3
23   ------------------------------------------------------------------------ */
24
25/* Please see man pages for details
26
27
28*/
29
30/*
31
32
33
34
35
36
37*/
38NN_MATH_INLINE VEC3*
39VEC3NormalizeC(VEC3* pOut, const VEC3* p)
40{
41    NN_NULL_ASSERT(pOut);
42    NN_NULL_ASSERT(p);
43
44    f32 mag = (p->x * p->x) + (p->y * p->y) + (p->z * p->z);
45
46    NN_ASSERTMSG(mag != 0, "MATHNormalize3():  zero magnitude vector");
47
48    mag = 1.0f / ::std::sqrtf(mag);
49
50    pOut->x = p->x * mag;
51    pOut->y = p->y * mag;
52    pOut->z = p->z * mag;
53
54    return pOut;
55}
56
57
58NN_MATH_INLINE VEC3*
59VEC3NormalizeC_FAST(VEC3* pOut, const VEC3* p)
60{
61    NN_NULL_ASSERT(pOut);
62    NN_NULL_ASSERT(p);
63
64    register f32 x, y, z, mag;
65
66    x = p->x;
67    y = p->y;
68    z = p->z;
69
70    mag = (x * x) + (y * y) + (z * z);
71
72    NN_ASSERTMSG(mag != 0, "MATHNormalize3():  zero magnitude vector");
73
74    mag = 1.0f / ::std::sqrtf(mag);
75
76    x *= mag;
77    y *= mag;
78    z *= mag;
79
80    pOut->x = x;
81    pOut->y = y;
82    pOut->z = z;
83
84    return pOut;
85}
86
87
88/*
89
90*/
91}  // namespcae ARMv6
92}  // namespace math
93}  // namespace nn
94