Я пытаюсь преобразовать координату из одной системы координат в другую, чтобы нарисовать ее на изображении.
В основном система координат назначения выглядит следующим образом:
X range: 0 to 1066
Y range: 0 to 1600
(просто стандартное изображение, которое я рисую размером 1066 x 1600)
Позиция, которую я пытаюсь нарисовать на изображении, имеет точно такой же размер, но система координат отличается. Диапазон всех координат составляет 1066x1600.
Но пример с координатами:
(111.33f, 1408.41f)
(-212.87f, 1225.16f)
Диапазон этой системы координат:
X range: -533.333 to 533.333
Y range: 533.333 to 2133.333
Я чувствую, что это ОЧЕНЬ простая математика, но по какой-то причине я не понимаю.
Как я могу преобразовать предоставленные координаты в первую систему координат?
2d
coordinates
Geesu
источник
источник
Ответы:
Вы можете нормализовать первое значение, это даст вам значение в диапазоне [0,1]. Вы можете думать об этом как о проценте Х, процентном значении, которое соответствует значению между минимальным и максимальным значениями. Затем вы можете найти, где этот процент принадлежит в вашей системе координат назначения, посмотрев, какое значение составляет X процентов через систему назначения. Я буду использовать Java-код в качестве примера языка, я уверен, что концепции достаточно ясны для перевода на любой язык.
Так что нормализуйте
Используя ваш пример, вы должны ввести:
Затем найдите, где он лежит в системе назначения. С чем-то вроде
Или использовать ваши ценности:
Так, например, со значением x, равным 1000, вы должны сопоставить его с вашей системой координат назначения
467.29
.В качестве альтернативы , если системы координат всегда будут одинаковыми, вы можете предварительно рассчитать соотношение между ними.
Так:
источник
Это простая математика:
src - исходная система координат
res - система координации результатов
Редактировать - объяснение математики
( src - src_min ) / ( src_max - src_min )
переводит его в систему координат, начинающуюся с нуля с равной длиной исходной системы координат(0.0, src_max - src_min )
. Затем он масштабирует значение в систему координат(0.0, 1.0)
.* ( res_max - res_min )
это масштабирует значение до системы координат, начинающейся с нуля с длиной системы координат результата(0.0, dst_max - dst_min)
+ res_min
переводит значение в результирующую систему координат(dst_min, dst_max)
источник
Основное уравнение для преобразования 2D-координат (в алгебре, без вращения):
заданы две точки в TargetCoordinate (T1, T2), которые соответствуют двум точкам в SourceCoordinate (S1, S2)
TranslateFactor
иScalingFactor
даны путем решения:какой результат:
В вашем случае для координаты х
И поэтому,
координату у следуйте той же процедуре
источник
Делая несколько предположений:
Тогда вопрос переносится на: Какова матрица однородного преобразования для моего изменения базиса?
Чтобы ответить на этот вопрос, нам нужны ответы на три дополнительных вопроса:
Определите ответы на эти три вопроса следующим образом:
Тогда матрица однородного преобразования имеет вид:
Мое соглашение здесь состоит в том, что точки представлены векторами строк, что является обычным соглашением компьютерной графики; математики и физики часто используют противоположное.
источник