Forum » Programiranje » [C] unija pravokotnikov
[C] unija pravokotnikov
fictionel ::
Žiw!
V torek mam kolokvij iz Cja pa me matra ena naloga:
Pravokotnik v ravnini, ki ima stranice vzporedne s koordinatnima osema, predstavimo s koordinatami dveh (vseeno katerih) nasprotnih si oglišč. Sestavi program, ki prebere podatke za dva pravokotnika in izračuna obseg njune unije. Če se pravokotnika ne sečeta, je to kar vsota njunih obsegov.
Za začetek bi rad le nasvet, kako naj pogledam, če se sekata (in mogoče v katerih točkah).
V glavnem - en nasvet, kako naj začnem, ni treba pisat celga programa :)
Hvala
LP,
David
V torek mam kolokvij iz Cja pa me matra ena naloga:
Pravokotnik v ravnini, ki ima stranice vzporedne s koordinatnima osema, predstavimo s koordinatami dveh (vseeno katerih) nasprotnih si oglišč. Sestavi program, ki prebere podatke za dva pravokotnika in izračuna obseg njune unije. Če se pravokotnika ne sečeta, je to kar vsota njunih obsegov.
Za začetek bi rad le nasvet, kako naj pogledam, če se sekata (in mogoče v katerih točkah).
V glavnem - en nasvet, kako naj začnem, ni treba pisat celga programa :)
Hvala
LP,
David
Fury ::
Glede na to da je axis aligned je simple. Sam pogledas ce je kera kol tocka od prvega kvadrata po obeh koordinatah vecja od minimuma drugega in po obeh koordinatah manjsa od njegovega maximuma.
Torej ce ( t.x > Min.x && t.y > Min.y && t.x < Max.x && t.y < Max.y ) pol se sekata.
Torej ce ( t.x > Min.x && t.y > Min.y && t.x < Max.x && t.y < Max.y ) pol se sekata.
Gundolf ::
Takole nekako: obseg unije = obseg prvega + obseg drugega - obseg preseka
Tak zapis ti olajša računanje, ker rabiš imeti na voljo le eno zelo enostavno funkcijo, ki izračuna obseg pravokotnika (presek je vedno pravokotnik).
Kako izračunat presek? Kar direkt se ga lotiš:
Se pravi, če imaš strukturo pravokotnik, ki vsebuje 4 koordinate x1, x2, y1, y2 in predpostaviš, da je x1 < x2 in y1 < y2 za vsak pravokotnik, potem računaš presek pravokotnikov a in b takole: presek.x1 = max(a.x1, a.x1); presek.x2 = min(a.x2, b.x2). Podobno seveda za y koordinate. Pravokotnika se ne sekata (oziroma je obseg preseka enak 0), če (presek.x1 > presek.x2) ali (pozor ali, ne in) podobno za y koordinato.
Tebi pa prepuščam da napišeš funkcije min, max, izračun obsega in (zelo pomembno) funkcijo, ki pravokotnik spravi v normalno obliko (to pomeni, da sta njegovi koordinati x1 in y1 vedno manjši od x2 in y2). To zadnje lahko celo izpustiš in malo zakompliciraš formulo za izračun preseka.
Tak zapis ti olajša računanje, ker rabiš imeti na voljo le eno zelo enostavno funkcijo, ki izračuna obseg pravokotnika (presek je vedno pravokotnik).
Kako izračunat presek? Kar direkt se ga lotiš:
Se pravi, če imaš strukturo pravokotnik, ki vsebuje 4 koordinate x1, x2, y1, y2 in predpostaviš, da je x1 < x2 in y1 < y2 za vsak pravokotnik, potem računaš presek pravokotnikov a in b takole: presek.x1 = max(a.x1, a.x1); presek.x2 = min(a.x2, b.x2). Podobno seveda za y koordinate. Pravokotnika se ne sekata (oziroma je obseg preseka enak 0), če (presek.x1 > presek.x2) ali (pozor ali, ne in) podobno za y koordinato.
Tebi pa prepuščam da napišeš funkcije min, max, izračun obsega in (zelo pomembno) funkcijo, ki pravokotnik spravi v normalno obliko (to pomeni, da sta njegovi koordinati x1 in y1 vedno manjši od x2 in y2). To zadnje lahko celo izpustiš in malo zakompliciraš formulo za izračun preseka.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Vprašanje iz verjetnostiOddelek: Šola | 2190 (1376) | Randomness |
» | Absolutna neenačba (težja)Oddelek: Šola | 2767 (2019) | MaFijec |
» | problem v pythonuOddelek: Programiranje | 1055 (835) | Meizu |
» | Matematika - pomoč (strani: 1 2 3 )Oddelek: Šola | 26835 (23410) | daisy22 |
» | pomoč pri linearni algebriOddelek: Šola | 3321 (3172) | whatever |