Középiskolai Matematikai és Fizikai Lapok
Informatika rovattal
Kiadja a MATFUND Alapítvány
Már regisztráltál?
Új vendég vagy?

Az I. 456. feladat (2018. április)

I. 456. A képek tárolására igen sokféle fájltípus alakult ki a tárolásmóddal, a méretekkel szembeni különböző elvárások miatt. A szöveges módon tárolt, tömörítés nélküli képek nagyméretű fájlokat eredményeznek. Szerkezetük egyszerű és a legtöbb képnézegető, képszerkesztő képes megjeleníteni őket.

Készítsünk programot i456 néven, amely egy .pgm kiterjesztésű (portable graymap format), 8-bites, szürkeárnyalatos képet állít elő, amely egy arkhimédészi spirált ábrázol. A kép négyzet alakú legyen és a spirál középen helyezkedjen el. A hátteret állítsuk fehérre és a spirál színét, belülről kifelé, menetenként feketétől fokozatosan a világosszürkéig változtassuk.

A program standard bemenetének első sorában a négyzet alakú kép \(\displaystyle N\) (\(\displaystyle 10\le N\le 1000\)) oldalhosszát, a szürkeárnyalatok \(\displaystyle K\) (\(\displaystyle 1\le K\le 255\)) számát, második sorában a spirál meneteinek \(\displaystyle M\) (\(\displaystyle 1\le M\le 10\)) számát és \(\displaystyle L\) (\(\displaystyle 1\le L\le 10\)) vonalvastagságát adjuk meg.

A program írja a standard kimenetre az előállított pgm típusú képfájl szöveges tartalmát, amelyet, ha fájlba irányítunk át, akkor utána képnézegetővel az ábra megtekinthető.

Értékelés: a megoldás lényegét leíró dokumentáció 1 pontot ér. További 9 pont kapható arra a programra, amely a korlátoknak megfelelő bemenetekre helyes kimenetet ad. Részpontszám kapható arra a programra, amely vonalvastagságot, vagy színátmenetet nem kezel.

Beküldendő egy tömörített i456.zip állományban a program forráskódja és rövid dokumentációja, amely megadja, hogy a forrásállomány melyik fejlesztői környezetben fordítható.

(10 pont)

A beküldési határidő 2018. május 10-én LEJÁRT.


Mintamegoldás:

A közölt mintamegoldás Varga Balázs, a debreceni Fazekas Mihály Gimnázium 9. osztályos tanulójától származik: 456.cpp

Egy arkhimédészi spirál vonalát egy olyan pont útja írja le, ami az origó körül egyenletesen forog és attól egyenletesen távolodik.

Mivel a a távolodás és a forgás is egyenletes, így a szögelfordulás és a távolság egyenesen arányos, tehát ugyanakkora szög növekedésnél ugyanannyival nő a távolság.

360*M(menetek száma) szögelfordulás esetén N(kép mérete)/2-nek kell lennie a távolságnak. Ebből a program kiszámítja hogy egy adott szögelfordulás esetén mekkora lesz a távolság az origótól.

Így megkapja a pont pillanatnyi koordinátáját polárkoordináta-rendszerben, amit szögfüggvényekkel derékszögű koordináta-rendszerbe átvált, és a képen az ezekhez a koordinátákhoz tartozó pontot megjelöli, illetve tárolja, hogy hányadikként jelölte meg. Mivel a szöget és a hozzátartozó távolságot növeli így a pontok belülről kifelé haladva kerülnek le, így aztán a tárolt szám nem csak azt jelenti, hogy hányadikként került le egy pont, hanem hogy belülről kifelé hányadik. Ha ezt elég sok szögnél elvégezi, akkor megkapjuk a spirál egybefüggő vonalát.

A pontok sorszámának a segítségével, pedig meglehet adni hogy melyik ponthoz melyik árnyalat tartozik, és ennek a számát beírja a képbe a pont helyére.

A vonal vastagságát, úgy növeli meg, hogy minden pont köré ír egy V(vonalvastagság) átmérőjű kört, aminek minden pontja ugyanazt a színt tárolja.

Bemenet:A kép mérete, az árnyalatok száma, a menetek száma és a vonal vastagsága

A be3.txt állománnyal generált spirál:

Tesztállományok:

be1.txt, be2.txt, be3.txt


Statisztika:

6 dolgozat érkezett.
10 pontot kapott:Bálint Ádám, Horcsin Bálint, Varga 225 Balázs.
9 pontot kapott:Papp Marcell Miklós, Ürmössy Dorottya, Vígh Márton.

A KöMaL 2018. áprilisi informatika feladatai