在 2D 矢量中的预定位置更改多个值的最简单方法是啥?

Posted

技术标签:

【中文标题】在 2D 矢量中的预定位置更改多个值的最简单方法是啥?【英文标题】:Whats the easiest way to change several values at predetermined locations in a 2D vector?在 2D 矢量中的预定位置更改多个值的最简单方法是什么? 【发布时间】:2013-03-12 22:25:18 【问题描述】:

好的,所以我有一个二维的字符向量,我称之为网格。让我们说它的 70 x 30。创建网格时,它会自动用 'x' 填充每个位置

我有一个显示网格的函数。所以我调用了这个函数,控制台上会显示一个 70x30 的 x 网格。

我有另一个函数,我想调用它来用不同的字符替换网格的某些 x,y 坐标处的字符。这些点并不是完全随机/分散的。我基本上是从网格边缘的一个点开始,将锯齿线绘制到另一个边缘。所有点都是预先确定的。要绘制的点很多,所以手动绘制似乎效率低下。

这是我的想法:

创建一个双循环,宽度和高度,分别称为 i 和 j 如果 i = (a || b || c || d...) && j = (e || f || g..)

并且基本上为每个可能的场景做那个乏味的过程.. 当然有一个更简单,更简单的方法哈哈。任何建议将不胜感激。谢谢!

【问题讨论】:

您总是可以使用一维数组并对其进行二维索引。 您似乎在网格上有一个坐标列表要替换。您为什么不直接浏览该列表并仅索引您需要替换的单元格? 【参考方案1】:

如果可以通过地图预先确定点(如在关卡编辑器或其他固定模式中),则制作一个 x/y 坐标字典来表示图块的位置。遍历字典并进行每次替换。

如果点不是预先确定的,而是遵循一种模式,例如线条或斑点,那么编写一个方法来绘制线条/斑点/任何东西并一遍又一遍地调用它。该方法决定替换哪些图块并替换它们。

顺便说一句,在进行这样的 2D 检查和处理时有一个技巧,称为“delta”,例如 xdelta=-1, ydelta=0 是西,xdelta=1, ydelta=1 是东北。通过使用 delta,您可以使用不同的 delta 运行一个函数两次、四次或八次,并且只需使用 delta 的方向,它就会在不同的方向上移动,而无需自己尝试所有八个方向 - 也可以使用 delta如果您愿意,可以进行边界检查,因为例如,您不能在没有前进的方向上越界。然后你可以更进一步,枚举所有方向,反转方向的函数,将方向旋转 90/45 度(如果枚举它非常简单,你只需在枚举中添加 2 或 1 并返回新方向)等,现在使处理变得非常容易。

所以我可能有类似的东西

function drawLine(int xstart, int ystart, int xdelta, intydelta)

从 xstart,ystart 开始,用 O 替换 tile,将 xdelta 添加到 x,将 ydelta 添加到 y,用 O 替换 tile,等等,直到它掉出边缘。

【讨论】:

以上是关于在 2D 矢量中的预定位置更改多个值的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

用于多个开始和停止值的矢量化 NumPy linspace

使用纵横比旋转2D矢量

检查 VB.net 的 DataTable 中是不是存在值的最简单/最快的方法?

使用Numpy以矢量化方式检索多个值的索引

在视图中访问 Phalcon 配置值的最简单方法是啥?

设置整个数组的值的最简单方法是啥?