【发布时间】:2019-01-10 12:51:09
【问题描述】:
我有大量的点想要在脚本中从一个屏幕/监视器转换到另一个。
屏幕 A - 2880x1800 分辨率
屏幕 B - 1280x1024 分辨率
• 黑匣子:屏幕/监视器。
• 绿色框:屏幕的一部分,所有点都将从 C(a) 转换为 C(b)。
绿色框是两个屏幕上纵横比均为 16:9 的视频源。我实际上不确定这个绿色框是否重要,但我将其包括在内是为了显示我正在尝试做的事情。
到目前为止,我已经尝试关注this post,这似乎可以很好地转换 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_New 计算的 Y 值肯定太低而无法正确。计算Y_New的正确方法是什么?
【问题讨论】:
标签: geometry transformation resolution scaling coordinate-transformation