我想使用div宽度和高度生成随机数。生成后,我将使用x和y位置放置静态文本,但文本不应该超过一圈。
这个函数会为我Math.floor ( Math.random ( ) );
生成一个随机数,但是我想要n个数字,它总能让我保证文本不会相互重叠。
如何使用高度和宽度生成随机数?
答案 0 :(得分:0)
x=Math.floor(Math.random()*1000);
y=Math.floor(Math.random()*1000);
$('#idoftextbox').val('X Position is '+x+' and Y Position is '+y);
答案 1 :(得分:0)
这是您更新的代码,处理文本冲突;您需要根据文本修改碰撞容差距离(可能还有放弃前随机尝试的次数)。虽然理论上非常低效,但目前没有任何明显的性能问题,但您可以根据需要进行调整。
一个显而易见的性能提升是将坐标列表保持在排序顺序中。这样,在进行每次插入之前,您不必检查每个列表中的每个先前值,并且搜索要插入的正确索引将与检查冲突的过程相同。就此而言,您可以使用更好的搜索算法轻松地将isTooClose
从O(n)
更改为O(log n)
。
$(document).ready(function() {
var z = 300, tops = [], lefts = [];
for (var i = 0; i <= z; i++) {
var x=0, y=0, j=0;
while( isTooClose(x, y) && j < 50) {
x = Math.floor(Math.random() * 500);
y = Math.floor(Math.random() * 500);
j++;
}
if (j>=50) { alert('1'); }
$('<div>').css({
position: "absolute",
left: x,
top: y,
fontSize: 'small'
}).html("Hello").appendTo('#test');
lefts.push(x);
tops.push(y);
}
function isTooClose( x, y ) {
for (var i = 0; i < tops.length; i++) {
if ( (x + 30 >= lefts[i] && x - 30 <= lefts[i]) &&
(y + 10 >= tops[i] && y - 10 <= tops[i]) ) {
return true;
}
}
return false;
}
});