Projekt 3
Techniczne warunki zaliczenie
- Termin:
- Format: Pojedynczy plik
R
kodowany jako UTF-8 - Zawartość: w komentarzu w pierwszej linii proszę podać imię, nazwisko i numer albumu, skrypt musi tworzyć zawierać definicję funkcji oraz przykłady
- Pakiety: standardowe;
- Osoba: plik należy przesłać do osoby prowadzącej zajęcia na adres szkolny z adresu szkolnego
Opis projektu
Zadanie polega na napisaniu funkcji pathPlot()
służącej do tworzenia prostych wykresów parametrycznych. Niech dana będzie funkcja \( f: R \rightarrow R^2 \). Zadanie polega na napisaniu funkcji, która tworzy wykres parametryczny podanej funkcji \( f \) a więc na narysowaniu zbioru \( \{x \in R^2 : x = f(t), t \in T\} \), gdzie \( T \subset R\) jest odcinkiem.
Funkcja pathPlot()
powinna przyjmować następujące argumenty:
path
funkcja \( f \),domain
wektor określający przedział \( T \)n = 100
liczba całkowita określająca liczbę punktów tworzonych do rysowania krzywej,new = TRUE
wartość logiczna określająca czy funkcja powinna stworzyć nowy wykres czy dorysować dane do poprzedniego wykresu,...
parametry określające styl graficzny tworzonej krzywej.
Przykładowo, stwórzmy wykres krzywej dla funkcji \( f(t) = \left(t/(4 \pi) \cos(t), t/(4 \pi) \sin(t) \right) \) dla \( t \in (0, 2 \pi) \).
### Definicja funkcji f path <- function(t) { t/(4 * pi) * c(cos(t), sin(t)) } ### Przykładowe wizualizacje par(mfrow = c(2, 2)) pathPlot(path2, c(0, 4 * pi), n = 1000, col = "blue", lwd = 2) pathPlot(path2, c(0, 4 * pi), n = 1000, col = "red", lwd = 1, lty = "dashed") pathPlot(path2, c(0, 4 * pi), n = 100, col = "red", lwd = 1, lty = "dotted") pathPlot(path2, c(0, 4 * pi), n = 20, col = "red", lwd = 6, lty = "solid") dev.copy(device = png, "./fig_1.png") dev.off()
Powyższy kod stworzy poniższy wykres, który pokazuje różne możliwości stylizowania krzywej.
Figure 1: Przykłady prostej wizualizacji
Proszę wykorzystać stworzoną funkcję pathPlot()
do stworzenia poniższych wizualizacji.
par(mfrow = c(2, 2)) ### Przykład 1 n <- 10^4 x <- rnorm(n) y <- rnorm(n) plot(x, y, pch = 20, asp = 1, col = rgb(1, 0, 0, .1)) path1 <- function(t) { c(cos(t), sin(t)) } pathPlot(path1, c(0, 2 * pi), n = 1000, col = "blue", lwd = 2, new = FALSE) ### Przykład 2 path2 <- function(t) { c(cos(t), sin(t)) * (.2 + sin(t * 2)) } pathPlot(path2, c(0, 2 * pi), n = 100, col = "blue", lwd = 2) ### Przykład 3 path3a <- function(t) { c(t, t ^ 2) } path3b <- function(t) { c(t, sqrt(t)) } path3c <- function(t) { r <- runif(n = 1, min = t^2, max = sqrt(t)) c(t, r) } pathPlot(path3a, c(0, 1), n = 1000, col = "blue", lwd = 2, new = TRUE) pathPlot(path3b, c(0, 1), n = 1000, col = "blue", lwd = 1, lty = "dashed", new = FALSE) pathPlot(path3c, c(0, 1), n = 1000, col = "cyan", lwd = 1, new = FALSE) ### Przykład 4 pathLeft <- function(t) { c(sin(2 * pi * t), t) } pathRight <- function(t) { c(-sin(2 * pi * t), t) } pathMiddle <- function(t) { r <- runif( n = 1, min = min(-sin(2 * pi * t), sin(2 * pi * t)), max = max(-sin(2 * pi * t), sin(2 * pi * t))) c(r, t) } pathPlot(pathLeft, c(0, 1), n = 1000, col = "blue", lwd = 2, new = TRUE) pathPlot(pathRight, c(0, 1), n = 1000, col = "cyan", lwd = 1, lty = "dashed", new = FALSE) pathPlot(pathMiddle, c(0, 1), n = 100, col = "cyan", lwd = 1, new = FALSE) dev.copy(device = png, "./fig_2.png") dev.off()
Figure 2: Przykładowe wykresy