Geometry 在两个屏幕之间转换点
我有大量的点,我想在脚本中从一个屏幕/监视器转换到另一个屏幕/监视器 屏幕A-2880x1800分辨率Geometry 在两个屏幕之间转换点,geometry,transformation,resolution,scaling,coordinate-transformation,Geometry,Transformation,Resolution,Scaling,Coordinate Transformation,我有大量的点,我想在脚本中从一个屏幕/监视器转换到另一个屏幕/监视器 屏幕A-2880x1800分辨率 屏幕B-1280x1024分辨率 •黑匣子:屏幕/监视器。 •绿色框:屏幕的一部分,其中所有点将从C(a)转换为C(b) 绿色框是两个屏幕上宽高比为16:9的视频馈送。我不确定这个绿框是否重要,但我把它包括进来是为了展示我在做什么 到目前为止,我已经尝试了以下方法,这似乎可以很好地转换x值: Rectangle Old NW coordinate - (X0_Old, Y0_Old) SE
屏幕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=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\u New
计算的Y值肯定太低而不正确。正确的计算方法是什么?毫无疑问,公式X\u New=(X\u Old)*(1280/2880)
是正确的-它将0转换为0,2880转换为1280,1440转换为640。也许你真的有某种规模
关于Y-在这种情况下(受X轴限制),您也应该使用相同的系数X_Coeff
但我可以看到,第二个屏幕上的16x9矩形大小为1280x720,带有高度为152的空条纹,而第一个屏幕的大小为2880x1620,带有高度为90的空条纹
Y_New = 152 + (Y_Old - 90) * X_Coeff
在一般情况下,根据屏幕和视频大小矩形之间的比例,必须选择
X_系数
或Y_系数
。。至于X_新的倍增,我使用的应用程序只有将坐标减半才能准确,所以我必须开始使用应用程序中的值进行计算-因此倍增。