2017-08-14 83 views
1

通常我会做这从一个分辨率转换成另:转换X从一个分辨率坐标到另一个

int newX = (x/oldResolutionX) * newResolutionX; 

但这次我不能使用它,我不能让我的头周围的数学(从未真正擅长数学,请原谅我)。不管怎么说,我的分辨率为1280x720,我想转换像(三百六分之七百二十○)点到此: Picture of new Resolution

宽度为854,高度为720,所以我不必对Y做转换坐标。但这里是(对我来说)棘手的部分:0不是实际的0. X开始于-107,结束于747.你们可以向我解释我如何将1280x720转换(720/360)到这个分辨率?提前致谢,并对数学不好...

+0

如果有一个107或747偏移,则只需添加那些.. –

+0

所以,你需要从只是一个X映射[-107 ... 747]到[0 ... 1280]? – Stefan

+0

@JesperJuhl(720/1280)* 854 + 107 = 587.375,但应该是320.或者我不明白你的意思是抵消 – SupaDupa

回答

0

所以,你需要一个从[0 ... 1280]到[-107 ... 747]的线性映射,使y保持不变。

int newX = (int)((x/1280.0) * 854.0) -107 

那么,这里发生了什么?

  • x将变化0 1280
  • 之间和如果x == 0:(0/1280)* 854将是0,并且结果等于-107。
  • 如果x == 1280:(一千二百八十零分之一千二百八十零)* 854 = 854:其结果将是747

一些说明:

  • .0用于强制一个浮点型。
  • (int)是将它转换回一个整数
+0

对我而言,如果我尝试获得两个分辨率的中间值,那么对我来说不起作用:'printf(“X.1:%i - X.2:%i \ n”,320,cX1(640));'it返回'X.1:320 - X.2:1119' – SupaDupa

+0

我不确定我是否理解:图像宽度[-107 ... 747];坐标的一半将是'320'。 '((320 + 107)/ 854)x 1280 = 640':目标分辨率的一半 – Stefan

+0

我有一个1280x720屏幕,我必须将其转换为854x720。我的屏幕上的中间是(640/360),而另一件事是(320/360)。第二个屏幕基本上是640x720,但它们在x坐标的两端添加了107。 SO中心的x是320,但它从-107到747 – SupaDupa

相关问题