我有一个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]。在右侧,正是我想要实现的目标 - 缩小规模。
答案 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;
}
}
}
}