Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在ds_grid中旋转GMS2 90度

在ds_grid中旋转GMS2 90度
EN

Game Development用户
提问于 2018-04-03 05:06:31
回答 1查看 436关注 0票数 0

我需要一个函数,它允许我顺时针旋转网格数据结构,任意次数90度。目前,该函数似乎对ds_grid没有任何影响。

下面是我目前使用的代码,调用它的函数是:ds_grid_rotate_alt(global.grid, irandom(3), 10);

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// @description rotate grid clockwise 90 degrees x times

var grid = argument0;
var turns = argument1;
var width = argument2;

var gx = 0;
var gy = 0;

if turns > 0
{
    var grid_copy = ds_grid_create(width, width);

    for (gy = 0; gx < width; gy++)
    {
        for (gx = 0; gx < width; gx++)
        {
            //grid copy 
            var data = ds_grid_get(grid,gx,gy);
            ds_grid_set(grid_copy,width-gy,width-gx,data);
        }
    }
    //copy results back to origional grid
    ds_grid_copy(grid_copy,grid);
    ds_grid_destroy(grid_copy);

    turns -= 1;
    ds_grid_rotate_alt(grid,turns,width);
}
EN

回答 1

Game Development用户

回答已采纳

发布于 2018-04-03 07:57:05

如注释所示,您必须更改ds_grid_copy()函数的参数,因为它没有保存您的计算。

看一看您的代码,我想出了一个函数,它可以实现您想要的功能,并且可以线性工作,而不需要(不必要的)递归。

由于ds_grids基本上是矩阵,所以我们可以用数学来处理它们。您的函数使用width作为矩阵大小,因此假设它是方阵是安全的。设A是一个4x4方阵,我们想顺时针旋转它90度,这样的旋转与第一次转置,然后水平翻转矩阵是一样的:

你可以用方形纸板试一试,结果是一样的。对此有一个正式的解释,但我们对实现感兴趣。

另外,每四次旋转,我们就开始配置( 360度旋转等于根本不旋转),所以我们可以考虑变量turns和4的模数,而不是重复执行不必要的旋转,从而节省有用的CPU时间。

所以,现在我们只考虑三种不同的旋转:顺时针90度、180度和270度。我们可以做另一个考虑:为什么顺时针旋转三次,如果我们只能顺时针旋转一次呢?数学对我们有帮助,因为如果我们在换位前水平翻转,结果是我们逆时针旋转90度,因此顺时针旋转270度:

最后,180度旋转是相同的,无论是CW还是CCW。我们可以说我们两次旋转90度,实际上180度的旋转等于水平和垂直的翻转,而不考虑转换的顺序:

唯一涉及的操作是换位,水平和垂直翻转,我们只是结合他们,以得到我们想要的旋转。我们可以创建三个单独的函数,并根据需要执行它们,但我们仍然可以脱机完成一些工作,并创建一个同时执行两个转换的单个函数。

换位通过交换起始坐标将给定单元格中的值移动到目标单元格。

变位 AU,V→AV,u

翻转涉及从行或列的末尾倒转坐标(W是最大宽度,H是最大高度)。

水平翻转 AU,V→AW-(u+1),V垂直翻转 AU,V→AU,H-(v+1)

我们将换位和翻转结合起来,使旋转达到90度(注意,我去掉了括号,相应地改变了符号):

换位,然后是霍尔。翻转(90°CW) AU,V→AW-v-1,u Hor。翻转,然后换位(270°CW - 90°CCW) AU,V→AV,W-u-1

最后,180度旋转:

霍尔。翻转,然后是弗特。翻转或反之亦然(180°CW/CCW) AU,V→AW-u-1,H-v-1

现在,您可以使用这些伪代码赋值在一个步骤中创建旋转矩阵,而无需任何不必要的迭代或递归。

票数 2
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/157086

复制
相关文章
import tensorflow 报错 as tf ImportError: DLL load failed
安装tensorflow时安装了好几次才成功,装着装着就断了,目前还没搞清楚原因, 不过最终还是成功了,这个方法是可行的 ,另外一台机子win7系统一次pip就成功了
诡途
2022/05/09
1K0
import tensorflow 报错 as tf ImportError: DLL load failed
TensorFlow2学习——tf.data模块
tf.data.Dataset:表示一系列元素,其中每个元素包含一个或多个 Tensor 对象。例如,在图片管道中,一个元素可能是单个训练样本,具有一对表示图片数据和标签的张量。可以通过两种不同的方式来创建数据集。 直接从 Tensor 创建 Dataset(例如 Dataset.from_tensor_slices());当然 Numpy 也是可以的,TensorFlow 会自动将其转换为 Tensor。 通过对一个或多个 tf.data.Dataset 对象来使用变换(例如 Dataset.batch())来创建 Dataset 已知文件名称和标签,用data保存每一个文件的地址,用label保存每一文件对应的标签。data和label都是列表,形式如 data = [‘xxxx.jpg’,‘qqqq.jpg’,…]; label = [0,2,3,4,1,…]
Albert_xiong
2021/06/21
5150
安装tensorflow时候报错ImportError: DLL load failed: 找不到指定的模块。Failed to load the native TensorFlow runtime.
解决方法:降低tensorflow版本,版本太高。在terminal复制粘贴以下命令:
川川菜鸟
2021/10/18
1.4K0
TF新工具AutoGraph:将Python转换为TensorFlow图
我们在这里向你介绍一个名为“AutoGraph”的TensorFlow新功能。AutoGraph将Python代码(包括控制流print()和其他Python原生特性)转换为纯的TensorFlow图代码。
AiTechYun
2018/07/27
7540
TF新工具AutoGraph:将Python转换为TensorFlow图
Tensorflow:tf.train.SyncReplicasOptimizer
Class to synchronize, aggregate gradients and pass them to the optimizer.
ke1th
2019/05/26
1.2K0
tensorflow: tf.assign探究
  Defined in tensorflow/python/ops/state_ops.py.
JNingWei
2018/09/28
9030
tensorflow: tf.reshape探究
  给定一个tensor,这个操作会返回一个有着跟原tensor一样的值且经过shape重塑过的张量。
JNingWei
2018/09/28
6080
DeepMind开源Sonnet:可在TensorFlow中快速构建神经网络
选自DeepMind 作者:Malcolm Reynolds等 机器之心编译 参与:李泽南、Ellen Han 昨天,DeepMind 发布了 Sonnet,一个在 TensorFlow 之上用于构建复杂神经网络的开源库。这是继 DeepMind Lab 后,这家谷歌旗下的公司的又一次开源举措。Sonnet 的开源意味着 DeepMind 构建的模型可以更轻松地与所有开发者共享。 距 DeepMind 做出决定,在整个研究机构中使用 TensorFlow(TF) 已将近一年。事实证明这是一个明智的选择——较
机器之心
2018/05/07
1.3K0
DeepMind开源Sonnet:可在TensorFlow中快速构建神经网络
Tensorflow 源码安装成功,导入报错 ImportError: cannot import name 'build_info'
ImportError: cannot import name ‘build_info’
用户1148525
2019/05/26
4.6K0
解决ImportError: cannot import name 'pywrap_tensorflow'
在使用 TensorFlow 进行开发和训练深度学习模型时,有时候可能会遇到 ​​ImportError: cannot import name 'pywrap_tensorflow'​​ 这个错误。这个错误通常是由于 TensorFlow 版本不兼容或没有正确安装所引起的。本文将介绍如何解决这个错误。
大盘鸡拌面
2023/10/20
6890
tensorflow模块安装
有时候,我们的电脑上或许会同时安装多个python的环境,譬如,我的电脑上同时装了anaconda2和3。
全栈程序员站长
2022/07/09
7030
TensorFlow 推出 TensorFlow 图神经网络 (TF-GNN)
在现实世界和工程系统中,图形无处不在。图是实体集合的表示,例如对象、地点或人,以及它们之间的关系。在机器学习问题中看到的数据通常是结构化的或相关的,因此可以表示为图形。
代码医生工作室
2021/12/01
1.3K0
TensorFlow 推出 TensorFlow 图神经网络 (TF-GNN)
解决module = loader.load_module(fullname) ImportError: DLL load failed: 找不到指定的模块。
在使用Python时,有时可能遇到​​ImportError: DLL load failed: 找不到指定的模块​​错误。这个错误通常是由于无法找到依赖的动态链接库(DLL)文件引起的。本篇文章将介绍一些解决这个问题的方法。
大盘鸡拌面
2023/10/25
1.9K0
Tensorflow学习之tf.maximum()
1、返回最大值 maximum( x, y, name=None ) 2、 返回 x 和 y 的最大值(即表达式:x > y ? x : y). 注意:Maximum 支持广播. 参数: x:
狼啸风云
2020/12/29
1.3K0
tf44:tensorflow CRF的使用
版权声明:本文为博主原创文章,未经博主允许不得转载。有问题可以加微信:lp9628(注明CSDN)。 https://blog.csdn.net/u014365862/article/details/81298373
MachineLP
2019/05/26
1.8K0
tensorflow: tf.add_to_collection 探究
  查看源代码 tensorflow/python/framework/ops.py:
JNingWei
2018/09/28
7000
TensorFlow - TF-Slim 使用总览
虽然这里是采用 TF-Slim 处理图像分类问题,还需要安装 TF-Slim 图像模型库 tensorflow/models/research/slim. 假设该库的安装路径为 TF_MODELS. 添加 TF_MODELS/research/slim 到 python path.
狼啸风云
2019/07/08
2.9K0
tensorflow语法【tf.concat()详解】
【一】tensorflow安装、常用python镜像源、tensorflow 深度学习强化学习教学
汀丶人工智能
2022/12/01
1.6K0
tensorflow语法【tf.concat()详解】
ImportError: cannot import name ‘audio_ops‘ (TensorFlow)
tensorflow 报错: from tensorflow.python.framework import ops as tf_ops
狼啸风云
2020/12/21
8540
ImportError: cannot import name ‘audio_ops‘ (TensorFlow)
点击加载更多

相似问题

ImportError:没有名为tensorflow的模块

201

ImportError:没有名为“tensorflow”的模块

12

(Tensorflow Flow安装) ImportError:没有名为tensorflow的模块

14

tensorflow安装问题:ImportError:没有名为tensorflow的模块

32

ImportError:没有名为tensorflow的模块-无法安装Tensorflow

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文