【问题标题】:Given grid coordinates, how can I determine the center point of a cell which they fall within?给定网格坐标,我如何确定它们所在的单元格的中心点?
【发布时间】:2011-04-02 20:29:20
【问题描述】:

我正在使用适用于 iPhone 的 Appcelerator Titanium 开发一个简单的棋盘游戏(javascript - 这对这个问题并不重要)。

我的问题实际上并不是特定于语言的,它更多的是一般的编程和数学问题。

我有一个 10 列 x 10 行(100 个单元格)的“单元格”网格。这是一个棋盘游戏,就像跳棋/选秀一样。

从顶部开始向下移动,行标记为“A”到“J”

从左到右,列标记为“0”到“9”

每个单元格为 32x32(像素)。

我可以将标记拖到网格上/上方,当我释放时,它会向我报告我释放位置的 x/y 坐标,例如:124,302。我可以在变量中使用这些坐标。

所以我的问题是,如何确定我释放的单元格的中心点,以便我可以在该单元格中居中标记?

关于如何做到这一点的任何想法?

【问题讨论】:

  • 在这些情况下,我经常发现在网格中查找单元格的坐标而不是屏幕上的坐标很有用。它使游戏逻辑更简单,屏幕坐标可以很容易地从网格坐标中计算出来。
  • @fizban,我同意。接下来我需要弄清楚。

标签: language-agnostic math geometry appcelerator


【解决方案1】:

使用整数除法“四舍五入”原始坐标。

x = (x / 32) * 32 + 16;
y = (y / 32) * 32 + 16;

因为数字是 2 的幂,所以也可以使用位运算。

x = (x & ~0x1F) | 0x10;

【讨论】:

  • 是的,这就是我的想法。 :)
  • 谢谢,这是我在纸上的方向。我刚刚尝试了您的第一个“四舍五入”方法,但没有得到预期的结果。例如,取坐标 10,10。那显然应该在第一个框中,第一个框的中心是 16,16。但是,如果我们对 10,10 进行数学计算,我们最终会得到 26,26。除非我做错了什么。
  • Kook,方程是正确的,但当且仅当 X 和 Y 是整数并且整数除法向下舍入(在大多数语言中都是如此)。
  • @k00k - 是的,大多数语言都支持“整数”除法,其中整数除法将向零舍入。所以,10 / 32 产生 0,然后0 * 32 也是 0,最后0 + 16 产生 16。
  • 啊,这是一个 JavaScript 问题。在 javascript 中,我需要使用 Math.floor(x /32) * 32 + 16; @erickson 的位操作正如他所概述的那样在 javascript 中工作。
猜你喜欢
  • 1970-01-01
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
相关资源
最近更新 更多