Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Lukáš
Tvůrce
Avatar
Lukáš:7.1.2019 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.1.2019 8:15
Avatar
Odpovídá na Lukáš
Matúš Olejník:7.1.2019 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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
7.1.2019 11:29
/* I am not sure why this works but it fixes the problem */
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:7.1.2019 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.1.2019 16:05
 
Nahoru Odpovědět
7.1.2019 16:04
Avatar
Lukáš
Tvůrce
Avatar
Odpovídá na Peter Mlich
Lukáš:7.1.2019 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
7.1.2019 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.