| 148 | |
| 149 | |
| 150 | int LuaVector::normalize(lua_State* L) { |
| 151 | static std::vector<float> data; |
| 152 | const int count = lua_gettop(L); |
| 153 | data.resize(count + 1); // not using data[0] |
| 154 | |
| 155 | float sum = 0.0f; |
| 156 | for (int i = 1; i <= count; i++) { |
| 157 | const float v = luaL_checkfloat(L, i); |
| 158 | data[i] = v; |
| 159 | sum += (v * v); |
| 160 | } |
| 161 | sum = sqrtf(sum); |
| 162 | if (sum == 0.0f) { |
| 163 | return count; |
| 164 | } |
| 165 | lua_checkstack(L, count); |
| 166 | const float scale = (1.0f / sum); |
| 167 | for (int i = 1; i <= count; i++) { |
| 168 | lua_pushfloat(L, data[i] * scale); |
| 169 | } |
| 170 | return count; |
| 171 | } |
| 172 | |
| 173 | |
| 174 | //============================================================================// |
no test coverage detected