Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Zadanie 1

Smok Heighwaya to zbiór punktów w prostokątnym układzie współrzędnychukład współrzędnychukładzie współrzędnych, którego generowanie może być wynikiem serii następujących po sobie przekształceń geometrycznychprzekształcenie geometeryczneprzekształceń geometrycznych, zachodzących na danym punkcie p = ( p x ,   p y ) . Można je opisać za pomocą dwóch par równań:

  1. p x = 0 , 5 p x 0 , 5 p y p y = 0 , 5 p x + 0 , 5 p y
  2. p x = 0 , 5 p x 0 , 5 p y + 1 p y = 0 , 5 p x 0 , 5 p y

Wybór kolejnego przekształcenia jest losowy z jednakowym prawdopodobieństwem. Generowanie punktów zaczynamy od punktu początkowego  p 0 = ( 0 ,   0 ), wykonując określoną liczbę przekształceń kolejnych punktów.

Korzystając z dostępnych narzędzi informatycznych, wykonaj poniższe polecenia.

Zadanie 1.1

W pliku losowe_liczby.txt znajduje się 10000 wierszy. Każdy z nich zawiera liczbę 1 lub 2. Dla każdej kolejnej liczby w pliku wykonaj przekształcenie poprzedniego punktu zgodnie z podanym sposobem generacji smoka Heighwaya (jeżeli w pliku znajduje się liczba 1, to zostaną wykonane przekształcenia oznaczone numerem 1, a w przypadku liczby 2 – przekształcenia oznaczone jako 2). Utwórz wykres, na którym zaprezentujesz wygenerowane punkty.

R1O2NH4JrckXY

Plik tekstowy zawierający jedynki i dwójki.

Plik losowe_liczby.txt
Plik TXT o rozmiarze 29.30 KB w języku polskim

W wyniku przekształceń otrzymamy fraktal:

RzJvMJ0n90oba
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Zadanie 1.2

Wyznacz wysokość, a także szerokość utworzonego kształtu w układzie współrzędnych.

Zadanie 1.3

Obrót punktu p = ( p x ,   p y )  wokół początku układu współrzędnych o kąt α można osiągnąć, stosując następujące przekształcenie:

p x = p x cos ( α ) p y sin ( α ) p y = p x sin ( α ) + p y cos ( α )

Dokonaj obrotu utworzonych w podpunkcie 1. punktów o kąt α = 90 ° . Utwórz fraktal, na którym przedstawisz dwa bliźniacze smoki Heighwaya – każdy w innym kolorze.

Rozwiązanie:

Zadanie można rozwiązać w całości w arkuszu kalkulacyjnym, jednak prezentowane w tym materiale rozwiązanie będzie pokazane pod postacią pseudokodu, który należy zaimplementować w wybranym języku programowania.

Zadanie 1.1

Zacznijmy od napisania głównej pętli programu, w której wczytywane, a następnie przetwarzane będą kolejne losowe liczby z pliku losowe_liczby.txt.

Linia 1. dopóki plik losowe podkreślnik liczby kropka txt się nie skończył przecinek wykonuj dwukropek. Linia 2. wczytaj liczbę a z pliku.

W programie należy dodać także definicję aktualnie przetwarzanego punktu początkowego. W tym celu utwórzmy 2 zmienne pX oraz pY typu zmiennoprzecinkowego, które zainicjujemy wartościami 0 – zgodnie z warunkiem początkowym.

Linia 1. pX znak równości 0 kropka 0. Linia 2. pY znak równości 0 kropka 0. Linia 4. dopóki plik losowe podkreślnik liczby kropka txt się nie skończył przecinek wykonuj dwukropek. Linia 5. wczytaj liczbę a z pliku.

Wartość wczytanej zmiennej a zadecyduje, któremu z przekształceń 1 lub 2 należy poddać nasz punkt. W pętli głównej programu umieścimy instrukcję warunkową oraz zaimplementujmy przekształcenia podane w treści zadania. W tym celu dodamy w programie nowe zmienne pXNowe, pYNowe, które będą oznaczały współrzędne punktu po przekształceniu. Następnie obliczone wartości przypiszemy do aktualnego punktu – odpowiednio do zmiennych pX oraz pY.

Linia 1. pX znak równości 0 kropka 0. Linia 2. pY znak równości 0 kropka 0. Linia 4. dopóki plik losowe podkreślnik liczby kropka txt się nie skończył przecinek wykonuj dwukropek. Linia 5. wczytaj liczbę a z pliku. Linia 7. jeżeli a znak równości znak równości 1 wykonaj dwukropek. Linia 8. pXNowe znak równości 0 kropka 5 asterysk pX minus 0 kropka 5 asterysk pY. Linia 9. pYNowe znak równości 0 kropka 5 asterysk pX plus 0 kropka 5 asterysk pY. Linia 10. w przeciwnym razie wykonaj dwukropek. Linia 11. pXNowe znak równości minus 0 kropka 5 asterysk pX minus 0 kropka 5 asterysk pY plus 1. Linia 12. pYNowe znak równości 0 kropka 5 asterysk pX minus 0 kropka 5 asterysk pY. Linia 14. pX znak równości pXNowe. Linia 15. pY znak równości pYNowe.
Ważne!

Warto zwrócić tutaj szczególną uwagę na potrzebę utworzenia nowych zmiennych pomocniczych: pXNowe, pYNowe. W przeciwnym wypadku moglibyśmy obliczyć nową współrzędną pX, a następnie wykorzystać ją do obliczenia pX.

Utworzony program jest w zasadzie gotowy. Pozostało tylko zamieścić w nim instrukcję, która odpowiadać będzie za rysowanie utworzonych punktów w układzie współrzędnych.

Ze względu na ograniczony dostęp do bibliotek graficznych w niektórych środowiskach programistycznych w programie można zawrzeć kod przygotowujący dane dla arkusza kalkulacyjnego, w którym następnie utworzymy wykres.

Linia 1. pX znak równości 0 kropka 0. Linia 2. pY znak równości 0 kropka 0. Linia 4. dopóki plik losowe podkreślnik liczby kropka txt się nie skończył przecinek wykonuj dwukropek. Linia 5. wczytaj liczbę a z pliku. Linia 7. jeżeli a znak równości znak równości 1 wykonaj dwukropek. Linia 8. pXNowe znak równości 0 kropka 5 asterysk pX minus 0 kropka 5 asterysk pY. Linia 9. pYNowe znak równości 0 kropka 5 asterysk pX plus 0 kropka 5 asterysk pY. Linia 10. w przeciwnym razie wykonaj dwukropek. Linia 11. pXNowe znak równości minus 0 kropka 5 asterysk pX minus 0 kropka 5 asterysk pY plus 1. Linia 12. pYNowe znak równości 0 kropka 5 asterysk pX minus 0 kropka 5 asterysk pY. Linia 14. pX znak równości pXNowe. Linia 15. pY znak równości pYNowe. Linia 17. rysuj punkt otwórz nawias okrągły pX przecinek pY zamknij nawias okrągły.

Zadanie 1.2

Aby wyznaczyć wysokość i szerokość utworzonego kształtu, będziemy potrzebowali dodatkowych zmiennych: xMax, xMin, yMax, yMin, które będą przechowywać maksymalne oraz minimalne wartości współrzędnych wśród wygenerowanych punktów. Za każdym razem po wyznaczeniu nowego punktu trzeba będzie porównywać jego współrzędne, aby wyznaczyć te, które są największe oraz najmniejsze odpowiednio na osiach OX oraz OY. Następnie pozostaje obliczyć różnicę pomiędzy xMaxxMin oraz między yMaxyMax.

Linia 1. pX znak równości 0 kropka 0. Linia 2. pY znak równości 0 kropka 0. Linia 4. xMax znak równości 0 kropka 0. Linia 5. xMin znak równości 0 kropka 0. Linia 6. yMax znak równości 0 kropka 0. Linia 7. yMin znak równości 0 kropka 0. Linia 9. dopóki plik losowe podkreślnik liczby kropka txt się nie skończył przecinek wykonuj dwukropek. Linia 10. wczytaj liczbę a z pliku. Linia 12. jeżeli a znak równości znak równości 1 wykonaj dwukropek. Linia 13. pXNowe znak równości 0 kropka 5 asterysk pX minus 0 kropka 5 asterysk pY. Linia 14. pYNowe znak równości 0 kropka 5 asterysk pX plus 0 kropka 5 asterysk pY. Linia 15. w przeciwnym razie wykonaj dwukropek. Linia 16. pXNowe znak równości minus 0 kropka 5 asterysk pX minus 0 kropka 5 asterysk pY plus 1. Linia 17. pYNowe znak równości 0 kropka 5 asterysk pX minus 0 kropka 5 asterysk pY. Linia 19. pX znak równości pXNowe. Linia 20. pY znak równości pYNowe. Linia 22. jeżeli pX zamknij nawias ostrokątny xMax wykonaj dwukropek. Linia 23. xMax znak równości pX. Linia 24. w przeciwnym razie wykonaj dwukropek. Linia 25. xMin znak równości pX. Linia 27. jeżeli pY zamknij nawias ostrokątny yMax przecinek wykonaj dwukropek. Linia 28. yMax znak równości pY. Linia 29. w przeciwnym razie wykonaj dwukropek. Linia 30. yMin znak równości pY. Linia 32. wysokość znak równości yMax minus yMin. Linia 33. szerokość znak równości xMax minus xMin. Linia 34. wypisz wysokość. Linia 35. wypisz szerokość.

Dla danych dostarczonych w pliku otrzymamy w tym zadaniu odpowiedź zbliżoną do poniższej:

Linia 1. wysokość znak równości 0 kropka 9961862761707053. Linia 2. szerokość znak równości 1 kropka 495520476029701.

Zadanie 1.3

W wykorzystywanych na egzaminie maturalnym językach programowania dostępne są funkcje oraz stałe matematyczne, dlatego w rozwiązaniu wykorzystamy funkcje trygonometryczne sin() oraz cos(), a także stałą PI. Ponieważ kąt, o który będziemy obracać punkty, jest stały, już na początku możemy obliczyć wartość używanych funkcji trygonometrycznych.

Linia 1. sin otwórz nawias okrągły 90° zamknij nawias okrągły znak równości sin otwórz nawias okrągły PI prawy ukośnik 2 zamknij nawias okrągły. Linia 2. cos otwórz nawias okrągły 90° zamknij nawias okrągły znak równości cos otwórz nawias okrągły PI prawy ukośnik 2 zamknij nawias okrągły.

W celu realizacji przekształcenia utwórzmy dwie nowe zmienne rX oraz rY, które będą reprezentowały punkt obrócony o 90 stopni. Następnie w pseudokodzie wykorzystamy – podany w zadaniu – wzór wykorzystany do przekształcenia punktów. Kolejną czynnością będzie rysowanie punktów (oryginalnego oraz obróconego) w różnych kolorach – tak jak nakazuje rozwiązanie.

Linia 1. sin90° znak równości sin otwórz nawias okrągły PI prawy ukośnik 2 zamknij nawias okrągły. Linia 2. cos90° znak równości cos otwórz nawias okrągły PI prawy ukośnik 2 zamknij nawias okrągły. Linia 4. pX znak równości 0 kropka 0. Linia 5. pY znak równości 0 kropka 0. Linia 7. dopóki plik losowe podkreślnik liczby kropka txt się nie skończył przecinek wykonuj dwukropek. Linia 8. wczytaj liczbę a z pliku. Linia 10. jeżeli a znak równości znak równości 1 wykonaj dwukropek. Linia 11. pXNowe znak równości 0 kropka 5 asterysk pX minus 0 kropka 5 asterysk pY. Linia 12. pYNowe znak równości 0 kropka 5 asterysk pX plus 0 kropka 5 asterysk pY. Linia 13. w przeciwnym razie wykonaj dwukropek. Linia 14. pXNowe znak równości minus 0 kropka 5 asterysk pX minus 0 kropka 5 asterysk pY plus 1. Linia 15. pYNowe znak równości 0 kropka 5 asterysk pX minus 0 kropka 5 asterysk pY. Linia 17. pX znak równości pXNowe. Linia 18. pY znak równości pYNowe. Linia 20. rX znak równości pX asterysk cos90° minus pY asterysk sin90. Linia 21. rY znak równości pX asterysk sin90° plus pY asterysk cos90. Linia 23. rysuj punkt otwórz nawias okrągły pX przecinek pY zamknij nawias okrągły w kolorze niebieskim. Linia 24. rysuj punkt otwórz nawias okrągły rX przecinek rY zamknij nawias okrągły w kolorze pomarańczowym.

Po poprawnej implementacji powyższego pseudokodu, utworzony fraktal będzie prezentował się następująco:

RfrmargmQ7WyV
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Słownik

przekształcenie geometeryczne
przekształcenie geometeryczne

funkcja przekształcająca dany zbiór punktów na inny zbiór punktów

układ współrzędnych
układ współrzędnych

odwzorowanie, które każdemu punktowi w przestrzeni k‑wymiarowej przypisuje ciąg k liczb rzeczywistych zwanych współrzędnymi