【问题标题】:Convert X Coordinate from one Resolution to another将 X 坐标从一种分辨率转换为另一种分辨率
【发布时间】:2018-01-22 20:30:27
【问题描述】:

通常我会这样做以从一种分辨率转换为另一种分辨率:

int newX = (x / oldResolutionX) * newResolutionX;

但这一次我不能使用它,我无法理解数学(从来没有真正擅长数学,请原谅我)。无论如何,我的分辨率是 1280x720,我想将像 (720/360) 这样的点转换为: Picture of new Resolution

宽度是 854,高度是 720,所以我不必对 y 坐标进行转换。但这是(对我而言)棘手的部分:0 不是实际的 0。X 从 -107 开始,到 747 结束。你们能向我解释一下如何将(720/360)从 1280x720 转换为这个分辨率吗?在此先感谢,抱歉数学不好...

【问题讨论】:

  • 如果有 107 或 747 的偏移量,那么只需添加这些..
  • 那么,您只需要一个从 [-107...747] 到 [0...1280] 的 X 映射?
  • @JesperJuhl (720 / 1280) * 854 + 107 = 587.375,但应该是 320。或者我不明白你所说的偏移量是什么意思
  • @Stefan 是的._.
  • 其实很简单。假设我们有y,我们需要映射到一个新的值x,然后:x = (y - ymin) / (ymax - ymin) * (xmax - xmin) + xmin。在你的情况下ymin = -107, ymax = 747xmin = 0, xmax = 1280

标签: c++


【解决方案1】:

因此,您需要一个从 [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: (1280/1280) * 854 = 854: 结果将是 747

一些备注:

  • .0 用于强制浮点类型。
  • (int) 是将其转换回整数

【讨论】:

  • 不适合我,如果我试图获得两个分辨率的中间:printf("X.1: %i - X.2: %i\n", 320, cX1(640)); 它返回X.1: 320 - X.2: 1119
  • 我不确定我是否理解:图像,宽度为 [-107...747];一半的坐标是320((320 + 107) / 854) x 1280 = 640: 目标分辨率的一半
  • 我有一个 1280x720 的屏幕,我必须将其转换为 854x720。我的屏幕中间是(640/360),另一件事是(320/360)。第二个屏幕基本上是 640x720,但他们在 x 坐标的两端添加了 107。 x 的 SO 中心是 320,但它从 -107 到 747
  • 啊,比它的逆XD..等等
  • 是的!谢谢你:)
猜你喜欢
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多