Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >移动立方体的效率-你可以减少3/4r的边计算?

移动立方体的效率-你可以减少3/4r的边计算?
EN

Stack Overflow用户
提问于 2013-04-17 09:00:41
回答 3查看 2.6K关注 0票数 3

正常行进立方体为每个立方体找到12条边,但您可以对每个立方体执行3条边,将边保存在数组中,然后再次遍历立方体,引用相邻立方体的边,而不是计算它们。

引用相邻立方体的过程在互联网上没有明确讨论,因此欢迎任何使用行进立方体的人来帮助找到解决方案的细节。你已经知道一个实现了吗?

这张图显示了每个立方体需要的3条黄色边,而不是12条边。

编辑-我刚刚找到了这个解决方案,尽管它只是其中的一部分:

想象有3条边来自立方体的角落,坐标最低。那么所有其他边只属于其他立方体。如果我们的立方体有坐标(x,y,z),那么相邻的钻孔立方体就有坐标(x+1,y,z),(x,y+1,z),(x,y,z+1),(x+1,y+1,z),(x+1,y,z+1),(x,y+1,z+1)。你可以把边想象成一个向量。然后立方体的角点有边(1,0,0),(0,1,0),(0,0,1)。具有坐标(x+1,y,z)的立方体具有属于我们的立方体的边(0,1,0)和(0,0,1)。立方体(x+1,y+1,z)只有一条属于我们的立方体的边(0,0,1)。因此,如果你为立方体存储了4个元素,你可以像这样访问它们:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
edge1 = cube[x][y][z][0];
edge2 = cube[x][y][z][1];
edge3 = cube[x][y][z][2];
edge4 = cube[x+1][y][z][1];
edge5 = cube[x+1][y][z][2];
edge6 = cube[x][y+1][z][0];
edge7 = cube[x][y+1][z][2];
edge8 = cube[x][y][z+1][0];
edge9 = cube[x][y][z+1][1];
edge10 = cube[x+1][y+1][z][2];
edge11 = cube[x+1][y][z+1][1];
edge12 = cube[x][y+1][z+1][0];

现在,edge7连接了哪些点?答案是(x,y+1,z)和(x,y+1,z)+(0,0,1)=(x,y+1,z+1)。

现在,edge7连接哪些多维数据集?这更难。我们看到坐标z是沿着边变化的,这意味着我们的立方体有相同的z坐标。现在所有其他的坐标都改变了。在我们有+1的地方,立方体有很大的坐标。在我们有+0的地方,立方体的坐标更小。所以边连接了立方体(x,y,z)和(x-1,y+1,z)。具有相同边的另外两个立方体是(x,y+1,z)和(x-1,y,z)。

-==--=-=--=-

EDIT2-所以我正在做这件事,并不是那么简单。我有一个循环,它同时计算8个点,12条边,边的插值,位值和一个顶点边的值,所有这些都在一个循环中。

所以我在它之前做了一个新的循环,以计算尽可能多的内容,并将其放在数组中,以便在复杂的循环中使用。

我可以在数组中沿着边回收交叉点的插值值,尽管我将不得不在复杂的循环中重新计算所有点,因为我用来决定位号的点的值引用了顶点表格中的值。这让我很困惑!我想,一旦我有了边交叉值,我就可以直接使用这些值来获得三角表,而不必重新计算这些点!

事实上,没有。无论如何,这是另一个已经做过的人的信息,只要它是可读的!http://www.new-npac.org/projects/sv2all/sv2/vtk/patented/vtkImageMarchingCubes.cxx滚动到这一行:立方体负责他们最小面上的边缘。

EN

回答 3

Stack Overflow用户

发布于 2015-04-18 23:48:21

以您建议的方式减少边计算的一个简单方法是计算立方体,每次计算一个轴对齐的平面。

如果您将所有立方体及其边都保存在内存中,则只需计算一次边并通过索引查找相邻边将很容易。但是,由于空间要求,您通常不希望一次将所有立方体都保存在内存中。

一种解决方案是一次计算一个立方体平面。即,轴对齐的横截面,从一侧开始并向相反侧进行。然后,您只需要在内存中一次最多保留两个完整的立方体平面。在每个平面中移动时,可以参考上一个平面中的共享边和当前平面中以前计算的立方体。当你移动到下一个飞机时,你可以解除分配你不再需要的飞机。

编辑:本文将讨论如何按照我的建议进行编辑:http://alphanew.net/index.php?section=articles&site=marchoptim&lang=eng

票数 2
EN

Stack Overflow用户

发布于 2014-02-13 13:21:04

有趣的是,当我实现自己的my时,我想出了类似的解决方案。

当你开始使用MC时,你把它们当作一个不同的立方体,但如果你想获得高性能,你需要创建整个网格作为一个整体,在这里创建顶点索引等并不容易。当你想要添加平滑的逐顶点法线时,它变得更加有趣:)。

为了解决这个问题,我创建了一个简单的索引缓存机制来存储每个边的顶点索引。然后,对于每个计算的边,我有立方体位置x,y,z和边索引,我这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
For each axis:
    if the edge is on '+' side of axis:
        replace edge index with its '-' side sibling
        increment cube position along axis

这个简单的操作给出了正确的立方体位置和边缘索引0,1,2。然后,我通过简单的位循环从x,y,z,edgeIndex值计算出总的缓存索引。

当我有缓存索引时,我会检查它是否大于-1。如果是,那么在这条边上有一个已经计算过的顶点,我可以重用它。如果它是-1,我需要创建一个新的顶点并将其索引存储在缓存中。这样,您将只计算每个顶点一次,甚至可以添加包含顶点的每个三角形之间共享的法线值。

票数 1
EN

Stack Overflow用户

发布于 2020-11-02 14:03:02

是的,我想我做的和kolenda类似。我有一个结构,有5个int:(cube)index和4个vertexindices (A,B,C,D)。

对于最内部的循环(x),我只有lastXCache和nextXCache。在指向-x方向的4条边上,我询问lastXCache.A != -1,如果是,分配先前计算的值,依此类推。在+x方向,我将计算的顶点存储在nextXCache中。当立方体完成时: lastXCache = nextXCache;对于y和z方向,它需要是一个列表(可变数组的单位项),下一个y是下一行(所以大小),下一个z是下一个平面(所以大小*大小)

唯一的缺点是,它必须以这种方式连续地运行多维数据集。但是你可以并行计算不同的块。

另一种我认为可以更并行的方法是需要2次遍历: 1.计算每个立方体的3条边,当1条边完成时,-> 2.绘制三角形。

我真的不知道哪种方法更好,但它的实际工作方式似乎足够快。使用unity工作会更好。为1块/网格创建一个IJob。

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

https://stackoverflow.com/questions/16055829

复制
相关文章
这3个原则可以提高你的工作效率
做一件事情之前,最重要的是明白这件事情对你的意义有多大,这样你才有动力和意愿去付诸实践。这部分我们会聊聊为什么管理好工作任务,让你可以超过同龄人。
猴子数据分析
2022/12/12
3450
这3个原则可以提高你的工作效率
物联网中的边缘计算:提高网络效率以减少流量
企业对边缘计算越来越感兴趣,因为随着更多物联网设备的部署,企业需要快速分析和处理它们生成数据的方法。目标是消除将数据传输回云或内部数据中心的需要。
SDNLAB
2018/12/11
7980
物联网中的边缘计算:提高网络效率以减少流量
可以提高你Python效率的几个小函数!
这篇文章我们来看几个很有用的 Python 内置函数 。这些函数简直是屌爆了,我认为每个 Pythoner 都应该知道这些函数。
1480
2019/08/05
6830
边缘计算的云边协同
众所周知,边缘计算是将基础设施资源进行分布式部署再统一管理的。资源较为集中的称为“中心云”,资源量较少的部署点称为“边缘云”,并在边缘计算云平台中存在少数的中心云和多数的边缘云,因此如何进行平台的资源调度变成十分重要。
SDNLAB
2019/06/21
2.8K0
边缘计算的云边协同
边缘计算的云边协同
众所周知,边缘计算是将基础设施资源进行分布式部署再统一管理的。资源较为集中的称为“中心云”,资源量较少的部署点称为“边缘云”,并在边缘计算云平台中存在少数的中心云和多数的边缘云,因此如何进行平台的资源调度变成十分重要。
CloudBest
2019/08/02
2.3K0
如何让你的开发效率提升 3 倍?
编程大牛、《Java 编程思想》一书的作者 Bruce Eckel 曾说过:在这个领域做得越多,我越觉得软件开发比任何行业都更接近于写作。
非著名程序员
2018/09/29
7200
如何让你的开发效率提升 3 倍?
pandas减少数据内存使用率/提高计算效率方法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
MachineLP
2019/12/10
1.1K0
3个Tricks帮你提升你Debug Pytorch的效率
每一个深度学习项目都是不同的。不管你有多少经验,你总会遇到新的挑战和意想不到的行为。你在项目中运用的技巧和思维方式将决定你多快发现并解决这些阻碍成功的障碍。
石晓文
2020/11/09
1.3K0
3个Tricks帮你提升你Debug Pytorch的效率
3个Tricks帮你提升你Debug Pytorch的效率
每一个深度学习项目都是不同的。不管你有多少经验,你总会遇到新的挑战和意想不到的行为。你在项目中运用的技巧和思维方式将决定你多快发现并解决这些阻碍成功的障碍。
AI算法与图像处理
2020/11/06
8420
3个Tricks帮你提升你Debug Pytorch的效率
基于HTML的3D立方体相册下载
代码下载地址:https://download.csdn.net/download/qq_44273429/13996508
海拥
2021/08/23
7930
缓存架构,减少不必要的计算
互联网应用的主要挑战就是在高并发情况下,大量的用户请求到达应用系统服务器,造成巨大的计算压力。互联网应用的核心解决思路就是采用分布式架构,提供更多的服务器,从而提供更多的计算的资源,应对高并发带来的计算压力以及资源的消耗。
小马哥学JAVA
2023/02/27
5270
缓存架构,减少不必要的计算
提高你的编码效率
市面的编辑工具五花八门,简单的有sublime, notepad++, vim, Atom等,复杂的有webstorm, pycharm,eclipse, visual studio, Android studio, xcode等。 每个编辑器各有千秋。
赵云龙龙
2019/09/05
1.7K0
提高你的编码效率
前端开发中减少重复劳动,提升效率的方法
内容来源:2018 年 6 月 23 日,饿了么前端技术专家徐辛承在“饿了么技术沙龙・第27弹 【前端专场】”进行《中后台场景下的工具化和平台化实践》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。
IT大咖说
2018/09/12
2.2K0
面向能源效率的云计算
如今,云计算仍然是人们最为关注的技术趋势之一。企业和个人都体会到了实现云计算的好处,包括操作方便和节省成本,因此他们越来越多地选择云服务保持竞争力。 云计算在许多行业领域的应用已趋于稳定,规模较小公司也有机会使用,他们只需要为他们所使用的资源支付费用即可,他们需要功能强大的软件,而没有必要进行实质性的IT基础设施投资。云计算服务也可以让企业的使用规模自由扩展,以满足他们的需求,同时也可以调整自己的成本。 如果只着眼于云计算的能力,那么可能会让你忘记云计算技术所带来的环境效益。采用云计算可以为商业世界带来重要
静一
2018/03/26
8170
减少 try catch ,可以这样干!
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/05/17
8550
减少 try catch ,可以这样干!
减少云计算支出的五个简单的方法
无论企业刚刚开始使用公共云,还是企业一直以来在云计算支出方面每月都会收到一笔账单。企业研究如何获得云计算资源折扣和优惠是一个好主意。当有这么多节省成本的措施可用时,没有理由按照原来的标价支付费用(并且
静一
2018/06/08
9300
如何减少Exadata计算节点CPU的Core数量
最近为某客户做一个Exadata的PoC测试,要求是X8 1/8 rack配置,目前机器是1/4 rack的硬件。 OEDA配置时只选择了1/8 rack选项,其他都没有配置。但是在一键刷机时会发现跳过了计算节点的1/8 rack配置,只对存储节点进行了1/8 rack配置,如下:
Alfred Zhao
2021/06/10
1.3K0
Gboard的全新手写识别AI可以减少40%的错误
谷歌在Gboard中改进了手写识别功能,使用更快的AI系统,错误比其原来的机器学习模型少20%到40%。
AiTechYun
2019/05/13
9740
Gboard的全新手写识别AI可以减少40%的错误
Lombok,你的开发效率神器!
Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 代码的冗长,尤其是对于简单的 Java 对象(POJO),通过注解实现这一目的。
村雨遥
2020/10/23
3690
Lombok,你的开发效率神器!
CSS3 3D旋转立方体 原
主要用到动画css3  animation,特别注意当完成正方体的过程中,每个面旋转时这个面的坐标系是跟着变换的,只是他们的相对位置不变,默认的变换基点是(50% 50% 0),我们可以使用transform-origin改变默认基点,也可以按默认的基点来变换,关于rotateX或者rotateY旋转角度的正负区分,是视线在x轴或者Y轴的+方向向负方向看,如果是顺时针则角度为正值,逆时针为负值,下面是按默认基点实现立方体的。
tianyawhl
2019/04/04
1.2K0
CSS3 3D旋转立方体
                                                                            原

相似问题

3D立方体边重叠

114

3d立方体opengl -重叠边

13

立方体的边坐标

33

你如何监控你的Ruby编程效率?

30

将4边立方体转换为3面

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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