Systemy projektowania grafiki

Transkrypt

Systemy projektowania grafiki
Systemy projektowania grafiki
1. Napisać programy rysujące aproksymację okręgu i koła wykorzystując odpowiednie
równanie parametryczne.
2. Napisać program rysujący spirale przedstawione na poniższych rysunkach
3. Napisać programy rysujące kawałki wykresów następujących funkcji
(a) f (x) = x3 dla x ­ 0
(b) f (x) = sin x, g(x) = cos x dla x ­ 0 (każdy innym kolorem)
4. Napisać programy rysujące następujące „wzorki”
5. Wykorzystując translate, rotate, scale napisać programy rysujące następujące „wzorki”
6. Napisać program „rysujący” choinkę o zadanej liczbie segmentów. Wyboru ilości segmentów dokonujemy podczas działania programu przy pomocy klawiszy 1-9. Przykładowo dla 2 powinno się ukazać
1
7. Zapoznać się z funkcjami blend oraz filter, a następnie napisać programy ilustrujące
działanie tych funkcji.
W przypadku funkcji blend w programie mają być wyświetlane obrazy, na których
będziemy działać oraz wynikowy obraz z podpisem jakiej operacji użyliśmy. Operacje
mają być wybierane z klawiatury. Przykładowo może to wyglądać następująco:
W przypadku funkcji filter w programie podobnie jak poprzednio ma być wyświetlany
oryginalny obraz oraz obraz wynikowy z podpisem jakiej operacji użyliśmy. Operacje
ponownie mają być wybierane z klawiatury. Przykładowo może to wyglądać następująco:
8. Napisać program do przetwarzania obrazu zgodnie z następującymi maskami


0.11 0.11 0.11


0.11 0.11 0.11
0.11 0.11 0.11


−1 −1 −1


−1 12 −1
−1 −1 −1





−1 0 1


−2 0 2
−1 0 1





−2 0 1


−3 0 2
−2 0 1



−1 −1 −1


−1 8 −1
−1 −1 −1
0.11 0.11 0.11


0.11 0.66 0.11
0.11 0.11 0.11


−1 −2 −1

0
0
 0

1
2
1

−1 −2 −1
0 −1 0
0 −1 0

 
 
0
0
0
−1
4
−1
−1
6 −1

 
 

2
3
2
0 −1 0
0 −1 0
Podobnie jak w poprzednim zadaniu w programie ma być wyświetlany oryginalny obraz
oraz obraz po przekształceniu. Maskę przekształcenia powinno wybierać się klawiszami
0-9. Przykładowo może to wyglądać następująco:
2
9. Napisać program działający jako zegar
(a) cyfrowy
(b) ze wskazówkami.
10. Napisać program do wizualizacji procesu przesiewania w algorytmie sita Eratostenesa.
Algorytm 1 przedstawia algorytm sita Eratostenesa.
Algorytm 1: Sito Eratostenesa
Dane: n ∈ N
Wynik: Tablica zawierająca liczby pierwsze ¬ n
Utwórz listę L = {1, . . . , n}
L[1] √
=0
k= n
for i = 2, . . . , k do
if L[i] 6= 0 then
for j = i2 , i2 + i, i2 + 2i, . . . , n do
L[j] = 0
for i = 2, . . . , n do
if L[i] 6= 0 then
Pisz i
11. Do programu z poruszającymi się cząsteczkami dodać możliwość przesuwania punktu,
z którego cząsteczki zaczynają swój ruch. Przesuwanie ma się odbywać przy pomocy
myszki z wciśniętym klawiszem.
12. Napisać funkcję realizującą interpolację Lagrange’a:
http://mathworld.wolfram.com/LagrangeInterpolatingPolynomial.html
Następnie napisać program, który wczyta z pliku punkty do interpolacji i wykorzystując
napisaną wcześniej funkcję przeprowadzi interpolację i wyświetli odpowiedni wykres.
13. Napisać program wyświetlający histogramy następujących danych
(a) obrazu Leny,
(b) danych z pliku histogram.tsv.
14. Jesteś snajperem i masz za zadanie obserwować cel. Swoje obserwacje odnośnie położenia celu zapisujesz w postaci pary liczb (r, θ), gdzie r oznacza odległość celu od Twojej
3
pozycji wyrażonej w metrach, θ oznacza kąt pomiędzy kierunkiem wschodnim a prostą
wyznaczoną przez Twoją pozycję i pozycję celu. W pliku cel.txt znajdują się zanotowane
położenia. Napisać program, który wczyta podany plik a następnie narysuje przebytą
przez cel drogę.
15. Napisać grę w „węża”.
16. Wiadomo, że dowolny płat bikubiczny moża przedstawić za pomocą odwzorowania
S : R2 ⊃ [0, 1]2 → R3 postaci
P0,0
P
i
1,0
u 1 · MuT · 

P2,0
P3,0

h
S(u, v) = u3 u2
P0,1
P1,1
P2,1
P3,1
P0,2
P1,2
P2,2
P3,2
v3
P0,3
v 2 
P1,3 
 

 · Mv ·  
v

P2,3
1
P3,3



gdzie Mu , Mv ∈ R44 są macierzami przejścia między bazami, a P0,0 , . . . , P3,3 ∈ R3 są
punktami kontrolnymi płata.
Napisać funkcję rysującą płat bikubiczny na podstawie podanych punktów kontrolnych
oraz macierzy przejścia Mu , Mv (ustawić również normale). Przykładowe macierze przejścia
(a) Béziera
−1 3 −3 1
 3 −6 3 0




−3 3
0 0
1
0
0 0


(b) Catmulla-Roma
−1 2 −1 0

1  3 −5 0 2





−3
4
1
0
2
1 −1 0 0


(c) b-splain
−1 3 −3 1

1  3 −6 0 4




3 1
6 −3 3
1
0
0 0


(d) Hermite’a
2 −3 0 1
 1 −2 1 0




−2 3 0 0
1 −1 0 0


17. W plikach teapot, teacup, teaspoon znajdują się opisy czajniczka, filiżanki oraz łyżeczki
przy pomocy bikubicznych płatów Béziera. Napisać program, który wczyta te opisy, a
następnie korzystając z funkcji z poprzedniego zadania narysuje poszczególne obiekty.
4
18. Napisać funkcje rysujące podstawowe prymitywy 3D wykorzystując podane równania
parametryczne. Podobnie jak przy płatach ustawić normale.
(a) void Cone(float Height, float radius, float thetamax)
θ = u · thetamax
x = radius · (1 − v) · cos θ
y = radius · (1 − v) · sin θ
z = v · Height
(b) void Cylinder(float radius, float zmin, float zmax, float thetamax)
θ = u · thetamax
x = radius · cos θ
y = radius · sin θ
z = v · (zmax − zmin)
(c) void Sphere(float radius, float zmin, float zmax, float thetamax)

arcsin( zmin
) , gdy zmin > −radius
, gdy zmin ¬ −radius

arcsin( zmax
) , gdy zmax < radius
, gdy zmax ­ radius
φmin = 
−90.0
φmax = 
90.0
radius
radius
φ = φmin + v · (φmax − φmin )
θ = u · thetamax
x = radius · cos θ · cos φ
y = radius · sin θ · cos φ
z = radius · sin φ
(d) void Paraboloid(float rmax, float zmin, float zmax, float thetamax)
θ = u · thetamax
z = v · (zmax − zmin)
r
z
r = rmax ·
zmax
x = r · cos θ
y = r · sin θ
(e) void Disk(float Height, float radius, float thetamax)
θ = u · thetamax
x = radius · (1 − v) · cos θ
y = radius · (1 − v) · sin θ
z = Height
5
(f) void Hyperboloid(float[] point1, float [] point2, float thetamax)
θ = u · thetamax
xr = (1 − v)x1 + v · x2
yr = (1 − v)y1 + v · y2
zr = (1 − v)z1 + v · z2
x = xr · cos θ − yr · sin θ
y = xr · sin θ + yr · cos θ
z = zr
zakładając, że point1 = [x1 , y1 , z1 ], point2 = [x2 , y2 , z2 ].
(g) void Torus(float majorradius, float minorradius, float phimin, float phimax,
float thetamax)
θ = u · thetamax
φ = phimin + (phimax − phimin) · v
r = minorradius · cos φ
z = minorradius · sin φ
x = (majorradius + r) · cos θ
y = (majorradius + r) · sin θ
Na rysunkach poniżej przedstawiono powyższe prymitywy wraz ze znaczeniem parametrów.
6
z
z
z
z
N
zmax
height
point2
x
V
zmin
V
U
V
y
x
U
height
x
x
U
y
0max
0max
y
radius
point1
0max
y
radius
radius
RiCone
V
U
0max
RiCylinder
RiDisk
RiHyperboloid
z
z
0max
rmax
z
zmax
0min
V
x
y
zmax
U
0max
zmin
V
y
V
U
zmin
U
0max
y
radius
major
radius
x
minor
radius
RiTorus
0max
RiParaboloid
RiSphere
Figure 5.4: Quadric Surface Primitives (continued)
Figure 5.3: Quadric Surface Primitives
81
82
x
19. Zapoznać się z biblioteką controlP5 służącą do tworzenia graficznego interfejsu użytkownika. Można ją znaleźć pod adresem:
http://www.sojamo.de/libraries/controlP5/
Następnie napisać program wyświetlający płat bikubiczny z GUI umożliwającym wybór
macierzy przejścia w obu kierunkach oraz zmiany punktów kontrolnych.
Zadania dodatkowe
i. Napisać program, w którym będziemy mogli sterować kształtem płata bikubicznego
poruszając (przy pomocy klawiatury albo myszki – jedno do wyboru) punktami kontrolnymi.
ii. Napisać funkcję PatchMesh, która rysuje połączone płaty bikubiczne na podstawie podanej siatki punktów kontrolnych. Funkcja powinna przyjmować trzy parametry: liczbę
punktów kontrolnych nu w kierunku u, liczbę punktów kontrolnych nv w kierunku
v, tablicę punktów kontolnych, których liczba wynosi nu · nv. W przypadku pisania
tej funkcji należy uwzględnić przesunięcie współrzędnych dla poszczególnych macierzy
przejścia: Bézier 3, Catmull-Rom 1, b-spline 1, Hermite 2. Liczba płatów w kierunku u
wynosi
nu − 4
+1
nupatches =
nustep
gdzie nustep oznacza przesunięcie współrzędnych w kierunku u. Analogiczny wzór zachodzi dla liczby płatów w kierunku v.
iii. W pliku bulb znajduje się opis żarówki. Napisać program, który wczyta ten opis (tylko
raz!) i wyświetli tą żarówkę.
Literatura
[1] Processing Homepage, http://processing.org/
[2] B. Fry, Visualizing Data, O’Reilly, 2008
[3] I. Greenberg, Processing: Creative Coding and Computational Art, Friendsofted, 2007
[4] D. Havey, http://www.donhavey.com/blog/category/tutorials/processing/
[5] C. Reas, B. Fry, Processing: A Programming Handbook for Visual Designers and Artists,
MIT Press, 2007
[6] D. Rocchesso, Media Processing in Processing, http://cnx.org/content/col10268/latest/
[7] D. Shiffman, Learning Processing: A Beginner’s Guide to Programming Images, Animation, and Interaction, Morgan Kaufmann, 2008
[8] D. Shiffman, Procedural Painting, http://www.shiffman.net/itp/classes/ppaint/
[9] D. Shiffman, The Nature of Code, http://www.shiffman.net/teaching/nature/
8