Aproximácia (interpolácia) je generujúci princíp, ktorý umožňuje modelovať súvislé oblúky čiar z diskrétnych usporiadaných množín bodov rozšíreného euklidovského priestoru. Vnútorné geometrické vlastnosti modelovaných čiar sú závislé od tvaru polynomických interpolačných funkcií určujúcich analytické reprezentácie modelovaných útvarov. Požadované geometrické vlastnosti stanovujú podmienky pre určenie koeficientov pri mocninách premennej u.
\[ Pl_i(u) = a_{in}u^n + a_{in-1}u{^n-1} + ... + a_{i1}u + a_{i0} \] Podmienka: súčet polynómov vzťahujúcich sa na vlastné body riadiaceho útvaru (v danom usporiadaní) sa rovná jednej.
\[ r(u) = M.I^T(u) = \sum_{i=1}^n P_i Pl_i(u) = \left( \sum_{i=1}^nx_iPl_i(u),\sum_{i=1}^ny_iPl_i(u),\sum_{i=1}^nz_iPl_i(u),\sum_{i=1}^nh_iPl_i(u) \right) \]
Fergusonova kubika je interpolačná čiara určená začiatočným a koncovým bodom a vektormi dotyčníc v týchto bodoch. Interpolácia je určená kubickými Hermitovými polynómami. \[ F_0(u) = 2u^3 - 3u^2 + 1 \] \[ F_1(u) = -2u^3 + 3u^2 \] \[ G_0(u) = u^3 - 2u^2 + u \] \[ G_1(u) = u^3 - u^2 \]
F0 -> G1 sú Hermitove interpolačné polynómy, pričom \[ \sum_{i=1}^1 F_i = 1 \]
modelovaný útvar: \[ r(u) = M.I^T(u) = P_0F_0(u) + P_1F_1(u) + a_0G_0(u) + a_1G_1(u), u \in <0,1> \]
P0 <- c(0, 0, 1) # pociatocny bod (3. suradnica, znamena, ze je vlastny)
P1 <- c(4, 2, 1) # koncovy bod (3. suradnica, znamena, ze je vlastny)
a0 <- c(1, 3, 0) # vektor dotycnice (3. suradnica, znamena, ze je nevlastna)
a3 <- c(2, -4, 0) # vektor dotycnice (3. suradnica, znamena, ze je nevlastna)
#F0(u)= 2u^3 - 3u^2 + 1
#F1(u)= -2u^3 + 3u^2
#G0(u)= u^3 - 2u^2 + u
#G1(u)= u^3 - u^2
#x funkcia = 4*F1 + 1*G0 + 2*G1
dat <- data.frame(u=seq(0, 1, 0.01))
xCurve <- function(u) 4*(-2*u^3 + 3*u^2)+ 1*(u^3 - 2*u^2 + u)+ 2*(u^3 - u^2)
yCurve <- function(u) 2*(-2*u^3 + 3*u^2) + 3*(u^3 - 2*u^2 + u) -4*(u^3 - u^2)
dat$y=yCurve(dat$u)
dat$x=xCurve(dat$u)
with(dat, plot(x,y, type="l", col = "green"))
Bèzierova kubika je aproximačná čiara určená štyrmi vlastnými bodmi riadiaceho tvaru. Aproximácia je určená Bernštejnovými kubickými polynómami. \[ Be_{03}(u) = (1-u)^3 \] \[ Be_{13}(u) = 3u(1-u)^2 \] \[ Be_{23}(u) = 3u^2(1-u) \] \[ Be_{33}(u) = u^3 \]
Be03 -> Be33 sú Bernštejnove aproximačné polynómy, pričom \[ \sum_{i=1}^3 Be_{i3} = 1 \]
\[ Be_{in}(u)={n\choose i}u^i(1-u)^{n-i} \]pre n=3
modelovaný útvar: \[ r(u) = M.I^T(u) = P_0Be_{03}(u) + P_1Be_{13}(u) + P_2Be_{23}(u) + P_3Be_{33}(u), u \in <0,1> \]
P0 <- c(0, 0, 0, 1)
P1 <- c(1, 4, 0, 1)
P2 <- c(2, 3, 0, 1)
P3 <- c(3, -2, 0, 1)
#Be03(u)= (1-u)^3
#Be13(u)= 3*u*(1-u)^2
#Be23(u)= 3*u^2*(1-u)
#Be33(u)= u^3
#x funkcia = 1*Be1 + 2*Be2 + 3*Be3
dat <- data.frame(u=seq(0, 1, 0.01))
xCurve <- function(u) 3*u*(1-u)^2 + 2*3*u^2*(1-u) + 3*u^3
yCurve <- function(u) 4*u*(1-u)^2 + 3*3*u^2*(1-u) + -2*u^3
dat$y=yCurve(dat$u)
dat$x=xCurve(dat$u)
with(dat, plot(x,y, type="l", col = "red"))
B-splajn kubika je aproximačná čiara určená, rovnako ako bezierova, štyrmi vlastnými bodmi riadiaceho útvaru. Aproximácia je určená Coonsovými kubickými polynómami.
\[ Co_{03}(u) = -\frac{1}{6}u^3 + \frac{1}{2}u^2 + \frac{1}{2}u+ \frac{1}{6}\] \[ Co_{13}(u) = \frac{1}{2}u^3 - u^2 + \frac{2}{3}\] \[ Co_{23}(u) = -\frac{1}{2}u^3 + \frac{1}{2}u^2 + \frac{1}{2}u+ \frac{1}{6}\] \[ Co_{33}(u) = \frac{1}{6}u^3\]
Co03 -> Co33sú Coonsove aproximačné polynómy, pričom \[ \sum_{i=1}^3 Co_{i3} = 1 \]
P0 <- c(0, 0, 0, 1)
P1 <- c(1, 4, 0, 1)
P2 <- c(2, 3, 0, 1)
P3 <- c(3, -2, 0, 1)
#x funkcia = 1*Co1 + 2*Co2 + 3*co3
dat <- data.frame(u=seq(0, 1, 0.01))
xCurve <- function(u) (1/2)*u^3 - u^2 + 2/3 + 2*(-(1/2)*u^3 + (1/2)*u^2+ (1/2)*u+ (1/6)) +3*((1/6)*u^3)
yCurve <- function(u) 4*((1/2)*u^3 - u^2 + 2/3) + 3*(-(1/2)*u^3 + (1/2)*u^2+ (1/2)*u+ (1/6)) -2*((1/6)*u^3)
dat$y=yCurve(dat$u)
dat$x=xCurve(dat$u)
with(dat, plot(x,y, type="l", col = "Blue"))