Front-end Front-end
Probíhá výprodej HTML, JavaScript a Bootstrap. Slevy až 80 %
Vyšlehej si extra vědomosti! Až 100% bodů na prémiový obsah zdarma! Více zde
Avatar
Lukáš
Redaktor
Avatar
Lukáš:7. ledna 8:15

Ahoj, snažím se vygenerovat náhodný čtverec v jednotce Graph pomocí rectangle(x,y,x2,y­2)

Zkusil jsem: Zkoušel jsem Udělat

Rectangle(ran­dom(GetMaxX), random(GetMaxY),ran­dom(GetMaxX), random(GetMaxY))
To ale generovalo náhodné obrazce, tak mě napadlo udělat

Repeat
X = random(GetMaxX)
X2 = random (GetMaxX)
Until x < x2
R = x2 - x

Repeat
Y = random(GetMaxY)
Y2 = random(GetMaxY)
Until y2 - y = r

Kde R je delka strany ctverce, jenže tahle situace nastane jen málo kdy a je malá šance, že se takhle ty čísla vygenerujou, nejde to nějak omezit, aby se x a x2 vygenerovala bez omezení, ale pak y a y2 se generovaly pouze s rozhasem R?
Uvedu příklad: vygeneruje se
x = 200
x2 = 350
Čili R = 150
A teď by se mohli vygenerovat
y = 500
y2 = 650
nebo
y = 1038
y2 = 1188
.....

Chci docílit: Generování náhodných čtverců na náhodných místech na obrazovce

 
Odpovědět 7. ledna 8:15
Avatar
Odpovídá na Lukáš
Matúš Olejník:7. ledna 11:29

Repeat
Y = random(GetMaxY)
Y2 = random(GetMaxY)
Until y2 - y = r

Keď máš r a vygeneruješ Y tak už Y2 môžeš dopočítať či? :D

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 7. ledna 11:29
/* I am not sure why this works but it fixes the problem */
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:7. ledna 16:04

Prijde mi, ze dotaz je malo srozumitelny. Co ti to dela, co ti to ma delat? Ja bych ctverec (odbelnik) generoval takto:

lmin = 10; (* delka strany min=10, max 50 *)
lmax = 50;
xmin = 0;
ymin = 0;
xmax = GetMaxX - lmax;
ymax = GetMaxY - lmax;
x1 = xmin + random(xmax);
x2 = x1 + lmin + random(lmax - lmin);
y1 = ymin + random(ymax);
y2 = y1 + lmin + random(lmax - lmin);
kresli_ctverec(x1, y1, x2, y2);

html:

<style>
.ctverec {border:1px solid #f00; position:absolute;}
.canvas {width:600px;height:400px;border:1px solid #f00;position:relative;}
</style>

<div id=canvas></div>

<script>
function random(n)
{
return Math.floor(Math.random()*n);
}

function kresli_ctverec(x1, y1, x2, y2)
{
var canvas, div;
canvas = document.getElementById('canvas');
div = document.createElement("div");
div.className = 'ctverec';
div.style.left   = x1 + 'px';
div.style.top    = y1 + 'px';
div.style.width  = x2-x1 + 'px';
div.style.height = y2-y1 + 'px';
canvas.appendChild(div);
}

function generuj(GetMaxX, GetMaxY)
{
var i, lmin, lmax, xmin, ymin, xmax, ymax;
lmin = 10; /* delka strany min=10, max 50 */
lmax = 50;
xmin = 0;
ymin = 0;
xmax = GetMaxX - lmax;
ymax = GetMaxY - lmax;
for (i=0; i<15; i++)
        {
        x1 = xmin + random(xmax);
        x2 = x1 + lmin + random(lmax - lmin);
        y1 = ymin + random(ymax);
        y2 = y1 + lmin + random(lmax - lmin);
        kresli_ctverec(x1, y1, x2, y2);
        }
}

generuj(600, 400);
</script>

http://jsfiddle.net/hxz7vmdf/
klikni si Run vlevo nahore.

Editováno 7. ledna 16:05
 
Nahoru Odpovědět  +1 7. ledna 16:04
Avatar
Lukáš
Redaktor
Avatar
Odpovídá na Peter Mlich
Lukáš:7. ledna 21:43

Snažil jsem se vygenerovat náhodné čtverce na náhodných místech na obrazovce, viz. obrázek, čehož jsem dosáhl tím jak jsem psal.. Hned po ránu mě nenapadlo, že bych vlastně y2 mohlo dopočítat :-D. Má blbost.

Děkuji Matúšovi i tobě ;)

 
Nahoru Odpovědět  +1 7. ledna 21:43
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.