如何以编程方式收缩3D盒子?

时间:2017-08-01 16:42:35

标签: geometry

我有一个3D盒子的8个点,它们是这样生成的。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;
            }
        }
    }
}