normalizeVectorsSimd function

void normalizeVectorsSimd(
  1. FloatColumn vectorColumn
)

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);
      }
    }
  }
}