Projekt 3

Techniczne warunki zaliczenie

  • Termin: [2022-05-31 Tue]
  • 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.

fig_1.png

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()

fig_2.png

Figure 2: Przykładowe wykresy

Data: 2022-04-14 Thu 00:00

Autor: Michał Ramsza

Created: 2022-04-14 Thu 18:16

Validate