normalizeVectorsSimd function
Normalize a batch of vectors (SIMD-optimized).
Implementation
void normalizeVectorsSimd(final FloatColumn vectorColumn) {
assert(vectorColumn.stride == 2, '(x, y) Column stride must be 2');
final simd = vectorColumn.simdView;
if (simd != null) {
for (int i = 0; i < simd.length; i++) {
final vec = simd[i];
// Calculate magnitude for each vector pair
// vec contains [x1, y1, x2, y2]
final x1 = vec.x;
final y1 = vec.y;
final x2 = vec.z;
final y2 = vec.w;
// Magnitude: sqrt(x^2 + y^2)
final mag1 = math.sqrt(x1 * x1 + y1 * y1);
final mag2 = math.sqrt(x2 * x2 + y2 * y2);
// Normalize: vec / mag
final norm1x = mag1 > 0 ? x1 / mag1 : 0.0;
final norm1y = mag1 > 0 ? y1 / mag1 : 0.0;
final norm2x = mag2 > 0 ? x2 / mag2 : 0.0;
final norm2y = mag2 > 0 ? y2 / mag2 : 0.0;
// Store normalized vectors
simd[i] = Float32x4(norm1x, norm1y, norm2x, norm2y);
}
} else {
// Scalar fallback
for (int i = 0; i < vectorColumn.length; i++) {
final x = vectorColumn.getValue(i, 0);
final y = vectorColumn.getValue(i, 1);
final mag = math.sqrt(x * x + y * y);
if (mag > 0) {
vectorColumn.setValue(i, 0, x / mag);
vectorColumn.setValue(i, 1, y / mag);
}
}
}
}