t lab1 sprawko


Data wykonania ćwiczenia:
19 XII 2009
Teodor Kulej
I8Y1S1
Grafika komputerowa
Ćwiczenie labolatoryjne 1
Sprawozdanie

Prowadzący:
mgr inż. W.Sulej
Ćwiczenie labolatoryjne polegało na przekształceniu udostępnionego przez prowadzącego programu
tak, aby realizował zadane efekty graficzne.
Program symuluje pracę urządzenia rastrowego. Obsługa symulowanego urządzenia polega na
podawaniu wirtualnemu miotaczowi elektronów (zakładając, że mamy do czynienia z urządzeniem
typu wyświetlacz CRT) informacji o kolorze za pomocą poleceń:
ReadPixel(i,j) - to polecenie wczytuje piksel o współrzędnych i,j z pamięci obrazu i przesyła go do
urządzenia rastrowego
ReadTlo(N)  to polecenie przesyła wysyła do rastra piksel odpowiadający tłu.
W programie wykorzystywana jest zmienna p oznaczająca aktualną klatkę w animacji efektu.
Zadanie 1
Zadanie to polegało na napisaniu algorytmu w wyniku którego na rastrze uzyskany zostanie obraz
odpowiadający efektowi zasłaniania obrazu w prawo. Kod opracowany przeze mnie wygląda
następująco:
public void Efekt1()
{
//L - maksymalna liczba linii
//K - maksymalna liczba kolumn
//j - zmienna pomocnicza
int klatka=p;
if (klatka >= L) klatka = 0;
for(int j=1;j<=L;j++)
for(int i=1;i<=K;i++)
{
if(false==(i>klatka)) ReadTlo(N);
else
ReadPixel(i,j);
}
p=klatka;
}
Rozwiązanie użyte przeze mnie odbiega od zastosowanego pierwotnie w zadaniu. Zamiast kilku
następujących po sobie pętli zastosowałem tu dwie pętle, jedną zagnieżdżoną w drugiej i w
zależności od warunku w poleceniu if kazałem programowi rysować albo tło albo odpowiedni piksel.
Warunek pozwala precyzyjnie określić numer klatki, i w razie gdyby numer kolumny był mniejszy niż
numer klatki, rysowania tła, a w przeciwnym wypadku  obrazka.
Zadanie 2
Zadanie to polegało na napisaniu programu realizującego algorytm przewijania obrazu z góry na dół.
Oto napisany przeze mnie kod:
public void Efekt2()
{
int tmp=0;
if (p >= L){ p = 0;}
int klatka=p;
if (klatka >= L) klatka = 0;
for(int j=1;j<=L;j++)
{
for(int i=1;i<=K;i++)
{
ReadPixel( i ,(j+(K-klatka))%K+1);
}
tmp++;
}
p=klatka;
}
W tym zadaniu, podobnie jak w poprzednim wykorzystałem inną konstrukcję pętli głównych. Przy
przechodzeniu po kolejnych liniach numer odczytywanej linii jest zwiększany o różnicę
maksymalnego numeru linii i numeru klatkii, a następnie dzielony modulo przez ilość linii. Dzięki
temu obraz  zaczyna się niżej, a ponad nim wyświetlane jest to, co nie mieści się w ramce u dołu.
Zadanie 3
W zadaniu tym należało napisać efekt przesuwania obrazu w kierunku górnego prawego
rogu. Aby uzyskać ten efekt korzystałem ze zmiennych pomocniczych zwiększających
czytelność kodu.
Oto napisany przeze mnie kod:
public void Efekt3()
{
int newX, newY;
if (p >= L){ p = 0;}
int klatka=p;
if (klatka >= L) klatka = 0;
for(int j=1;j<=L;j++)
{
for(int i=1;i<=K;i++)
{
newY=(i+K-klatka)%K ;
newX=(j+klatka)%L;
if( L-j>klatka && i>klatka)
ReadPixel( newY +1 ,newX+1);
else
ReadTlo(N);
}
}
p=klatka;
}
Wnioski:
Wyniki uzyskane przeze mnie są zgodne z zadanymi przez prowadzacego. Realizacja zadań nie była
trudna, o ile można było sobie wyobrazić schemat działania rastra i jakim przekształceniom trzeba
poddać współrzędne pobieranego obrazu, aby uzyskać zadany efekt. Mimo wszystko jednak
operowanie na wyższym poziomie abstrakcji, z dostępem do bufora obrazu, a nie do samego rastra,
jest wygodniejsze i prostsze w uzyciu.


Wyszukiwarka

Podobne podstrony:
lab1 sprawko
sprawko lab1 ubytkowa
karol sprawkografika lab1
Lab1 RoboWorks
kaskada sprawko
geodezja sprawko 3
sprawko 48 (1)
APD lab1
SPALANIE SPRAWKO 7n
LABORATORIUM CHEMIA I WYTRZYMALOSC MATERIALOW sprawko 1
lab1 wprowadzenie
lab1(3)
przykładowe sprawko
Lab1 PA podstawy PSCAD v2
Lab1 1 R3 lab11

więcej podobnych podstron