找回原来的 3d 立方体 ...c++

Posted

技术标签:

【中文标题】找回原来的 3d 立方体 ...c++【英文标题】:getting original 3d cube back ...c++ 【发布时间】:2014-08-25 09:30:39 【问题描述】:

给定一个 N*N*N* 维度的立方体。这个立方体的每个顶点都有一些数字。现在这个原始立方体被扭曲,使得(i,j,k)处的任何顶点上的数字被由(0,0,0)和(i,j,k)组成的立方体中所有数字的总和替换......现在之后失真..我们必须取回原来的立方体.. 假设原始立方体是 A,那么对于 B(i,j,k)(扭曲的)中的每个元素,我们使用以下代码..

for(int i=n-1;i>=0;i--)
   for(int j=n-1;j>=0;j--)
     for(int k=n-1;k>=0;k--)
     
        for(c=0;c<=i;c++)
          for(c1=0;c1<=j;c1++)
             for(c2=0;c2<=k;c2++)
              B(i,j,k)=B(i,j,k)+A(c,c1,c2);
      

什么是恢复原始立方体的有效方法...我想将 B 中每个顶点的负值存储在任何其他立方体(例如 C)中,然后使用与上述相同的方法来获取原始立方体...虽然它不能正常工作...以下是我尝试过的方法..

C[50][50][50] // this C is already having values same as in B but with opposite sign
for(c=0;c<=i;c++)
 for(c1=0;c1<=j;c1++)
    for(c2=0;c2<=k;c2++)
       C(i,j,k)=C(i,j,k)+B(c,c1,c2);

P.S 立方体的最大尺寸是 50*50*50..任何帮助请..

【问题讨论】:

我没有跟随失真。因为,ijk 是常量,所以您似乎将 B(而不是 A?)扭曲到 B - B(i,j,k) 中的 same 单元格)。失真线应该是这样的:A(c,c1,c2) = A(c,c1,c2) + B(c,c1,c2) 可能是for (i = 0; i &lt; c; i++) ...? 看起来 A 是我们原来的立方体 .. 并且该代码针对所有 i,j,k [0-n-1] 运行...也就是说...实际上使用了 6 个循环.. .希望你明白我的意思.. @unknown__ 好吧...不,因为您的代码另有说明 代码本身没有任何意义。请好好看看。如果你不修复它,或者提供全面的解释,我会投票关闭,因为不清楚。 【参考方案1】:

假设A 是原始立方体,B 是扭曲后的立方体。也就是说,

B[i,j,k] = sum(A[i*,j*,k*] for i* <= i, j* <= j, k* <= k)

要从B 取回A,请执行以下操作

A[i,j,k] = B[i, j, k]
         - B[i-1, j, k] - B[i, j-1, k] - B[i, j, k-1]
         + B[i, j-1, k-1] - B[i-1, j, k-1] - B[i-1, j-1, k]
         - B[i-1, j-1, k-1]

如果i &lt; 0 or j &lt; 0 or k &lt; 0B[i,j,k] = 0 在哪里

它遵循包含-排除原则。

【讨论】:

谢谢...顺便说一句。任何好的资源来阅读这个原则。??

以上是关于找回原来的 3d 立方体 ...c++的主要内容,如果未能解决你的问题,请参考以下文章

在 3D 空间中绘制立方体

如何css制作3d旋转立方体效果?

wpf 空间坐标系下,画一个立方体轮廓

获得立方体的面

OpenCV中的姿势估计及3D效果(3D坐标轴,3D立方体)绘制

3D32光立方设计方案