cart2bary: Conversion of Cartesian to Barycentric coordinates.

Description Usage Arguments Details Value Note Author(s) See Also Examples

View source: R/tsearch.R

Description

Given the Cartesian coordinates of one or more points, compute the barycentric coordinates of these points with respect to a simplex.

Usage

1
cart2bary(X, P)

Arguments

X

Reference simplex in N dimensions represented by a N+1-by-N matrix

P

M-by-N matrix in which each row is the Cartesian coordinates of a point.

Details

Given a reference simplex in N dimensions represented by a N+1-by-N matrix an arbitrary point \mathbf{P} in Cartesian coordinates, represented by a 1-by-N row vector, can be written as

\mathbf{P} = \mathbf{β}\mathbf{X}

where \mathbf{β} is a N+1 vector of the barycentric coordinates. A criterion on \mathbf{β} is that

∑_iβ_i = 1

Now partition the simplex into its first N rows \mathbf{X}_N and its N+1th row \mathbf{X}_{N+1}. Partition the barycentric coordinates into the first N columns \mathbf{β}_N and the N+1th column β_{N+1}. This allows us to write

\mathbf{P - X}_{N+1} = \mathbf{β}_N\mathbf{X}_N + \mathbf{β}_{N+1}\mathbf{X}_{N+1} - \mathbf{X}_{N+1}

which can be written

\mathbf{P - X}_{N+1} = \mathbf{β}_N(\mathbf{X}_N - \mathbf{1}\mathbf{X}_{N+1})

where \mathbf{1} is a N-by-1 matrix of ones. We can then solve for \mathbf{β}_N:

\mathbf{β}_N = (\mathbf{P - X}_{N+1})(\mathbf{X}_N - \mathbf{1}\mathbf{X}_{N+1})^{-1}

and compute

β_{N+1} = 1 - ∑_{i=1}^Nβ_i

This can be generalised for multiple values of \mathbf{P}, one per row.

Value

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.

Note

Based on the Octave function by David Bateman.

Author(s)

David Sterratt

See Also

bary2cart

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
## Define simplex in 2D (i.e. a triangle)
X <- rbind(c(0, 0),
           c(0, 1),
           c(1, 0))
## Cartesian cooridinates 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)

Example output

Loading required package: magic
Loading required package: abind
     [,1] [,2] [,3]
[1,]  0.0  0.5  0.5
[2,]  0.1  0.8  0.1

geometry documentation built on May 2, 2019, 6:09 p.m.

Related to cart2bary in geometry...