Я публикую свой ответ как ответ, потому что у меня недостаточно очков, чтобы оставить комментарий.
Моя интерпретация вопроса: Как нам нормализовать координаты набора точек в 2-мерном пространстве?
Операция нормализации включает «сдвиг и масштаб» . В случае 1-мерного пространства это довольно просто и интуитивно понятно (как указал @Mizipzor).
normalizedX=(originalX-minX)/(maxX-minX)
В этом случае мы сначала смещаем значение на расстояние minX , а затем масштабируем его на диапазон, заданный ( Maxx-Minx) . Операция shift гарантирует, что минимум перемещается к 0, а операция scale сжимает распределение так, что распределение имеет верхний предел 1
В случае 2d простого деления на наибольшее измерение не достаточно. Почему?
Рассмотрим упрощенный случай с двумя точками, как показано ниже.
Максимальным значением любого измерения является Y значение точки B и это 10000 .
Coordinates of normalized A=>5000/10000,8000/10000 ,i.e 0.5,0.8
Coordinates of normalized A=>7000/10000,10000/10000 ,i.e 0.7,1.0
Все значения X и Y равны 0 и 1. Однако распределение нормализованных значений далеко не равномерно. Минимальное значение составляет всего 0,5. В идеале это должно быть ближе к 0.
Предпочтительный подход для нормализации 2d координат
Чтобы получить более равномерное распределение, мы должны выполнить операцию «сдвига» вокруг минимума всех значений X и минимума всех значений Y. Это может быть сделано также относительно среднего значения X и среднего значения Y. Учитывая приведенный выше пример,
- минимум всех X составляет 5000
- минимум всех Y составляет 8000
Шаг 1 - Сдвиг
A=>(5000-5000,8000-8000), i.e (0,0)
B=>(7000-5000,10000-8000), i.e. (2000,2000)
Шаг 2 - операция масштабирования
Чтобы уменьшить значения, нам нужен максимум. Мы могли бы использовать диагональ AB, длина которой 2000
A=>(0/2000,0/2000), i.e. (0,0)
B=>(2000/2000,2000/2000)i.e. (1,1)
Что происходит, когда очков больше 2?
Подход остается схожим. Мы находим координаты наименьшего ограничивающего прямоугольника, который соответствует всем точкам.
- Находим минимальное значение X (MinX) и минимальное значение Y (MinY) из всех точек и выполняем операцию shift . Это меняет начало координат на левый нижний угол ограничительной рамки.
- Находим максимальное значение X (MaxX) и максимальное значение Y (MaxY) из всех точек.
- Мы вычисляем длину диагонального соединения (MinX, MinY) и (MaxX, MaxY) и используем это значение для выполнения операции scale .
.
length of diagonal=sqrt((maxX-minX)*(maxX-minX) + (maxY-minY)*(maxY-minY))
normalized X = (originalX - minX)/(length of diagonal)
normalized Y = (originalY - minY)/(length of diagonal)
Как изменится эта логика, если у нас более двух измерений?
Концепция остается прежней.
- Находим минимальное значение в каждом из измерений (X, Y, Z)
- Находим максимальное значение в каждом из измерений (X, Y, Z)
- вычислить длину диагонали как коэффициент масштабирования
- Используйте минимальные значения для смещения начала координат.
length of diagonal=sqrt((maxX-minX)*(maxX-minX)+(maxY-minY)*(maxY-minY)+(maxZ-minZ)*(maxZ-minZ))
normalized X = (originalX - minX)/(length of diagonal)
normalized Y = (originalY - minY)/(length of diagonal)
normalized Z = (originalZ - minZ)/(length of diagonal)