Текисликда (2D) соҳани бўяш 1.
1.Соҳани ташкил этувчи ташқи нуқталари билан, яъни соҳани ичида ётувчи ҳар бир пиксел бирор бир ранг (oldcolor) билан берилади (чегарадаги пикселлар бу қийматга эга эмас).
Function fill4(int x,int y:int newcolor, int oldcolor);
{
If (getpixel(x,y)==oldcolor)
{
PutPixel (x,y,newcolor);
fill4(x,y-1,newcolor,oldcolor);
fll4(x,y+1,newcolor,oldcolor); fill4(x-1,y,newcolor,oldcolor);
fill4(x+1.y,newcolor,oldcolor);
}}
Текисликда (2D) соҳани бўяш 2.
Бундан ташқари 4 ва 8 боғланишлик соҳалар учун алгоритмлар мавжуд.
Ички oldcolor ранг билан берилган янги newcolor ранг билан
4боғланишлик соҳани бўяш оддий рекурсия алгоритмини келтирамиз.
Function fill4(int x,int y:int newcolor, :word);
{
If GetPixel(x,y)==bcolor and GetPixel(x,y)==newcolor
{
PutPixel (x,y,newcolor);
fill4(x,y-1,bcolor,newcolor);
fill4(x,y+1,bcolor,newcolor);
fill4(x-1,y,bcolor,newcolor);
fill4(x+1,y,bcolor,newcolor);
}}
Эътиборингиз учун рахмат!
Маъруза 13. Растр графикаси алгоритмлари. Брезенхейм ва Сазерланд-Кохен алгоритми
Брезенхейм алгоритми. Кесманинг растр тасвири
(𝑥1, 𝑦1) ва (𝑥2, 𝑦2) туташтирувчи кесманинг растр тасвирини қуриш масаласини кўрамиз.
Фараз қиламизки
0 ≤ 𝑦1 ≤ 𝑦2 ≤ 𝑥1 ≤ 𝑥2
Берилган иккита нуқтадан ўтувчи тўғри чизиқ тенгламасини тузамиз
𝑥 − 𝑥1 𝑦 − 𝑦1
=
𝑥2 − 𝑥1 𝑦2 − 𝑦1
Унда кесма қуйидаги тенглама билан берилади:
𝑦 = 𝑦1 + 𝑥𝑦22−−𝑦𝑥11 (𝑥 − 𝑥1),
x∈ 𝑥1, 𝑥2
Ушбу алгоритм камчиликларга эга, яъни бутун сонли сетка устида амаллар бажаришда ҳақиқий сонларга мурожааат қилиш.
𝑦 = 𝑘𝑥 + 𝑏, 𝑘 = 𝑦2−𝑦1, 𝑏 = 𝑦1 − 𝑘𝑥1,
𝑥2−𝑥1
1965 йилда Брезенхейм томонидан кесманинг растр тасвирини қуриш учун оддий бутун сонли алгоритмни тавсия қилган (𝑥1, 𝑦1) ва (𝑥2, 𝑦2) нуқталари орқали ифодаланувчи кесманинг Брезенхейм алгоритмини келитирамиз. Кесмани шундай қилиб кўчирамизки (0, 0) нуқта боши ва (dx, dy) (бу ерда dx= (𝑥2 − 𝑥1), dy= (𝑦2 − 𝑦1) ) нуқта охири бўлсин. Кесма ётувчи тўғри чизиқ
𝑑𝑦 тенгламаси қуйидагича: 𝑦 = ∗ 𝑥)
𝑑𝑥
Кесманинг 𝑃𝑖−1 = 𝑥𝑖−1, 𝑦𝑖−1 = (𝑟, 𝑞) нуқтасини кўрамиз, унда кейинги нуқта
𝑆𝑖 = (𝑟 + 1, 𝑞) ёки 𝑇𝑖 = (𝑟 + 1, 𝑞 + 1)
бўлиши мумкин. Тўғри чизиқ (кесма) унга яқин жойлашган пикселлар (𝑆𝑖, 𝑇𝑖 )
орасидаги масофалар қуйидагича:
𝑑𝑦𝑑𝑦
𝑆 = 𝑟 + 1 − 𝑞 , 𝑡 = 𝑞 + 1 − 𝑟 + 1
𝑑𝑥𝑑𝑥
𝑑𝑦
𝑆 − 𝑡 = 2 𝑟 + 1 − 2𝑞 − 1
𝑑𝑥
кўрамиз.
Агар 𝑆−𝑡 <бўлса0 𝑆𝑖 нуқта танланади акс ҳолда 𝑇𝑖 нуқта
d𝑥 > 0 ҳисобга олган ҳолда d𝑥(𝑆 − 𝑡) ҳам кўраверсак бўлади ва уни 𝑑𝑖 деб белгалаймиз 𝒅𝒊 = 𝟐𝒅𝒚 𝒓 + 𝟏 − 𝟐𝒒𝒅𝒙 − 𝒅𝒙
𝑟 = 𝑥𝑖−1 ва 𝑞 = 𝑦𝑖−1 ҳисобга олган ҳолда
𝒅𝒊 = 𝟐𝒅𝒚𝒙𝒊−𝟏 − 𝟐𝒅𝒙𝒚𝒊−𝟏 + 𝟐𝒅𝒚 − 𝒅𝒙
Кейинги қадамда яъни 𝑖 + 1
𝒅𝒊+𝟏 = 𝟐𝒅𝒚𝒙𝒊 − 𝟐𝒅𝒙𝒚𝒊 + 𝟐𝒅𝒚 − 𝒅𝒙
𝑑𝑖+1 дан 𝑑𝑖 ни айирамиз ва 𝑥𝑖 − 𝑥𝑖−1 ни ҳисобга олган ҳолда:
𝒅𝒊+𝟏 = 𝒅𝒊 + 𝟐𝒅𝒚 − 𝟐𝒅𝒙(𝒚𝒊 − 𝒚𝒊−𝟏)
Агар яъни 𝑑𝑖 <0 бўлса 𝑆𝑖 танланади, у ҳолда
𝑦𝑖 = 𝑦𝑖−1 ва 𝑑𝑖+1 = 𝑑𝑖 + 2𝑑𝑦
Акс ҳолда, яъни 𝑑𝑖 ≥ 0 бўлса 𝑇𝑖 танланади ва у ҳолда 𝑦𝑖 − 𝑦𝑖−1 = 1
𝒅𝒊+𝟏 = 𝒅𝒊 + 𝟐(𝒅𝒚 − 𝒅𝒙)
Шундай қилиб биз 𝑑𝑖+1 ни 𝑑𝑖 нинг қиймати орқали ҳисоблаш ва 𝑆𝑖, 𝑇𝑖 нуқталарни танлаш учун интерактив усулни ҳосил қилдик. Бошланғич ҳолатда 𝑑1 = 2𝑑𝑦 − 𝑑𝑥 (𝑥0, 𝑦0 ) = 0,0 ни ҳисобга олган ҳолда 𝑖 = 1 топилади.
0>
Do'stlaringiz bilan baham: |