鉴于在特定地层中空间排列的一组3D模型,如何在保持彼此之间的相对距离的同时缩放它们?
例证:我有10个网格。其中六个被安排形成一个封闭的方形房间。其余4件是放置在其内部适当位置的家具。所有网格的比例均为1.0。我希望将它增加到2.0。
答案 0 :(得分:5)
我不是数学家,所以我将使用最基本的术语,我知道如何解释这个过程。您甚至可能会发现我使用的术语的简单性比数学“行话”更容易理解
你需要使用地层中所有物体的名义中心点来确定精确的形成中心(当然,这将是一个由X,Y和Z值组成的3D矢量)...
对象总数 =“阵型”中的对象总数
您现在拥有的三个值构成阵型中心(作为3D矢量)。
注意:如果您根据3D空间中的预定义固定点(例如0,0,0)排列对象,则无需执行上述操作计算,因为你的形成中心将是那个固定点。
如果您已正确完成此操作,您的对象现在已经缩放,仍保留其形成,但相对于形成中心和比例因子已移动。简单地说:这些对象之间的遮挡不再发生,因为它们的 Positions 与 Dimensions 一起缩放。
答案 1 :(得分:1)
如果我的问题是正确的,你必须选择缩放动作的中心c,然后获得相对于该中心的对象位置(让我们调用其中一个相对向量v)。现在按一个因子(例如v = v *因子)对这些向量进行缩放,并将对象移动到它们的新位置。 (position = c + v) 之后,只需将自己的位置缩放为自己的位置作为缩放中心。
答案 2 :(得分:1)
要真正回答这个问题,我们仍然需要更多关于数据格式以及如何应用转换的信息。但这是一个猜测: 您的对象很可能表示为多边形的集合,这些多边形本身表示为相对于某些“根点”的点集合,例如对象的中心或底角。当您将对象放置在某个位置(如房间)时,可以通过对表示对象的点应用一系列矩阵乘法来实现。单个矩阵乘法通常可以完成整个变换,但如果我们编写一系列直观的变换,对我们来说更有意义。例如,您通常会
所有这些转换都是相对于对象的“根点”发生的,它们的顺序有很大的不同。如果您平移然后缩放或旋转,则相对于新转换的中心将进行缩放和旋转。
因此,如果您在房间中放置了物体,并且坐标系的 [0,0,0] 恰好位于房间的中心,那么如果您缩放所有变形这些物体的点,它们都会从 [0,0,0] 增长/缩小并向外/向内推动。由于这不是你想要的,你必须首先通过翻译对象来改变原点,然后缩放,然后将原点改回原来的位置。
如果我有两点: [3,0,0] 和 [4,0,0] ,我想缩放它们以便它们之间的距离是 2 而不是 1 ,如果我只是乘以(比例) 2 ,我得 [6,0,0] < / strong>和 [8,0,0] 。现在它们之间的距离 2 ,但它们都移动了。如果我希望第一点保持不变,那么我首先翻译 [ - 3,0,0] ,然后我按 2 进行缩放,然后我翻译为 [3,0,0] 我有我想要的东西。相反,如果我希望这两个点的中心保持不变,那么我将翻译为 [(+/-)3.5,0,0] 。
决定对象的哪些点不应移动。然后在缩放之前将该点移动到原点。然后你将它移回去。由于你不希望你的物体穿过地板,你可能会在地面上(或者它们所附着的任何表面)选择一个点。如果您有一个物体放在另一个物体上(书桌上的书),那么这些物体应该使用相同的参考点。