creek

The AI Image Editor of 2030

lib/utils/image_utils.dart (1009B)


 1import 'dart:math';
 2import 'dart:ui';
 3
 4// Extension to normalize Rect
 5extension RectNormalize on Rect {
 6  Rect normalize() {
 7    return Rect.fromLTRB(
 8      left < right ? left : right,
 9      top < bottom ? top : bottom,
10      left < right ? right : left,
11      top < bottom ? bottom : top,
12    );
13  }
14}
15
16List<double> l2Normalize(List<double> vec) {
17  double sum = vec.fold(0, (p, c) => p + c * c);
18  double norm = sqrt(sum);
19  if (norm == 0) return vec;
20  return vec.map((v) => v / norm).toList();
21}
22
23double dotProduct(List<double> a, List<double> b) {
24  double sum = 0;
25  // Ensure lengths match to avoid range errors
26  int len = min(a.length, b.length);
27  for (int i = 0; i < len; i++) {
28    sum += a[i] * b[i];
29  }
30  return sum;
31}
32
33double cosineSim(List<double> a, List<double> b) {
34  double dot = 0.0, nA = 0.0, nB = 0.0;
35  for (int i = 0; i < a.length; i++) {
36    dot += a[i] * b[i];
37    nA += a[i] * a[i];
38    nB += b[i] * b[i];
39  }
40  return (nA == 0 || nB == 0) ? 0.0 : dot / (sqrt(nA) * sqrt(nB));
41}