2017-08-01 28 views
0

我有8个点的3D盒子,它们就像这样产生。如何以编程方式缩小3D盒子?

float points[8][3]; // [0] is first corner, and [7] is the second corner 
points[0] = corner1; 
points[7] = corner2; 

for(int i = 1; i < 7; i++) 
{ 
    for(int j = 0; j < 3; j++) 
    { 
     points[i][j] = points[((i >> (2-j)) & 1) * 7][j]; 
    } 
} 

我怎么会收缩2个单位盒每方程序,并动态?点数每隔几分钟更换一次。

下面是我有= 1的角落的“截图”是[0],2是[7]。在正确的方面,我正在努力实现 - 缩小规模。

enter image description here

+0

您是关于包装盒中心或角落的缩放吗? – meowgoesthedog

+0

是的,我正在缩放中心,但我拥有的点是2个角落。 – shavit

回答

0

相对于中心的萎缩:

center = (corner1 + corner2)/2 
diag = corner2 - corner1 
diaglen = diag.Length 
coeff = (diaglen - 2 * Sqrt(3))/diaglen   //check for positive 
for every vertex: 
    new.X = center.X + (old.X - center.X) * coeff 
    same for y,z 
0

解决它自己。

for(int i = 1; i < 7; i++) 
{ 
    for(int j = 0; j < 3; j++) 
    { 
     point[i][j] = point[((i >> (2 - j)) & 1) * 7][j]; 
    } 
} 

if(offset != 0.0) 
{ 
    float center[2]; 
    center[0] = ((point[0][0] + point[7][0])/2); 
    center[1] = ((point[0][1] + point[7][1])/2); 

    for(int i = 0; i < 8; i++) 
    { 
     for(int j = 0; j < 2; j++) 
     { 
      if(point[i][j] < center[j]) 
      { 
       point[i][j] += offset; 
      } 

      else 
      { 
       point[i][j] -= offset; 
      } 
     } 
    } 
}