PutPixel(X,Y,Rang) operatori ekranning (X,Y) koordinatali nuqtasini “Rang” parametri bilan aniqlangan rangga bo‘yaydi. Masalan, PutPixel(400,200,Red) operatori ekranning (400,200) koordinatasiga mos joyda qizil rangli nuqta joylashtiradi (yuqoridagi rasm).
GetPixel(X,Y) funksiyasi ekranning (X,Y) koordinatali nuqtasi qanday rangda ekanini aniqlaydi. Masalan, Rang – butun tipli o‘zgaruvchi bo‘lsa, Rang:= GetPixel(40,50); operatori bajarilgach Rang o‘zgaruvchi (40,50) koordinatali nuqta rangining qiymatiga teng bo‘ladi.
GetMaxX va GetMaxY funksiyalari mos ravishda ekranning gorizontal va vertikal yo‘nalishi bo‘yicha maksimal koordinatasini aniqlaydi. Bu funksiyalar kompyuterning grafik adapteri va ishlatiladigan grafik holatga bo‘g‘liq bo‘lmagan dasturlar tuzishda foydalidir.
1-misol. Nuqtalar yordamida ekranning (0,0) nuqtasini (639,479) nuqtasi bilan tutashtiruvchi qizil rangli kesma chizish dasturini tuzing.
Y echish. Quyidagicha butun o’zgaruvchilarni qiymati bilan olamiz: bx:=0; ox:= GetMaxX; (ox:=639; kabi olish mumkin). Tekshirib ko’rishingiz mumkin, [bx, ox] oraliqda y=[GetMaxY·x/GetMaxX] butun qiymatli chiziqli funksiyaning boshlang’ich qiymati 0 va oxirgi qiymati 479 bo’ladi (GetMaxY o’rniga 479 yozish ham mumkin). Endi parametrli takrorlash operatori yordamida tuzilgan quyidagi dastur misol yechimini beradi.
Uses Graph;
Var gd, gm:integer; bx, y, ox: Integer; x: LongInt;
Begin
Gd := 0; InitGraph(Gd, Gm, ‘‘); bx:=0; ox:= GetMaxX;
For x:= bx to ox do begin
y:= trunc(GetMaxY*x/GetMaxX); putpixel(x, y, red); end;
Readln; CloseGraph;
End.
Nima uchun x o’zgaruvchi LongInt turda olinganini o’ylab ko’ring!
2-misol. Nuqtalar yordamida ekran markazida R radiusli sariq rangli aylana chizish dasturini tuzing.
Yechish. Ekran markazini aniqlaydigan butun o’zgaruvchilarni kiritib olamiz: markazX:=trunc(GetMaxX/2); markazY:=trunc(GetMaxY/2); (yoki markazX:=639; va markazY:=479). Matematikadan ma’lumki, ta’rif bo’yicha va . Bundan kelib chiqadiki, markazi (0,0) nuqtada bo’lgan R radiusli aylana nuqtalarini quyidagi formulalar juftligi orqali aniqlash mumkin: x = r·cos(), y = r·sin(), bunda burchak 0 dan 2 gacha o’zgaradi. Dasturda aylana nuqtalarini zichroq chizish uchun burchak o’zgarishini 0,01 qadam bilan olamiz. Shularga asosan quyidagi dasturni tuzamiz.
Uses Graph;
Var gd, gm:integer;
x, y, markazX, markazY: Integer; R, alfa: real;
Begin
Gd := 0; InitGraph(Gd, Gm, ‘‘); Write(‘R= ‘); readln(R);
markazX:=trunc(GetMaxX/2); markazX:=trunc(GetMaxY/2); alfa:=0;
while alfa<=2*pi do begin
x:= GetMaxX +trunc(R*cos(alfa)); y:= GetMaxY +trunc(R*sin(alfa));
putpixel(x, y, 14); alfa:= alfa+0.01; end;
Readln; CloseGraph;
End.
Dasturda masshtabni kattalashtirish uchun x ni 10 ga, y ni 5 ga ko’paytirdik. Parabola shoxchalari quyidan yuqoriga yo’nalgan bo’lishi uchun “–” ishora qo’yilgan. Masshtabni kattalashtirishni va ishorani olib tashlab dasturni ishlatib ko’rishni o’zingizga havola etamiz.
Do'stlaringiz bilan baham: |