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