У меня есть большая коллекция точек, которые я хочу преобразовать с одного экрана / монитора в другой в сценарии.
Экран A - разрешение 2880x1800
Экран B - разрешение 1280x1024
• Черный ящик: экран / монитор.
• Зеленая рамка: часть экрана, где все точки будут преобразованы из C (a) в C (b).
Зеленый прямоугольник - это видео с соотношением сторон 16: 9 на обоих экранах. На самом деле я не уверен, что этот зеленый прямоугольник имеет значение, но я включил его, чтобы показать, что я пытаюсь сделать.
До сих пор я пытался следовать этому посту , который, кажется, отлично работает для преобразования значений x:
Rectangle Old
NW coordinate - (X0_Old, Y0_Old)
SE coordinate - (X1_Old, Y1_Old)
Rectangle New
NW coordinate - (X0_New, Y0_New)
SE coordinate - (X1_New, Y1_New)
X_New = X0_New + (X_Old - X0_Old) * X_Coeff
X_New = 0 + (X_Old - 0 ) * X_Coeff
where
X_Coeff = (X1_New - X0_New) / (X1_Old - X0_Old)
X_Coeff = (1280 - 0 ) / (2880 - 0 )
X_New = (X_Old)*(1280/2880)
Это X_New
не было идеальным, но по какой-то причине этот был:
X_New = 2*(X_Old)*(1280/2880)
Может быть, это из-за какого-то масштабирования? Координаты X работали, поэтому я не стал задавать вопросы и пошел дальше.
Моя проблема возникла, когда я попытался преобразовать координаты Y:
Y_New = Y0_New + (Y_Old - Y0_Old) * Y_Coeff
Y_Coeff = (Y1_New - Y0_New) / (Y1_Old - Y0_Old)
Y_New = Y0_New + (Y_Old - Y0_Old) * Y_Coeff
Y_New = 0 + (Y_Old - 136 ) * Y_Coeff
where
Y_Coeff = (Y1_New - Y0_New) / (Y1_Old - Y0_Old)
Y_Coeff = ( 720 - 174 ) / (1620 - 136)
Y_Coeff = 546/1484
Y_New = (Y_Old - 136) * (546/1484)
Значения Y, рассчитанные с помощью Y_New
, определенно слишком малы, чтобы быть правильными. Как правильно рассчитать Y_New
?