一种家居布局3D碰撞检测方法及系统与流程

文档序号:17643958发布日期:2019-05-11 00:51阅读:374来源:国知局
一种家居布局3D碰撞检测方法及系统与流程

本发明涉及种家居布局3d碰撞检测方法及系统,属于计算机辅助设计技术领域。



背景技术:

智能布局算法在计算房屋的布局时,通过人工智能计算出房屋中所有物品模型的摆放位置和模型的旋转角度,但是受算法和模型包围盒形状等一系列影响,会导致出现部分模型之间出现碰撞,后期仍需要人工调整物品位置和旋转角度,影响了设计效率。现有技术在解决碰撞检测时大多是基于包围盒来计算,基于包围盒的碰撞检测在智能布局中,无法解决l型沙发和其他沙发是否碰撞,凳子是否可以放入桌子下方等一系列问题。



技术实现要素:

本系统通过使用3d模型描点后的矩阵数据和房屋矩阵数据,对矩阵进行旋转和填充,使用同一坐标系建模,基于同一坐标系下的3d模型碰撞检测。

一种家居布局3d碰撞检测方法,包括如下步骤:

s1,对家居布局中需要进行布局的各个物件进行空间位置设计,获得各个物件的中心位置的坐标[x,y,z],以及各个物件的旋转角度[xaxis,yaxis,zaxis];x,y,z分别是指在房间的坐标系中x轴y轴和z轴上的位置,xaxis,yaxis,zaxis分别是指物件在房间的坐标系中x方向y方向和z方向上的偏转角;

s2,将各个物件的形状用三维矩阵m表示,外部轮廓以及内部实体空间的值为正数,其它空间的值为0;

s3,根据旋转角度[xaxis,yaxis,zaxis]将三维矩阵m进行旋转计算,并根据物件的中心位置的坐标[x,y,z]将其转换为用房间所在的坐标系来表示的物体形状的矩阵m’;

s4,将每个物体的形状矩阵m’分别放置在房间所在的坐标系中,得到新的矩阵ai(i=1,2,……n),n是全部需要进行检测的物体的个数;将矩阵ai中物体与墙之间的空间的数值全部设置为0;

s5,将矩阵a1和a2相乘,若得到的新的矩阵为0,则判定为不发生碰撞,若得到的新的矩阵不为0,则判定为发生了碰撞。

在一个实施方式中,三维矩阵m是对所述的物件的包围盒进行表示。

在一个实施方式中,步骤s2中的正数是正整数。

在一个实施方式中,正整数是1。

在一个实施方式中,在进行完步骤s6后,如果判定为不发生碰撞,那么将a1和a2相加,作为新的a2矩阵,继续将a2和a3矩阵采用步骤s6进行判定,直至将全部的物件判定完成。

一种家居布局3d碰撞检测系统,包括:

物件空间位置获取模块,用于根据对家居布局中需要进行布局的各个物件进行空间位置设计结果,获得各个物件的中心位置的坐标[x,y,z],以及各个物件的旋转角度[xaxis,yaxis,zaxis];x,y,z分别是指在房间的坐标系中x轴y轴和z轴上的位置,xaxis,yaxis,zaxis分别是指物件在房间的坐标系中x方向y方向和z方向上的偏转角;

三维矩阵生成模块,用于将各个物件的形状用三维矩阵m表示,外部轮廓以及内部实体空间的值为正数,其它空间的值为0;

矩阵变换模块,用于根据旋转角度[xaxis,yaxis,zaxis]将三维矩阵m进行旋转计算,并根据物件的中心位置的坐标[x,y,z]将其转换为用房间所在的坐标系来表示的物体形状的矩阵m’;并且将每个物体的形状矩阵m’分别放置在房间所在的坐标系中,得到新的矩阵ai(i=1,2,……n),n是全部需要进行检测的物体的个数;将矩阵ai中物体与墙之间的空间的数值全部设置为0;

碰撞检测模块,用于将矩阵a1和a2相乘,若得到的新的矩阵为0,则判定为不发生碰撞,若得到的新的矩阵不为0,则判定为发生了碰撞。

在一个实施方式中,三维矩阵m是对所述的物件的包围盒进行表示。

在一个实施方式中,步骤s2中的正数是正整数。

在一个实施方式中,正整数是1。

碰撞检测模块中,如果判定为不发生碰撞,那么将a1和a2相加,作为新的a2矩阵,继续将a2和a3矩阵采用步骤s6进行判定,直至将全部的物件判定完成。

一种记载有可以运行上述的家居布局3d碰撞检测方法的程序的计算机可读介质。

有益效果

基于本发明,可以非常快速的运算出智能布局的结果是否存在碰撞,并返回碰撞的位置,这样可以避免智能布局出现物体相互挤压等问题。由于全部的计算都是使用的矩阵运算,运算效率极高,使得碰撞检测有着很高的性能。

附图说明

图1是一个次卧的平面示意图。

图2将一个物件转换至房间所在矩阵后的计算示意图。

图3是两个不相碰撞的物件进行检测的示意图。

图4是将两个物件相加之后,进行下一步检测的示意图。

图5是一组物件相互发生碰撞后的示意图。

图6是模型物体的描点数据示意图。

图7是模型矩阵旋转示意图。

具体实施方式

为了更清楚地说明本申请的实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本申请的一些示例或实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图将本申请应用于其他类似情景。应当理解,给出这些示例性实施例仅是为了使相关领域的技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。

如本申请和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其他的步骤或元素。

虽然本申请对根据本申请的实施例的系统中的某些系统、模块或单元做出了各种引用,然而,任何数量的不同模块可以被使用并运行在客户端和/或服务器上。所述模块仅是说明性的,并且所述系统和方法的不同方面可以使用不同模块。

同时,本申请使用了特定词语来描述本申请的实施例。如“一个实施例”、“一实施例”、和/或“一些实施例”意指与本申请至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一替代性实施例”并不一定是指同一实施例。此外,本申请的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。

本发明提供的家居布局3d碰撞检测方法的总体步骤如下:

s1,对家居布局中需要进行布局的各个物件进行空间位置设计,获得各个物件的中心位置的坐标[x,y,z],以及各个物件的旋转角度[xaxis,yaxis,zaxis];x,y,z分别是指在房间的坐标系中x轴y轴和z轴上的位置,xaxis,yaxis,zaxis分别是指物件在房间的坐标系中x方向y方向和z方向上的偏转角;

s2,将各个物件的形状用三维矩阵m表示,外部轮廓以及内部实体空间的值为正数,其它空间的值为0;

s3,根据旋转角度[xaxis,yaxis,zaxis]将三维矩阵m进行旋转计算,并根据物件的中心位置的坐标[x,y,z]将其转换为用房间所在的坐标系来表示的物体形状的矩阵m’;

s4,将每个物体的形状矩阵m’分别放置在房间所在的坐标系中,得到新的矩阵ai(i=1,2,……n),n是全部需要进行检测的物体的个数;将矩阵ai中物体与墙之间的空间的数值全部设置为0;

s5,将矩阵a1和a2相乘,若得到的新的矩阵为0,则判定为不发生碰撞,若得到的新的矩阵不为0,则判定为发生了碰撞。

方法具体步骤:

1)在许多家居设计软件当中,可以通过自动或者手动的方式得到新的家居布局,展现在用户面前,例如可以使用智能布局算法得到经过软件优化设计得到的布局图,设计结果是基于学习设计师设计过的设计方案的,实现房屋家具、家电、装饰品等房屋物品智能布局的算法。在智能布局算法中,模型和房屋全部基于统一的世界坐标系,物品的包围盒大小和房屋使用相同比例尺。

户型图当中的物品大都是采用矩阵的形式进行描述其轮廓,并且由于将各个物品布局于户型图当中时,各个物品会根据设计结果旋转相应的角度,因此,在布局后会返回所有模型的基于世界坐标系(统一坐标系)位置中心点坐标[x,y,z]以及旋转角度[xaxis,yaxis,zaxis]标识本次布局的位置信息。

2)获取模型的描点数据,模型的描点数据是通过三维矩阵表述了三维空间下所有点的物体信息,描点数据可以理解为对模型用空间像素的方式来表达。不同的数值标识不同的物品类别。如图6示意图,以该模型包围盒的顶点建立坐标系。如果矩阵m[xidx,yidx,zidx](即下标xidx,yidx,zidx)对应空间中坐标(xidx,yidx,zidx),如果该点为桌子的一部分,则将该下标的点的值设为2(假设2代表模型类型为桌子)即m[xidx,yidx,zidx]=2,如果为空则把值设为0。通过这种方式将全部的模型数据描点完毕得到相对坐标系的矩阵信息(本专利中不涉及描点数据转换的部分,模型的描点数据是事先建立好存在数据库中的)。

3)将房屋的数据也用描点数据来表示,将房间的形状用三维矩阵表示,那么这个矩阵维度为[length,width,height],也就是房屋的长*宽*高,将房屋的墙体位置填充为1,其余位置全部填充为0,如图的一个次卧,可以转换成矩阵示意图如图1,实际中矩阵维度可能为1000*800*600。

[[[1,1,1,1,1,1],

[1,1,1,1,1,1],

[1,1,1,1,1,1],

[1,1,1,1,1,1]],

[[1,0,0,0,0,1],

[1,0,0,0,0,1],

[1,0,0,0,0,1],

[1,0,0,0,0,1]],

[[1,0,0,0,0,1],

[1,0,0,0,0,1],

[1,0,0,0,0,1],

[1,0,0,0,0,1]],

[[1,1,1,0,0,1],

[1,1,1,0,0,1],

[1,1,1,0,0,1],

[1,1,1,0,0,1]],

[[1,1,1,1,1,1],

[1,1,1,1,1,1],

[1,1,1,1,1,1],

[1,1,1,1,1,1]]]

4)为了能计算碰撞,首先需要将所有矩阵数据统一到世界坐标系中,由于模型在构建矩阵数据时是基于相对坐标系建立的,旋转角都为0度,但是在布局之后,由于模型在空间可以任意的摆放,有不同的朝向,在世界坐标系中模型就有了旋转角,所以需要对基于相对坐标系的矩阵旋转到带旋转角的世界坐标系中。同时在相对坐标系中的模型中心点在世界坐标系下也发生了位移,而且为了矩阵计算也需要将所有的矩阵填充到同一维度,只需要通过填充就可以将矩阵的位移数据也表示出来。

5)下一步对矩阵做旋转,模型的矩阵数据为[m_length,m_width,m_height],矩阵数据的旋转可以通过旋转函数来实现,旋转函数如图,r表示乘以旋转矩阵,旋转角即为智能布局返回的[xaxis,yaxis,zaxis],旋转后的矩阵维度为[m_length’,m_width’,m_height’]。

模型的矩阵旋转,如图7所示,其步骤如下:

(1)将坐标系绕z轴旋转α角

(2)将旋转后坐标系绕自己本身的x轴(也就是图中的nn轴)旋转β角

(3)将旋转后坐标系绕自己本身的z轴旋转γ角

其中,x,y,z为空间坐标位置。得到的矩阵为旋转后的坐标位置

rz(α)表示绕z轴旋转α

rx(β)表示绕x轴旋转β

t(x,y,z)表示模型的原矩阵。

旋转之后的矩阵为,m=rz(α)rx(β)rz(γ)t(x,y,z)。

6)旋转完后,将每个物件的模型矩阵数据放置于房屋的坐标系,形成一个包含一个物体的房间的矩阵,n个物件就会对应n个这样的矩阵;因此,需要将维度为[m_length’,m_width’,m_height’]模型数据用0填充为房屋的维度[length,width,height]。模型在房屋坐标系是有位置信息的,那么填充的时候也应该准确的表示出模型的位置信息。如图2所示,已知模型的位置[x,y,z],模型形状为[m_length’,m_width’,m_height’],房屋的大小为[length,width,height],因此需要将房屋中的非实体空间填充为0,那么填充的时候,在x轴上,需要模型的左边填充0到模型左边界这么多个0,即x-m_length’/2,在模型右边需要填充length-x-m_length’/2个0;y轴同理,应在前面填充y-m_width’/2个0,应在后面填充width-y-m_width’/2个0;z轴,在下填充z-m_height’/2个0,在上方填充height-z-m_height’/2个0。

7)经过转换之后,所有的模型都扩充成了和房屋矩阵同一坐标系,同维度的矩阵。现在可以通过这些矩阵来计算是否碰撞,通过两个矩阵的相乘,也就是两个矩阵对应位置分别相乘。如图3所示,空白位置的矩阵值为0,如果不存在碰撞,那么矩阵相乘后的结果应该全部为0。

8)为了进一步检测第3个物体是否与他们发生了碰撞,然后将图3中被检测过两个矩阵相加,得到一个新的矩阵,如图4所示;继续和下一个模型进行矩阵相乘运算,判断是否碰撞,如图5所示。如果得出的矩阵之和不为0,那么矩阵值大于0的位置则发生了碰撞,如图5矩阵相乘之后发现存在一个区域发生了碰撞。

9)不断重复上述过程,直到所有模型检测完毕,实现了对房屋的内部空间是否发生碰撞的判定。由于全部的计算都是使用的矩阵运算,运算效率极高,使得碰撞检测有着很高的性能。

另外,上述的碰撞检测方法也可以应用于其它的空间区域中的物件检测,例如,当需要对一个目标空间中存在的物件进行检测时,可以采用如下的方法:

s1,对于需要布置于一个目标空间中的多个物件,获得各个物件的中心位置的坐标[x,y,z];x,y,z分别是指在目标空间的坐标系中x轴y轴和z轴上的位置;

s2,将各个物件的形状用三维矩阵m表示,外部轮廓以及内部实体空间的值为正数,其它空间的值为0;

s3,根据物件的中心位置的坐标[x,y,z]将其转换为用目标空间所在的坐标系来表示的物体形状的矩阵m’;

s4,将每个物体的形状矩阵m’分别放置在目标空间所在的坐标系中,得到新的矩阵ai(i=1,2,……n),n是全部需要进行检测的物体的个数;将矩阵ai中物体与目标空间轮廓之间的空间的数值全部设置为0;

s5,将矩阵a1和a2相乘,若得到的新的矩阵为0,则判定为不发生碰撞,若得到的新的矩阵不为0,则判定为发生了碰撞。

另外,可以在s1中获得各个物件的旋转角度[xaxis,yaxis,zaxis],xaxis,yaxis,zaxis分别是指物件在目标空间的坐标系中x方向y方向和z方向上的偏转角,并且在s3中根据旋转角度[xaxis,yaxis,zaxis]将三维矩阵m进行旋转计算。

本发明还提供了一种家居布局3d碰撞检测系统,包括:

物件空间位置获取模块,用于根据对家居布局中需要进行布局的各个物件进行空间位置设计结果,获得各个物件的中心位置的坐标[x,y,z],以及各个物件的旋转角度[xaxis,yaxis,zaxis];x,y,z分别是指在房间的坐标系中x轴y轴和z轴上的位置,xaxis,yaxis,zaxis分别是指物件在房间的坐标系中x方向y方向和z方向上的偏转角;

三维矩阵生成模块,用于将各个物件的形状用三维矩阵m表示,外部轮廓以及内部实体空间的值为正数,其它空间的值为0;

矩阵变换模块,用于根据旋转角度[xaxis,yaxis,zaxis]将三维矩阵m进行旋转计算,并根据物件的中心位置的坐标[x,y,z]将其转换为用房间所在的坐标系来表示的物体形状的矩阵m’;并且将每个物体的形状矩阵m’分别放置在房间所在的坐标系中,得到新的矩阵ai(i=1,2,……n),n是全部需要进行检测的物体的个数;将矩阵ai中物体与墙之间的空间的数值全部设置为0;

碰撞检测模块,用于将矩阵a1和a2相乘,若得到的新的矩阵为0,则判定为不发生碰撞,若得到的新的矩阵不为0,则判定为发生了碰撞。

在一个实施方式中,三维矩阵m是对所述的物件的包围盒进行表示。

在一个实施方式中,步骤s2中的正数是正整数。

在一个实施方式中,正整数是1。

碰撞检测模块中,如果判定为不发生碰撞,那么将a1和a2相加,作为新的a2矩阵,继续将a2和a3矩阵采用步骤s6进行判定,直至将全部的物件判定完成。

本发明还提供了一种记载有可以运行上述的家居布局3d碰撞检测方法的程序的计算机可读介质。

此外,本领域技术人员可以理解,本申请的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的工序、机器、产品或物质的组合,或对他们的任何新的和有用的改进。相应地,本申请的各个方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“系统”。此外,本申请的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。

计算机可读信号介质可能包含一个内含有计算机程序编码的传播数据信号,例如在基带上或作为载波的一部分。该传播信号可能有多种表现形式,包括电磁形式、光形式等等、或合适的组合形式。计算机可读信号介质可以是除计算机可读存储介质之外的任何计算机可读介质,该介质可以通过连接至一个指令执行系统、装置或设备以实现通讯、传播或传输供使用的程序。位于计算机可读信号介质上的程序编码可以通过任何合适的介质进行传播,包括无线电、电缆、光纤电缆、射频信号、或类似介质、或任何上述介质的组合。

本申请各部分操作所需的计算机程序编码可以用任意一种或多种程序语言编写,包括面向对象编程语言如java、scala、smalltalk、eiffel、jade、emerald、c++、c#、vb.net、python等,常规程序化编程语言如c语言、visualbasic、fortran2003、perl、cobol2002、php、abap,动态编程语言如python、ruby和groovy,或其他编程语言等。该程序编码可以完全在用户计算机上运行、或作为独立的软件包在用户计算机上运行、或部分在用户计算机上运行部分在远程计算机运行、或完全在远程计算机或服务器上运行。在后种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(lan)或广域网(wan),或连接至外部计算机(例如通过因特网),或在云计算环境中,或作为服务使用如软件即服务(saas)。

此外,除非权利要求中明确说明,本申请所述处理元素和序列的顺序、数字字母的使用、或其他名称的使用,并非用于限定本申请流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本申请实施例实质和范围的修正和等价组合。例如,虽然以上所描述的系统组件可以通过硬件设备实现,但是也可以只通过软件的解决方案得以实现,如在现有的服务器或移动设备上安装所描述的系统。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1