Javascript 创建具有随机颜色且不重叠的随机矩形

Javascript 创建具有随机颜色且不重叠的随机矩形,javascript,qt,qml,Javascript,Qt,Qml,如何使用javascript在QML中创建类似的内容 实际上,我知道如何在QML中创建矩形,但我想做类似的事情。QML画布可以是任何大小,但每当加载QML节时,都会生成多个具有随机大小和颜色的正方形,且不重叠。当我尝试这样做时,矩形是以列表形式生成的。 我是一名web开发人员(面向ruby-on-rails),但对此类javascript内容还不熟悉。任何帮助都将不胜感激。如果您想要提高效率,那么它将以复杂性为代价-您将不得不使用一些空间分割算法。否则,您可以只生成随机值,直到得到足够的不重叠

如何使用javascript在QML中创建类似的内容

实际上,我知道如何在QML中创建矩形,但我想做类似的事情。QML画布可以是任何大小,但每当加载QML节时,都会生成多个具有随机大小和颜色的正方形,且不重叠。当我尝试这样做时,矩形是以列表形式生成的。
我是一名web开发人员(面向ruby-on-rails),但对此类javascript内容还不熟悉。任何帮助都将不胜感激。

如果您想要提高效率,那么它将以复杂性为代价-您将不得不使用一些空间分割算法。否则,您可以只生成随机值,直到得到足够的不重叠值为止

检查两个矩形是否重叠很简单-如果矩形B的角都不在矩形A内,则它们不重叠。如果角点/点的x和y值分别在矩形的x和宽度以及y和高度范围内,则角点/点位于矩形内

在JS
Math.random()
中,将给您一个介于0和1之间的数字,因此如果您想创建一个介于50和200之间的随机值,可以通过
Math.random()*150+50
来实现


创建一个数组,将初始矩形值添加到该数组中,然后生成新的矩形值,检查它们是否与数组中已经存在的值重叠,如果不重叠,也将它们添加到数组中。获得足够的矩形值后,继续创建实际的矩形。因为所有的矩形都是正方形,所以每个正方形只能有3个值-x、y和size。

如果你想提高效率,它将以复杂性为代价-你必须使用一些空间分割算法。否则,您可以只生成随机值,直到得到足够的不重叠值为止

检查两个矩形是否重叠很简单-如果矩形B的角都不在矩形A内,则它们不重叠。如果角点/点的x和y值分别在矩形的x和宽度以及y和高度范围内,则角点/点位于矩形内

在JS
Math.random()
中,将给您一个介于0和1之间的数字,因此如果您想创建一个介于50和200之间的随机值,可以通过
Math.random()*150+50
来实现


创建一个数组,将初始矩形值添加到该数组中,然后生成新的矩形值,检查它们是否与数组中已经存在的值重叠,如果不重叠,也将它们添加到数组中。获得足够的矩形值后,继续创建实际的矩形。因为所有的矩形都是正方形,所以每个正方形只能有3个值-x、y和size。

正如@ddriver已经注意到的,最简单的决定是遍历所有的子对象,找到一个新矩形的房间

矩形{
id:集装箱
锚定。填充:父级
属性变量项:[];
组成部分{
id:rect
长方形{
颜色:Qt.rgba(Math.random(),Math.random(),Math.random(),1);
边框宽度:1
border.color:#999“
宽度:50
身高:50
}
}
Component.onCompleted:{
var-cnt=50;
对于(变量i=0;i(item.x+item.width)|(x+width)(item.y+item.height)|(y+height)

是的,这不是一个明智的解决方案,但它仍然可以改进。

正如@ddriver已经注意到的那样,最简单的决定是遍历所有孩子,找到一个新矩形的房间

矩形{
id:集装箱
锚定。填充:父级
属性变量项:[];
组成部分{
id:rect
长方形{
颜色:Qt.rgba(Math.random(),Math.random(),Math.random(),1);
边框宽度:1
border.color:#999“
宽度:50
身高:50
}
}
Component.onCompleted:{
var-cnt=50;
对于(变量i=0;i