Description Usage Arguments Value Author(s) See Also Examples
Compute the Bezier polynomials of a given collection of points. Note that
using mpoly::as.function.mpoly()
on the resulting Bezier polynomials is
made numerically stable by taking advantage of de Casteljau's algorithm; it
does not use the polynomial that is printed to the screen. See
bezier_function()
for details.
1 |
... |
either a sequence of points or a matrix/data frame of points, see examples |
indeterminate |
the indeterminate of the resulting polynomial |
a mpoly object
David Kahle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | p1 <- c(0, 0)
p2 <- c(1, 1)
p3 <- c(2, -1)
p4 <- c(3, 0)
bezier(p1, p2, p3, p4)
points <- data.frame(x = 0:3, y = c(0,1,-1,0))
bezier(points)
points <- data.frame(x = 0:2, y = c(0,1,0))
bezier(points)
# visualize the bernstein polynomials
library(ggplot2); theme_set(theme_bw())
s <- seq(0, 1, length.out = 101)
## example 1
points <- data.frame(x = 0:3, y = c(0,1,-1,0))
(bezPolys <- bezier(points))
f <- as.function(bezPolys)
df <- as.data.frame(f(s))
ggplot(aes(x = x, y = y), data = df) +
geom_point(data = points, color = "red") +
geom_path(data = points, color = "red") +
geom_path()
## example 1 with weights
f <- as.function(bezPolys, weights = c(1,5,5,1))
df <- as.data.frame(f(s))
ggplot(aes(x = x, y = y), data = df) +
geom_point(data = points, color = "red") +
geom_path(data = points, color = "red") +
geom_path()
## example 2
points <- data.frame(x = 0:2, y = c(0,1,0))
(bezPolys <- bezier(points))
f <- as.function(bezPolys)
df <- as.data.frame(f(s))
ggplot(aes(x = x, y = y), data = df) +
geom_point(data = points, color = "red") +
geom_path(data = points, color = "red") +
geom_path()
## example 3
points <- data.frame(x = c(-1,-2,2,1), y = c(0,1,1,0))
(bezPolys <- bezier(points))
f <- as.function(bezPolys)
df <- as.data.frame(f(s))
ggplot(aes(x = x, y = y), data = df) +
geom_point(data = points, color = "red") +
geom_path(data = points, color = "red") +
geom_path()
## example 4
points <- data.frame(x = c(-1,2,-2,1), y = c(0,1,1,0))
(bezPolys <- bezier(points))
f <- as.function(bezPolys)
df <- as.data.frame(f(s))
ggplot(aes(x = x, y = y), data = df) +
geom_point(data = points, color = "red") +
geom_path(data = points, color = "red") +
geom_path()
## example 5
qplot(speed, dist, data = cars)
s <- seq(0, 1, length.out = 201)
p <- bezier(cars)
f <- as.function(p)
df <- as.data.frame(f(s))
qplot(speed, dist, data = cars) +
geom_path(data = df, color = "red")
# the curve is not invariant to permutations of the points
# but it always goes through the first and last points
permute_rows <- function(df) df[sample(nrow(df)),]
p <- bezier(permute_rows(cars))
f <- as.function(p)
df <- as.data.frame(f(s))
qplot(speed, dist, data = cars) +
geom_path(data = df, color = "red")
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.