cart2bary | R Documentation |
Given the Cartesian coordinates of one or more points, compute the barycentric coordinates of these points with respect to a simplex.
cart2bary(X, P)
X |
Reference simplex in |
P |
|
Given a reference simplex in N
dimensions represented by a
N+1
-by-N
matrix an arbitrary point P
in
Cartesian coordinates, represented by a 1-by-N
row vector, can be
written as
P = \beta X
where \beta
is an N+1
vector of the barycentric coordinates.
A criterion on \beta
is that
\sum_i\beta_i = 1
Now partition the simplex into its first N
rows X_N
and
its N+1
th row X_{N+1}
. Partition the barycentric
coordinates into the first N
columns \beta_N
and the
N+1
th column \beta_{N+1}
. This allows us to write
P_{N+1} - X_{N+1} = \beta_N X_N + \beta_{N+1} X_{N+1} - X_{N+1}
which can be written
P_{N+1} - X_{N+1} = \beta_N(X_N - 1_N X_{N+1})
where 1_N
is an N
-by-1 matrix of ones. We can then solve
for \beta_N
:
\beta_N = (P_{N+1} - X_{N+1})(X_N - 1_N X_{N+1})^{-1}
and compute
\beta_{N+1} = 1 - \sum_{i=1}^N\beta_i
This can be generalised for multiple values of
P
, one per row.
M
-by-N+1
matrix in which each row is the
barycentric coordinates of corresponding row of P
. If the
simplex is degenerate a warning is issued and the function returns
NULL
.
Based on the Octave function by David Bateman.
David Sterratt
bary2cart
## Define simplex in 2D (i.e. a triangle)
X <- rbind(c(0, 0),
c(0, 1),
c(1, 0))
## Cartesian coordinates of points
P <- rbind(c(0.5, 0.5),
c(0.1, 0.8))
## Plot triangle and points
trimesh(rbind(1:3), X)
text(X[,1], X[,2], 1:3) # Label vertices
points(P)
cart2bary(X, P)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.