Matematika feladatok
-
#2026
akkor gondolom egy bizonyos felbontás minden pontjáról kell tudnunk, hogy milyen színű.
akkor számoljunk csak:
-egészek: 10x10=100, ez nyilván kevés képpont
-tizedek: 100x100=10.000 ez a C16-os HiRes grafikusnál elmegy.
-századok: 1.000x1.000=1.000.000 pont ez elég lehet, mert jobb mint az 1024x768 (786.432)
-ezredek: 10.000x10.000=100.000.000 ennyi pont mán a világon sincs.
-valami köztes pl full hd esetén is csak alig több mint 1.000 pont lehet y irányban
tehát maradjunk az 1.000x1.000-esnél, ami 1.000.000 pont.
minden pont vagy ilyen, vagy olyan, ezért elég lenne 2^20=1.048.576 bit, ami 1048576/8=131702bájt, ami 131702/1024=128kilobájt.
de ehez sokat kéne programozni ezért pazarló módon minden pontra tartsunk fenn egy egész bájtot, így 1.000.000 bájt, ami kevesebb mint egy megabájt nagyságú 1000x1000 méretű tömbbel már gond nélkül tudunk rajzolgatni.
persze nem kell ekkora memóriát lefoglalni, hiszen használható közvetlenül a videomemória.
de hogyan járjunk el?
egy fapados, de működő megoldás.
fogalmazzuk át úgy a feladatot, hogy a tengelyeket transzponáljuk át 10-10 ből 1000-1000 be.
aztán az válasszuk ki sorra a nevezetes egyeneseket (minden 100adik) és szinezzük át az alatta lévő részt.
egy pontról könnyen eldönthető, hogy alatta, vagy felette van-e ha az adott x-hez tartozó y-t kiszámoljuk.
amikor egy pontot átszinezünk, akkor az eredeti szinét megváltoztatjuk (feketéből fehér lesz és fordítva) pl pixelcolor(x,y)=abs(getpixelcolor(x,y)-1)
ha minden egyenesnél így csináltunk, akkor kész is vagyunk.
tovább gyorsítható a dolog, ha egy adott egyeneshez tartozó átszinezés esetén sorra vesszük az oszlopokat (x=fix) és addi szinezünk át lentről felfelé haladva, míg el nem érjül a határoló egyenesünket. ha megvan lépünk a következő x-re, vagyis a következő oszlopra.
asszem ez így elég általános.