creek

The AI Image Editor of 2030

image_utils.dart (1009B)


import 'dart:math';
import 'dart:ui';

// Extension to normalize Rect
extension RectNormalize on Rect {
  Rect normalize() {
    return Rect.fromLTRB(
      left < right ? left : right,
      top < bottom ? top : bottom,
      left < right ? right : left,
      top < bottom ? bottom : top,
    );
  }
}

List<double> l2Normalize(List<double> vec) {
  double sum = vec.fold(0, (p, c) => p + c * c);
  double norm = sqrt(sum);
  if (norm == 0) return vec;
  return vec.map((v) => v / norm).toList();
}

double dotProduct(List<double> a, List<double> b) {
  double sum = 0;
  // Ensure lengths match to avoid range errors
  int len = min(a.length, b.length);
  for (int i = 0; i < len; i++) {
    sum += a[i] * b[i];
  }
  return sum;
}

double cosineSim(List<double> a, List<double> b) {
  double dot = 0.0, nA = 0.0, nB = 0.0;
  for (int i = 0; i < a.length; i++) {
    dot += a[i] * b[i];
    nA += a[i] * a[i];
    nB += b[i] * b[i];
  }
  return (nA == 0 || nB == 0) ? 0.0 : dot / (sqrt(nA) * sqrt(nB));
}