Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Geometry 在两个屏幕之间转换点_Geometry_Transformation_Resolution_Scaling_Coordinate Transformation - Fatal编程技术网

Geometry 在两个屏幕之间转换点

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

我有大量的点,我想在脚本中从一个屏幕/监视器转换到另一个屏幕/监视器

屏幕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=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_新的倍增,我使用的应用程序只有将坐标减半才能准确,所以我必须开始使用应用程序中的值进行计算-因此倍增。