Type: | Package |
Title: | Triangle Meshes and Related Geometry Tools |
Version: | 0.5.0 |
Description: | Generate planar and spherical triangle meshes, compute finite element calculations for 1-, 2-, and 3-dimensional flat and curved manifolds with associated basis function spaces, methods for lines and polygons, and transparent handling of coordinate reference systems and coordinate transformation, including 'sf' and 'sp' geometries. The core 'fmesher' library code was originally part of the 'INLA' package, and implements parts of "Triangulations and Applications" by Hjelle and Daehlen (2006) <doi:10.1007/3-540-33261-8>. |
Depends: | R (≥ 4.0), methods |
Imports: | dplyr, graphics, grDevices, lifecycle, Matrix, Rcpp, rlang, sf, splancs, stats, tibble, utils, withr |
Suggests: | geometry, ggplot2, knitr, patchwork, testthat (≥ 3.0.0), terra, tidyterra, rgl, rmarkdown, sp (≥ 1.6-1), gsl |
URL: | https://inlabru-org.github.io/fmesher/, https://github.com/inlabru-org/fmesher |
BugReports: | https://github.com/inlabru-org/fmesher/issues |
License: | MPL-2.0 |
Copyright: | 2010-2025 Finn Lindgren, except src/predicates.cc by Jonathan Richard Shewchuk, 1996 |
NeedsCompilation: | yes |
RoxygenNote: | 7.3.2 |
Encoding: | UTF-8 |
Config/testthat/edition: | 3 |
Config/testthat/parallel: | true |
SystemRequirements: | C++17 |
LinkingTo: | Rcpp |
VignetteBuilder: | knitr |
BuildVignettes: | true |
Collate: | 'RcppExports.R' 'deprecated.R' 'bary.R' 'basis.R' 'bbox.R' 'collect.R' 'components.R' 'print.R' 'crs.R' 'data-fmexample.R' 'diameter.R' 'evaluator.R' 'fem.R' 'fm.R' 'fmesher-package.R' 'fmesher.R' 'ggplot.R' 'integration.R' 'lattice_2d.R' 'lattice_Nd.R' 'list.R' 'local.R' 'manifold.R' 'mapping.R' 'matern.R' 'mesh.R' 'mesh_1d.R' 'mesh_2d.R' 'mesh_3d.R' 'mesh_assessment.R' 'nonconvex_hull.R' 'onload.R' 'plot.R' 'segm.R' 'sf_mesh.R' 'sf_utils.R' 'simplify.R' 'sp_mesh.R' 'split_lines.R' 'tensor.R' 'utils.R' |
LazyData: | true |
Packaged: | 2025-07-07 20:35:17 UTC; flindgre |
Author: | Finn Lindgren |
Maintainer: | Finn Lindgren <finn.lindgren@gmail.com> |
Repository: | CRAN |
Date/Publication: | 2025-07-07 21:20:02 UTC |
fmesher: Triangle Meshes and Related Geometry Tools
Description
Generate planar and spherical triangle meshes, compute finite element calculations for 1-, 2-, and 3-dimensional flat and curved manifolds with associated basis function spaces, methods for lines and polygons, and transparent handling of coordinate reference systems and coordinate transformation, including 'sf' and 'sp' geometries. The core 'fmesher' library code was originally part of the 'INLA' package, and implements parts of "Triangulations and Applications" by Hjelle and Daehlen (2006) doi:10.1007/3-540-33261-8.
Author(s)
Maintainer: Finn Lindgren finn.lindgren@gmail.com (ORCID) (Finn Lindgren wrote the main code) [copyright holder]
Other contributors:
Seaton Andy andy.e.seaton@gmail.com (Andy Seaton constributed features to the sf support) [contributor]
Suen Man Ho M.H.Suen@sms.ed.ac.uk (Man Ho Suen contributed features and code structure design for the integration methods) [contributor]
Fabian E. Bachl bachlfab@gmail.com (Fabian Bachl co-developed precursors of fm_pixels and fm_split_lines in inlabru) [contributor]
See Also
Useful links:
Report bugs at https://github.com/inlabru-org/fmesher/issues
Convert a 3D mesh to a 3D rgl triangulation
Description
Extracts a matrix of coordinates of triangles, suitable for
passing to rgl::triangles3d()
.
Usage
## S3 method for class 'fm_mesh_3d'
as.triangles3d(obj, subset = NULL, ...)
Arguments
obj |
An |
subset |
Character string specifying which triangles to extract. Either "all" (default) or "boundary". |
... |
Currently unused |
Value
A 3-column matrix of coordinates of triangles, suitable for
passing to rgl::triangles3d()
.
Examples
if (requireNamespace("geometry", quietly = TRUE) &&
requireNamespace("rgl", quietly = TRUE)) {
(m <- fm_delaunay_3d(matrix(rnorm(30), 10, 3)))
rgl::open3d()
rgl::triangles3d(rgl::as.triangles3d(m, "boundary"), col = "blue")
}
Call stack utility functions
Description
Helper functions for displaying call stack information
Usage
fm_caller_name(which = 0L, override = NULL)
fm_call_stack(start = 0L, end = 0L, with_numbers = TRUE, ...)
fm_try_callstack(expr)
Arguments
which |
The number of frames to go back from the caller |
override |
character; Overrides the automated function name logic |
start |
The stack starting point |
end |
The stack end point |
with_numbers |
INclude call stack location numbers |
... |
Currently unused |
expr |
An |
Value
fm_caller_name
returns a string with the the name of a calling
function
fm_call_stack
returns a character vector
fm_try_callstack
If successful, returns (invisibly) the value from
the evaluated expression, otherwise an error object with call stack
information attached to the error message.
Functions
-
fm_call_stack()
: -
fm_try_callstack()
: Inspired byberryFunctions::tryStack
Examples
fun <- function() {
print(fm_caller_name())
nm <- fm_caller_name()
print(nm)
}
fun()
Create a coordinate reference system object
Description
Creates either a CRS object or an inla.CRS object, describing a coordinate reference system
Usage
fm_CRS(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'fm_CRS'
is.na(x)
## S3 method for class 'crs'
fm_CRS(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'fm_crs'
fm_CRS(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'Spatial'
fm_CRS(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'fm_CRS'
fm_CRS(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'SpatVector'
fm_CRS(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'SpatRaster'
fm_CRS(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'sf'
fm_CRS(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'sfc'
fm_CRS(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'sfg'
fm_CRS(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'fm_mesh_2d'
fm_CRS(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'fm_lattice'
fm_CRS(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'fm_segm'
fm_CRS(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'fm_collect'
fm_CRS(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'matrix'
fm_CRS(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'CRS'
fm_CRS(x, ..., units = NULL, oblique = NULL)
## Default S3 method:
fm_CRS(
x,
oblique = NULL,
projargs = NULL,
doCheckCRSArgs = NULL,
args = NULL,
SRS_string = NULL,
...,
units = NULL
)
## S3 method for class 'inla.CRS'
is.na(x)
## S3 method for class 'inla.CRS'
fm_CRS(x, ..., units = NULL, oblique = NULL)
Arguments
x |
Object to convert to CRS or to extract CRS information from. |
... |
Additional parameters, passed on to sub-methods. |
units |
character; if non-NULL, |
oblique |
Vector of length at most 4 of rotation angles (in degrees)
for an oblique projection, all values defaulting to zero. The values
indicate (longitude, latitude, orientation, orbit), as explained in the
Details section for |
projargs |
Either 1) a projection argument string suitable as input to
|
doCheckCRSArgs |
ignored. |
args |
An optional list of name/value pairs to add to and/or override
the PROJ4 arguments in |
SRS_string |
a WKT2 string defining the coordinate system;
see |
Details
The first two
elements of the oblique
vector are the (longitude, latitude)
coordinates for the oblique centre point. The third value (orientation) is a
counterclockwise rotation angle for an observer looking at the centre point
from outside the sphere. The fourth value is the quasi-longitude (orbit
angle) for a rotation along the oblique observers equator.
Simple oblique: oblique=c(0, 45)
Polar: oblique=c(0, 90)
Quasi-transversal: oblique=c(0, 0, 90)
Satellite orbit viewpoint: oblique=c(lon0-time*v1, 0, orbitangle, orbit0+time*v2)
, where lon0
is the longitude at which a satellite
orbit crosses the equator at time=0
, when the satellite is at an
angle orbit0
further along in its orbit. The orbital angle relative
to the equatorial plane is orbitangle
, and v1
and v2
are the angular velocities of the planet and the satellite, respectively.
Note that "forward" from the satellite's point of view is "to the right" in
the projection.
When oblique[2]
or oblique[3]
are non-zero, the resulting
projection is only correct for perfect spheres.
Value
Either an sp::CRS
object or an inla.CRS
object,
depending on if the coordinate reference system described by the parameters
can be expressed with a pure sp::CRS
object or not.
An S3 inla.CRS
object is a list, usually (but not necessarily)
containing at least one element:
crs |
The basic |
Functions
-
is.na(fm_CRS)
: Check if afm_CRS
hasNA
crs information andNA
obliqueness -
is.na(inla.CRS)
: Check if ainla.CRS
hasNA
crs information andNA
obliqueness
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
fm_crs()
, sp::CRS()
, fm_crs_wkt
,
fm_crs_is_identical()
Examples
if (fm_safe_sp()) {
crs1 <- fm_CRS("longlat_globe")
crs2 <- fm_CRS("lambert_globe")
crs3 <- fm_CRS("mollweide_norm")
crs4 <- fm_CRS("hammer_globe")
crs5 <- fm_CRS("sphere")
crs6 <- fm_CRS("globe")
}
Show expanded CRS arguments
Description
Wrappers for
sp::CRS
and inla.CRS
objects to handle the
coordinate reference system argument string.
These methods should no longer be used with PROJ6/rgdal3;
see fm_wkt()
and fm_proj4string()
for a new approach.
Usage
fm_CRS_as_list(x, ...)
fm_list_as_CRS(x, ...)
fm_CRSargs(x, ...)
fm_list_as_CRSargs(x, ...)
fm_CRSargs_as_list(x, ...)
Arguments
x |
An |
... |
Additional arguments passed on to other methods. |
Value
For fm_CRSargs
and fm_list_as_CRSargs
, a character
string with PROJ.4 arguments.
For fm_CRS_as_list
and fm_CRSargs_as_list
, a list of
name/value pairs.
For fm_list_as_CRS
, a CRS
or inla.CRS
object.
For fm_list_as_CRSargs()
, a CRS proj4 string for name=value pair
list
For fm_CRSargs_as_list()
, a list of name=value pairs from CRS
proj4string
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
Examples
if (fm_safe_sp()) {
crs0 <- fm_CRS("longlat_norm")
p4s <- fm_proj4string(crs0)
lst <- fm_CRSargs_as_list(p4s)
crs1 <- fm_list_as_CRS(lst)
lst$a <- 2
crs2 <- fm_CRS(p4s, args = lst)
print(fm_proj4string(crs0))
print(fm_proj4string(crs1))
print(fm_proj4string(crs2))
}
Calculate the area inside segments
Description
Calculate the (signed) area inside fm_segm
boundary objects.
Usage
fm_area(x, ...)
## S3 method for class 'fm_segm'
fm_area(x, ...)
## S3 method for class 'fm_segm_list'
fm_area(x, ...)
Arguments
x |
Object for which to calculate the area |
... |
Currently unused |
Convert objects to fm_collect
Description
Convert objects to fm_collect
Usage
fm_as_collect(x, ...)
fm_as_collect_list(x, ...)
## S3 method for class 'fm_collect'
fm_as_collect(x, ...)
Arguments
x |
Object to be converted |
... |
Arguments passed on to submethods |
Value
An fm_collect
object
Functions
-
fm_as_collect()
: Convert an object tofm_collect
. -
fm_as_collect_list()
: Convert each element of a list
See Also
Other object creation and conversion:
fm_as_fm()
,
fm_as_lattice_2d()
,
fm_as_lattice_Nd()
,
fm_as_mesh_1d()
,
fm_as_mesh_2d()
,
fm_as_mesh_3d()
,
fm_as_segm()
,
fm_as_sfc()
,
fm_as_tensor()
,
fm_collect()
,
fm_lattice_2d()
,
fm_lattice_Nd()
,
fm_mesh_1d()
,
fm_mesh_2d()
,
fm_segm()
,
fm_simplify()
,
fm_tensor()
Examples
fm_as_collect_list(list(fm_collect(list())))
Conversion between sparse matrix types
Description
Conversion between sparse matrix types
Usage
fm_as_dgCMatrix(x)
fm_as_dgTMatrix(x, unique = TRUE, ...)
fm_as_unpackedMatrix(x)
fm_as_fmesher_sparse(x)
## Default S3 method:
fm_as_dgCMatrix(x)
## S3 method for class 'fmesher_sparse'
fm_as_dgCMatrix(x)
## Default S3 method:
fm_as_dgTMatrix(x, unique = TRUE, ...)
## Default S3 method:
fm_as_unpackedMatrix(x)
## S3 method for class 'fmesher_sparse'
fm_as_unpackedMatrix(x)
## S3 method for class 'fmesher_sparse'
fm_as_dgTMatrix(x, unique = TRUE, ...)
Arguments
x |
Object to be converted |
unique |
logical; if |
Value
fm_as_dgCMatrix
returns a Matrix::dgCMatrix object.
fm_as_dgTMatrix
returns a Matrix::dgTMatrix object.
fm_as_unpackedMatrix
returns an object of virtual class
Matrix::unpackedMatrix.
fm_as_fmesher_sparse
returns an fmesher_sparse
object.
Examples
library(Matrix)
str(A <- fm_as_dgCMatrix(matrix(c(1, 2, 0, 0, 0, 3, 4, 0, 5), 3, 3)))
str(fm_as_dgTMatrix(A))
str(fm_as_unpackedMatrix(A))
str(fm_as_fmesher_sparse(A))
Convert objects to fmesher objects
Description
Used for conversion from general objects
(usually inla.mesh
and other legacy INLA specific classes)
to fmesher
classes.
Usage
fm_as_fm(x, ...)
## S3 method for class 'NULL'
fm_as_fm(x, ...)
## S3 method for class 'fm_mesh_1d'
fm_as_fm(x, ...)
## S3 method for class 'fm_mesh_2d'
fm_as_fm(x, ...)
## S3 method for class 'fm_mesh_3d'
fm_as_fm(x, ...)
## S3 method for class 'fm_tensor'
fm_as_fm(x, ...)
## S3 method for class 'fm_collect'
fm_as_fm(x, ...)
## S3 method for class 'fm_segm'
fm_as_fm(x, ...)
## S3 method for class 'fm_lattice_Nd'
fm_as_fm(x, ...)
## S3 method for class 'fm_lattice_2d'
fm_as_fm(x, ...)
## S3 method for class 'fm_bbox'
fm_as_fm(x, ...)
## S3 method for class 'crs'
fm_as_fm(x, ...)
## S3 method for class 'CRS'
fm_as_fm(x, ...)
## S3 method for class 'fm_crs'
fm_as_fm(x, ...)
## S3 method for class 'inla.CRS'
fm_as_fm(x, ...)
## S3 method for class 'inla.mesh.1d'
fm_as_fm(x, ...)
## S3 method for class 'inla.mesh'
fm_as_fm(x, ...)
## S3 method for class 'inla.mesh.segment'
fm_as_fm(x, ...)
## S3 method for class 'inla.mesh.lattice'
fm_as_fm(x, ...)
Arguments
x |
Object to be converted |
... |
Arguments forwarded to submethods |
Value
An object of some fm_*
class
See Also
Other object creation and conversion:
fm_as_collect()
,
fm_as_lattice_2d()
,
fm_as_lattice_Nd()
,
fm_as_mesh_1d()
,
fm_as_mesh_2d()
,
fm_as_mesh_3d()
,
fm_as_segm()
,
fm_as_sfc()
,
fm_as_tensor()
,
fm_collect()
,
fm_lattice_2d()
,
fm_lattice_Nd()
,
fm_mesh_1d()
,
fm_mesh_2d()
,
fm_segm()
,
fm_simplify()
,
fm_tensor()
Examples
fm_as_fm(NULL)
Convert objects to fm_lattice_2d
Description
Convert objects to fm_lattice_2d
Usage
fm_as_lattice_2d(...)
fm_as_lattice_2d_list(x, ...)
## S3 method for class 'fm_lattice_2d'
fm_as_lattice_2d(x, ...)
## S3 method for class 'inla.mesh.lattice'
fm_as_lattice_2d(x, ...)
Arguments
... |
Arguments passed on to submethods |
x |
Object to be converted |
Value
An fm_lattice_2d
or fm_lattice_2d_list
object
Functions
-
fm_as_lattice_2d()
: Convert an object tofm_lattice_2d
. -
fm_as_lattice_2d_list()
: Convert each element of a list
See Also
Other object creation and conversion:
fm_as_collect()
,
fm_as_fm()
,
fm_as_lattice_Nd()
,
fm_as_mesh_1d()
,
fm_as_mesh_2d()
,
fm_as_mesh_3d()
,
fm_as_segm()
,
fm_as_sfc()
,
fm_as_tensor()
,
fm_collect()
,
fm_lattice_2d()
,
fm_lattice_Nd()
,
fm_mesh_1d()
,
fm_mesh_2d()
,
fm_segm()
,
fm_simplify()
,
fm_tensor()
Examples
str(fm_as_lattice_2d_list(list(fm_lattice_2d(), fm_lattice_2d())))
Convert objects to fm_lattice_Nd
Description
Convert objects to fm_lattice_Nd
Usage
fm_as_lattice_Nd(...)
fm_as_lattice_Nd_list(x, ...)
## S3 method for class 'fm_lattice_Nd'
fm_as_lattice_Nd(x, ...)
Arguments
... |
Arguments passed on to submethods |
x |
Object to be converted |
Value
An fm_lattice_Md
or fm_lattice_Nd_list
object
Functions
-
fm_as_lattice_Nd()
: Convert an object tofm_lattice_Nd
. -
fm_as_lattice_Nd_list()
: Convert each element of a list
See Also
Other object creation and conversion:
fm_as_collect()
,
fm_as_fm()
,
fm_as_lattice_2d()
,
fm_as_mesh_1d()
,
fm_as_mesh_2d()
,
fm_as_mesh_3d()
,
fm_as_segm()
,
fm_as_sfc()
,
fm_as_tensor()
,
fm_collect()
,
fm_lattice_2d()
,
fm_lattice_Nd()
,
fm_mesh_1d()
,
fm_mesh_2d()
,
fm_segm()
,
fm_simplify()
,
fm_tensor()
Examples
(fm_as_lattice_Nd_list(list(
fm_lattice_Nd(list(1:3, 1:2)),
fm_lattice_Nd(list(1:4))
)))
Convert objects to fm_segm
Description
Convert objects to fm_segm
Usage
fm_as_mesh_1d(x, ...)
fm_as_mesh_1d_list(x, ...)
## S3 method for class 'fm_mesh_1d'
fm_as_mesh_1d(x, ...)
## S3 method for class 'inla.mesh.1d'
fm_as_mesh_1d(x, ...)
Arguments
x |
Object to be converted |
... |
Arguments passed on to submethods |
Value
An fm_mesh_1d
or fm_mesh_1d_list
object
Functions
-
fm_as_mesh_1d()
: Convert an object tofm_mesh_1d
. -
fm_as_mesh_1d_list()
: Convert each element of a list
See Also
Other object creation and conversion:
fm_as_collect()
,
fm_as_fm()
,
fm_as_lattice_2d()
,
fm_as_lattice_Nd()
,
fm_as_mesh_2d()
,
fm_as_mesh_3d()
,
fm_as_segm()
,
fm_as_sfc()
,
fm_as_tensor()
,
fm_collect()
,
fm_lattice_2d()
,
fm_lattice_Nd()
,
fm_mesh_1d()
,
fm_mesh_2d()
,
fm_segm()
,
fm_simplify()
,
fm_tensor()
Examples
fm_as_mesh_1d_list(list(fm_mesh_1d(1:4)))
Convert objects to fm_mesh_2d
Description
Convert objects to fm_mesh_2d
Usage
fm_as_mesh_2d(x, ...)
fm_as_mesh_2d_list(x, ...)
## S3 method for class 'fm_mesh_2d'
fm_as_mesh_2d(x, ...)
## S3 method for class 'inla.mesh'
fm_as_mesh_2d(x, ...)
## S3 method for class 'fm_mesh_3d'
fm_as_mesh_2d(x, ...)
## S3 method for class 'sfg'
fm_as_mesh_2d(x, ...)
## S3 method for class 'sfc_MULTIPOLYGON'
fm_as_mesh_2d(x, ...)
## S3 method for class 'sfc_POLYGON'
fm_as_mesh_2d(x, ...)
## S3 method for class 'sf'
fm_as_mesh_2d(x, ...)
Arguments
x |
Object to be converted |
... |
Arguments passed on to submethods |
Value
An fm_mesh_2d
or fm_mesh_2d_list
object
Methods (by class)
-
fm_as_mesh_2d(fm_mesh_3d)
: Construct a 2D mesh of the boundary of a 3D mesh
Functions
-
fm_as_mesh_2d()
: Convert an object tofm_mesh_2d
. -
fm_as_mesh_2d_list()
: Convert each element of a list
See Also
Other object creation and conversion:
fm_as_collect()
,
fm_as_fm()
,
fm_as_lattice_2d()
,
fm_as_lattice_Nd()
,
fm_as_mesh_1d()
,
fm_as_mesh_3d()
,
fm_as_segm()
,
fm_as_sfc()
,
fm_as_tensor()
,
fm_collect()
,
fm_lattice_2d()
,
fm_lattice_Nd()
,
fm_mesh_1d()
,
fm_mesh_2d()
,
fm_segm()
,
fm_simplify()
,
fm_tensor()
Examples
fm_as_mesh_2d_list(list(fm_mesh_2d(cbind(2, 1))))
Convert objects to fm_mesh_3d
Description
Convert objects to fm_mesh_3d
Usage
fm_as_mesh_3d(x, ...)
fm_as_mesh_3d_list(x, ...)
## S3 method for class 'fm_mesh_3d'
fm_as_mesh_3d(x, ...)
Arguments
x |
Object to be converted |
... |
Arguments passed on to submethods |
Value
An fm_mesh_3d
or fm_mesh_3d_list
object
Functions
-
fm_as_mesh_3d()
: Convert an object tofm_mesh_3d
. -
fm_as_mesh_3d_list()
: Convert each element of a list
See Also
Other object creation and conversion:
fm_as_collect()
,
fm_as_fm()
,
fm_as_lattice_2d()
,
fm_as_lattice_Nd()
,
fm_as_mesh_1d()
,
fm_as_mesh_2d()
,
fm_as_segm()
,
fm_as_sfc()
,
fm_as_tensor()
,
fm_collect()
,
fm_lattice_2d()
,
fm_lattice_Nd()
,
fm_mesh_1d()
,
fm_mesh_2d()
,
fm_segm()
,
fm_simplify()
,
fm_tensor()
Examples
(m <- fm_mesh_3d(
matrix(c(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0), 4, 3, byrow = TRUE),
matrix(c(1, 2, 3, 4), 1, 4, byrow = TRUE)
))
fm_as_mesh_3d_list(list(m))
Convert objects to fm_segm
Description
Convert objects to fm_segm
Usage
fm_as_segm(x, ...)
fm_as_segm_list(x, ...)
## S3 method for class 'fm_segm'
fm_as_segm(x, ...)
## S3 method for class 'inla.mesh.segment'
fm_as_segm(x, ...)
## S3 method for class 'sfg'
fm_as_segm(x, ...)
## S3 method for class 'sfc_POINT'
fm_as_segm(x, reverse = FALSE, grp = NULL, is.bnd = TRUE, ...)
## S3 method for class 'sfc_LINESTRING'
fm_as_segm(x, join = TRUE, grp = NULL, reverse = FALSE, ...)
## S3 method for class 'sfc_MULTILINESTRING'
fm_as_segm(x, join = TRUE, grp = NULL, reverse = FALSE, ...)
## S3 method for class 'sfc_POLYGON'
fm_as_segm(x, join = TRUE, grp = NULL, ...)
## S3 method for class 'sfc_MULTIPOLYGON'
fm_as_segm(x, join = TRUE, grp = NULL, ...)
## S3 method for class 'sfc_GEOMETRY'
fm_as_segm(x, grp = NULL, join = TRUE, ...)
## S3 method for class 'sf'
fm_as_segm(x, ...)
## S3 method for class 'matrix'
fm_as_segm(
x,
reverse = FALSE,
grp = NULL,
is.bnd = FALSE,
crs = NULL,
closed = FALSE,
...
)
## S3 method for class 'SpatialPoints'
fm_as_segm(x, reverse = FALSE, grp = NULL, is.bnd = TRUE, closed = FALSE, ...)
## S3 method for class 'SpatialPointsDataFrame'
fm_as_segm(x, ...)
## S3 method for class 'Line'
fm_as_segm(x, reverse = FALSE, grp = NULL, crs = NULL, ...)
## S3 method for class 'Lines'
fm_as_segm(x, join = TRUE, grp = NULL, crs = NULL, ...)
## S3 method for class 'SpatialLines'
fm_as_segm(x, join = TRUE, grp = NULL, ...)
## S3 method for class 'SpatialLinesDataFrame'
fm_as_segm(x, ...)
## S3 method for class 'SpatialPolygons'
fm_as_segm(x, join = TRUE, grp = NULL, ...)
## S3 method for class 'SpatialPolygonsDataFrame'
fm_as_segm(x, ...)
## S3 method for class 'Polygons'
fm_as_segm(x, join = TRUE, crs = NULL, grp = NULL, ...)
## S3 method for class 'Polygon'
fm_as_segm(x, crs = NULL, ...)
Arguments
x |
Object to be converted. |
... |
Arguments passed on to submethods |
reverse |
logical; When TRUE, reverse the order of the input points.
Default |
grp |
if non-null, should be an integer vector of grouping labels for
one for each segment.
Default |
is.bnd |
logical; if |
join |
logical; if |
crs |
A crs object |
closed |
logical; whether to treat a point sequence as a closed polygon.
Default: |
Value
An fm_segm
or fm_segm_list
object
Functions
-
fm_as_segm()
: Convert an object tofm_segm
. -
fm_as_segm_list()
: Convert each element, making afm_segm_list
object
See Also
c.fm_segm()
, c.fm_segm_list()
,
[.fm_segm_list()
Other object creation and conversion:
fm_as_collect()
,
fm_as_fm()
,
fm_as_lattice_2d()
,
fm_as_lattice_Nd()
,
fm_as_mesh_1d()
,
fm_as_mesh_2d()
,
fm_as_mesh_3d()
,
fm_as_sfc()
,
fm_as_tensor()
,
fm_collect()
,
fm_lattice_2d()
,
fm_lattice_Nd()
,
fm_mesh_1d()
,
fm_mesh_2d()
,
fm_segm()
,
fm_simplify()
,
fm_tensor()
Examples
fm_as_segm_list(list(
fm_segm(fmexample$mesh),
fm_segm(fmexample$mesh, boundary = FALSE)
))
(segm <- fm_segm(fmexample$mesh, boundary = FALSE))
(segm_sfc <- fm_as_sfc(segm))
(fm_as_segm(segm_sfc))
Conversion methods from mesh related objects to sfc
Description
Conversion methods from mesh related objects to sfc
Usage
fm_as_sfc(x, ...)
## S3 method for class 'fm_mesh_2d'
fm_as_sfc(x, ..., format = NULL, multi = FALSE)
## S3 method for class 'fm_segm'
fm_as_sfc(x, ..., multi = FALSE)
## S3 method for class 'fm_segm_list'
fm_as_sfc(x, ...)
## S3 method for class 'sfc'
fm_as_sfc(x, ...)
## S3 method for class 'sf'
fm_as_sfc(x, ...)
Arguments
x |
An object to be coerced/transformed/converted into another class |
... |
Arguments passed on to other methods |
format |
One of "mesh", "int", "bnd", or "loc". Default "mesh". |
multi |
logical; if |
Value
-
fm_as_sfc
: Ansfc_MULTIPOLYGON/LINESTRING/POINT/GEOMETRYCOLLECTION
orsfc_POLYGON/LINESTRING/POINT
object
Methods (by class)
See Also
Other object creation and conversion:
fm_as_collect()
,
fm_as_fm()
,
fm_as_lattice_2d()
,
fm_as_lattice_Nd()
,
fm_as_mesh_1d()
,
fm_as_mesh_2d()
,
fm_as_mesh_3d()
,
fm_as_segm()
,
fm_as_tensor()
,
fm_collect()
,
fm_lattice_2d()
,
fm_lattice_Nd()
,
fm_mesh_1d()
,
fm_mesh_2d()
,
fm_segm()
,
fm_simplify()
,
fm_tensor()
Examples
fm_as_sfc(fmexample$mesh)
fm_as_sfc(fmexample$mesh, multi = TRUE)
fm_as_sfc(fmexample$mesh, format = "loc")
# Boundary edge conversion to polygons is supported from version 0.4.0.9002:
fm_as_sfc(fmexample$mesh, format = "bnd")
Convert objects to fm_tensor
Description
Convert objects to fm_tensor
Usage
fm_as_tensor(x, ...)
fm_as_tensor_list(x, ...)
## S3 method for class 'fm_tensor'
fm_as_tensor(x, ...)
Arguments
x |
Object to be converted |
... |
Arguments passed on to submethods |
Value
An fm_tensor
object
Functions
-
fm_as_tensor()
: Convert an object tofm_tensor
. -
fm_as_tensor_list()
: Convert each element of a list
See Also
Other object creation and conversion:
fm_as_collect()
,
fm_as_fm()
,
fm_as_lattice_2d()
,
fm_as_lattice_Nd()
,
fm_as_mesh_1d()
,
fm_as_mesh_2d()
,
fm_as_mesh_3d()
,
fm_as_segm()
,
fm_as_sfc()
,
fm_collect()
,
fm_lattice_2d()
,
fm_lattice_Nd()
,
fm_mesh_1d()
,
fm_mesh_2d()
,
fm_segm()
,
fm_simplify()
,
fm_tensor()
Examples
fm_as_tensor_list(list(fm_tensor(list())))
Interactive mesh building and diagnostics
Description
Assess the finite element approximation errors in a mesh for interactive R sessions.
Usage
fm_assess(mesh, spatial.range, alpha = 2, dims = NULL)
Arguments
mesh |
An fm_mesh_2d object |
spatial.range |
numeric; the spatial range parameter to use for the assessment |
alpha |
numeric; A valid |
dims |
2-numeric; the grid size |
Value
An sf
object with gridded mesh assessment information
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
Examples
bnd <- fm_segm(cbind(
c(0, 10, 10, 0, 0),
c(0, 0, 10, 10, 0)
), is.bnd = TRUE)
mesh <- fm_rcdt_2d_inla(boundary = bnd, max.edge = 1)
out <- fm_assess(mesh, spatial.range = 3, alpha = 2)
Compute barycentric coordinates
Description
Identify knot intervals or triangles and compute barycentric coordinates
Usage
fm_bary(...)
## S3 method for class 'fm_bary'
fm_bary(bary, ..., extra_class = NULL)
## S3 method for class 'list'
fm_bary(bary, ..., extra_class = NULL)
## S3 method for class 'tbl_df'
fm_bary(bary, ..., extra_class = NULL)
## S3 method for class 'fm_mesh_1d'
fm_bary(mesh, loc, method = c("linear", "nearest"), restricted = FALSE, ...)
## S3 method for class 'fm_mesh_2d'
fm_bary(mesh, loc, crs = NULL, ..., max_batch_size = NULL)
## S3 method for class 'fm_mesh_3d'
fm_bary(mesh, loc, ..., max_batch_size = NULL)
## S3 method for class 'fm_lattice_2d'
fm_bary(mesh, loc, crs = NULL, ...)
## S3 method for class 'fm_lattice_Nd'
fm_bary(mesh, loc, ...)
Arguments
... |
Arguments forwarded to sub-methods. |
bary |
An |
extra_class |
character; If non- |
mesh |
|
loc |
Points for which to identify the containing interval/triangle, and
corresponding barycentric coordinates. May be a vector (for 1d) or a matrix
of raw coordinates, |
method |
character; method for defining the barycentric coordinates, "linear" (default) or "nearest" |
restricted |
logical, used for |
crs |
Optional crs information for |
max_batch_size |
integer; maximum number of points to process in a
single batch. This speeds up calculations by avoiding repeated large
internal memory allocations and data copies. The default, |
Value
A fm_bary
object, a tibble
with columns index
; either
vector of triangle indices (triangle meshes),
vector of knot indices (1D meshes, either for edges or individual knots), or
vector of lower left box indices (2D lattices),
and where
, a matrix of barycentric coordinates.
Methods (by class)
-
fm_bary(fm_bary)
: Returns thebary
input unchanged -
fm_bary(list)
: Converts alist
bary
tofm_bary
. In the list elements are unnamed, the namesindex
andwhere
are assumed. -
fm_bary(tbl_df)
: Converts atibble::tibble()
bary
tofm_bary
-
fm_bary(fm_mesh_1d)
: Return anfm_bary
object with elementsindex
(edge index vector pointing to the first knot of each edge) andwhere
(barycentric coordinates, 2-column matrices). Usefm_bary_simplex()
to obtain the corresponding endpoint knot indices.For
method = "nearest"
,index
contains the index of the nearest mesh knot, andwhere
is a single-column all-ones matrix. -
fm_bary(fm_mesh_2d)
: Anfm_bary
object with columnsindex
(vector of triangle indices) andwhere
(3-column matrix of barycentric coordinates). Points that were not found giveNA
entries inindex
andwhere
. -
fm_bary(fm_mesh_3d)
: Anfm_bary
object with columnsindex
(vector of triangle indices) andwhere
(4-column matrix of barycentric coordinates). Points that were not found giveNA
entries inindex
andwhere
. -
fm_bary(fm_lattice_2d)
: Anfm_bary
object with columnsindex
(vector of lattice cell indices) andwhere
(4-column matrix of barycentric coordinates). Points that are outside the lattice are givenNA
entries inindex
andwhere
. -
fm_bary(fm_lattice_Nd)
: Anfm_bary
object with columnsindex
(vector of lattice cell indices) andwhere
2^d
-column matrix of barycentric coordinates). Points that are outside the lattice are givenNA
entries inindex
andwhere
.
See Also
fm_bary_simplex()
, fm_bary_loc()
Examples
bary <- fm_bary(fm_mesh_1d(1:4), seq(0, 5, by = 0.5))
bary
str(fm_bary(fmexample$mesh, fmexample$loc_sf))
m <- fm_mesh_3d(
rbind(
c(1, 0, 0),
c(0, 1, 0),
c(0, 0, 1),
c(0, 0, 0)
),
matrix(c(1, 2, 3, 4), 1, 4)
)
b <- fm_bary(m, matrix(c(1, 1, 1) / 4, 1, 3))
str(fm_bary(fmexample$mesh, fmexample$loc_sf))
Extract Euclidean Sgeometry from Barycentric coordinates
Description
Extract the Euclidean coordinates for location identified by an fm_bary
object. This acts as the inverse of fm_bary()
.
Usage
fm_bary_loc(mesh, bary = NULL, ..., format = NULL)
## S3 method for class 'fm_mesh_2d'
fm_bary_loc(mesh, bary = NULL, ..., format = NULL)
## S3 method for class 'fm_mesh_3d'
fm_bary_loc(mesh, bary = NULL, ..., format = NULL)
## S3 method for class 'fm_mesh_1d'
fm_bary_loc(mesh, bary = NULL, ..., format = NULL)
## S3 method for class 'fm_lattice_2d'
fm_bary_loc(mesh, bary = NULL, ..., format = NULL)
## S3 method for class 'fm_lattice_Nd'
fm_bary_loc(mesh, bary = NULL, ..., format = NULL)
Arguments
mesh |
A mesh object, e.g. fm_mesh_2d or fm_mesh_1d. |
bary |
An |
... |
Further arguments potentially used by sub-methods. |
format |
Optional format for the output. If |
Value
Output format depends on the mesh class
.
Methods (by class)
-
fm_bary_loc(fm_mesh_2d)
: Extract points on a triangle mesh. Implemented formats are"matrix"
(default) and"sf"
. -
fm_bary_loc(fm_mesh_3d)
: Extract points on a tetrahedron mesh. Implemented format is"matrix"
(default). -
fm_bary_loc(fm_mesh_1d)
: Extract points on a 1D mesh. Implemented formats are"numeric"
(default). -
fm_bary_loc(fm_lattice_2d)
: Extract points on a 2D lattice. Implemented formats are"matrix"
(default) and"sf"
. -
fm_bary_loc(fm_lattice_Nd)
: Extract points on a ND lattice.
See Also
Examples
head(fm_bary_loc(fmexample$mesh))
bary <- fm_bary(fmexample$mesh, fmexample$loc_sf)
fm_bary_loc(fmexample$mesh, bary, format = "matrix")
fm_bary_loc(fmexample$mesh, bary, format = "sf")
(m <- fm_mesh_3d(
matrix(c(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0), 4, 3, byrow = TRUE),
matrix(c(1, 2, 3, 4), 1, 4, byrow = TRUE)
))
(bary <- fm_bary(m, rbind(
cbind(0.1, 0.2, 0.3),
cbind(-0.1, 0.2, 0.3)
)))
fm_bary_loc(m, bary)
mesh1 <- fm_mesh_1d(1:4)
fm_bary_loc(mesh1)
(bary1 <- fm_bary(mesh1, seq(0, 5, by = 0.5)))
fm_bary_loc(mesh1, bary1)
(bary1 <- fm_bary(mesh1, seq(0, 5, by = 0.5), restricted = TRUE))
fm_bary_loc(mesh1, bary1)
fm_basis(mesh1, bary1)
(bary1 <- fm_bary(mesh1, bary1, method = "nearest"))
fm_bary_loc(mesh1, bary1)
fm_basis(mesh1, bary1)
(bary1 <- fm_bary(mesh1, bary1, method = "linear"))
fm_bary_loc(mesh1, bary1)
fm_basis(mesh1, bary1)
m <- fm_lattice_2d(x = 1:3, y = 1:4)
head(fm_bary_loc(m))
(bary <- fm_bary(m, cbind(1.5, 3.2)))
fm_bary_loc(m, bary, format = "matrix")
fm_bary_loc(m, bary, format = "sf")
m <- fm_lattice_Nd(list(x = 1:3, y = 1:4, z = 1:2))
head(fm_bary_loc(m))
(bary <- fm_bary(m, cbind(1.5, 3.2, 1.5)))
fm_bary_loc(m, bary)
Extract Simplex information for Barycentric coordinates
Description
Extract the simplex vertex information for a combination of a mesh and fm_bary coordinates.
Usage
fm_bary_simplex(mesh, bary = NULL, ...)
## S3 method for class 'fm_mesh_2d'
fm_bary_simplex(mesh, bary = NULL, ...)
## S3 method for class 'fm_mesh_3d'
fm_bary_simplex(mesh, bary = NULL, ...)
## S3 method for class 'fm_mesh_1d'
fm_bary_simplex(mesh, bary = NULL, ...)
## S3 method for class 'fm_lattice_2d'
fm_bary_simplex(mesh, bary = NULL, ...)
## S3 method for class 'fm_lattice_Nd'
fm_bary_simplex(mesh, bary = NULL, ...)
Arguments
mesh |
A mesh object, e.g. fm_mesh_2d or fm_mesh_1d. |
bary |
An fm_bary object. If NULL, return the full simplex information for the mesh. |
... |
Further arguments potentially used by sub-methods. |
Value
A matrix of vertex indices, one row per point in bary
.
Methods (by class)
-
fm_bary_simplex(fm_mesh_2d)
: Extract the triangle vertex indices for a 2D mesh -
fm_bary_simplex(fm_mesh_3d)
: Extract the tetrahedron vertex indices for a 3D mesh -
fm_bary_simplex(fm_mesh_1d)
: Extract the edge vertex indices for a 1D mesh -
fm_bary_simplex(fm_lattice_2d)
: Extract the cell vertex indices for a 2D lattice -
fm_bary_simplex(fm_lattice_Nd)
: Extract the cell vertex indices for a ND lattice
See Also
Examples
bary <- fm_bary(fmexample$mesh, fmexample$loc_sf)
fm_bary_simplex(fmexample$mesh, bary)
(m <- fm_mesh_3d(
matrix(c(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0), 4, 3, byrow = TRUE),
matrix(c(1, 2, 3, 4), 1, 4, byrow = TRUE)
))
(bary <- fm_bary(m, rbind(
cbind(0.1, 0.2, 0.3),
cbind(-0.1, 0.2, 0.3)
)))
fm_bary_simplex(m, bary)
mesh1 <- fm_mesh_1d(1:4)
(bary1 <- fm_bary(mesh1, seq(0, 5, by = 0.5)))
(bary1 <- fm_bary(mesh1, seq(0, 5, by = 0.5), restricted = TRUE))
fm_bary_simplex(mesh1, bary1)
m <- fm_lattice_2d(x = 1:3, y = 1:4)
bary <- fm_bary(m, cbind(1.5, 3.2))
fm_bary_simplex(m, bary)
m <- fm_lattice_Nd(list(x = 1:3, y = 1:4, z = 1:2))
(bary <- fm_bary(m, cbind(1.5, 3.2, 1.5)))
(fm_bary_simplex(m, bary))
fm_bary_loc(m, bary)
Compute mapping matrix between mesh function space and points
Description
Computes the basis mapping matrix between a function space on a mesh, and locations.
Usage
fm_basis(x, ..., full = FALSE)
## Default S3 method:
fm_basis(x, ..., full = FALSE)
## S3 method for class 'fm_mesh_1d'
fm_basis(x, loc, weights = NULL, derivatives = NULL, ..., full = FALSE)
## S3 method for class 'fm_mesh_2d'
fm_basis(x, loc, weights = NULL, derivatives = NULL, ..., full = FALSE)
## S3 method for class 'fm_mesh_3d'
fm_basis(x, loc, weights = NULL, ..., full = FALSE)
## S3 method for class 'fm_lattice_2d'
fm_basis(x, loc, weights = NULL, ..., full = FALSE)
## S3 method for class 'fm_lattice_Nd'
fm_basis(x, loc, weights = NULL, ..., full = FALSE)
## S3 method for class 'fm_tensor'
fm_basis(x, loc, weights = NULL, ..., full = FALSE)
## S3 method for class 'fm_collect'
fm_basis(x, loc, weights = NULL, ..., full = FALSE)
## S3 method for class 'matrix'
fm_basis(x, ok = NULL, weights = NULL, ..., full = FALSE)
## S3 method for class 'Matrix'
fm_basis(x, ok = NULL, weights = NULL, ..., full = FALSE)
## S3 method for class 'list'
fm_basis(x, weights = NULL, ..., full = FALSE)
## S3 method for class 'fm_basis'
fm_basis(x, ..., full = FALSE)
## S3 method for class 'fm_evaluator'
fm_basis(x, ..., full = FALSE)
Arguments
x |
An function space object, or other supported object
( |
... |
Passed on to submethods |
full |
logical; if |
loc |
A location/value information object ( |
weights |
Optional weight vector to apply (from the left, one weight for each row of the basis matrix) |
derivatives |
If non-NULL and logical, include derivative matrices
in the output. Forces |
ok |
numerical of length |
Value
A sparseMatrix
object (if full = FALSE
), or a fm_basis
object
(if full = TRUE
or isTRUE(derivatives)
). The fm_basis
object contains
at least the projection matrix A
and logical vector ok
; If x_j
denotes the latent basis coefficient for basis function j
, the field is
defined as u(loc_i)=sum_j A_ij x_j
for all i
where ok[i]
is TRUE
,
and u(loc_i)=0.0
where ok[i]
is FALSE
.
Methods (by class)
-
fm_basis(fm_mesh_1d)
: Ifderivatives=TRUE
, thefm_basis
object contains additional derivative weight matrices,d1A
andd2A
,du/dx(loc_i)=sum_j dx_ij w_i
. -
fm_basis(fm_mesh_2d)
: Ifderivatives=TRUE
, additional derivative weight matrices are included in thefull=TRUE
output: Derivative weight matricesdx
,dy
,dz
;du/dx(loc_i)=sum_j dx_ij w_i
, etc. -
fm_basis(fm_mesh_3d)
:fm_mesh_3d
basis functions. -
fm_basis(fm_lattice_2d)
:fm_lattice_2d
bilinear basis functions. -
fm_basis(fm_lattice_Nd)
:fm_lattice_Nd
multilinear basis functions. -
fm_basis(fm_tensor)
: Evaluates a basis matrix for afm_tensor
function space. -
fm_basis(fm_collect)
: Evaluates a basis matrix for afm_collect
function space. Theloc
argument must be alist
ortibble
with elementsloc
(the locations) andindex
(the indices into the function space collection). -
fm_basis(matrix)
: Creates a newfm_basis
object with elementsA
andok
, from a pre-evaluated basis matrix, including optional additional elements in the...
arguments. If aok
isNULL
, it is inferred asrep(TRUE, NROW(x))
, indicating that all rows correspond to successful basis evaluations. Iffull = FALSE
, returns the matrix unchanged. -
fm_basis(Matrix)
: Creates a newfm_basis
object with elementsA
andok
, from a pre-evaluated basis matrix, including optional additional elements in the...
arguments. If aok
isNULL
, it is inferred asrep(TRUE, NROW(x))
, indicating that all rows correspond to successful basis evaluations. Iffull = FALSE
, returns the matrix unchanged. -
fm_basis(list)
: Creates a newfm_basis
object from a plain list containing at least an elementA
. If anok
element is missing, it is inferred asrep(TRUE, NROW(x$A))
. Iffull = FALSE
, extracts theA
matrix. -
fm_basis(fm_basis)
: Iffull
isTRUE
, returnsx
unchanged, otherwise returns theA
matrix contained inx
. -
fm_basis(fm_evaluator)
: Extractfm_basis
information from anfm_evaluator
object. Iffull = FALSE
, returns theA
matrix contained in thefm_basis
object.
See Also
Examples
# Compute basis mapping matrix
dim(fm_basis(fmexample$mesh, fmexample$loc))
print(fm_basis(fmexample$mesh, fmexample$loc, full = TRUE))
# From precomputed `fm_bary` information:
bary <- fm_bary(fmexample$mesh, fmexample$loc)
print(fm_basis(fmexample$mesh, bary, full = TRUE))
Internal helper functions for mesh field evaluation
Description
Methods called internally by fm_basis()
methods.
Usage
fm_basis_mesh_2d(
mesh,
loc = NULL,
weights = NULL,
derivatives = NULL,
crs = NULL,
...
)
fm_basis_mesh_1d(mesh, loc, weights = NULL, derivatives = NULL, ...)
Arguments
loc |
A location/value information object ( |
weights |
Optional weight vector, one weight for each location |
derivatives |
logical; If true, also return matrices |
... |
Passed on to submethods |
Value
A fm_basis
object; a list of evaluator information objects,
at least a matrix A
and logical vector ok
.
Examples
str(fm_basis_mesh_2d(fmexample$mesh, loc = fmexample$loc))
Bounding box class
Description
Simple class for handling bounding box information
Usage
fm_bbox(...)
## S3 method for class 'list'
fm_bbox(x, ...)
## S3 method for class 'NULL'
fm_bbox(...)
## S3 method for class 'numeric'
fm_bbox(x, ...)
## S3 method for class 'matrix'
fm_bbox(x, ...)
## S3 method for class 'Matrix'
fm_bbox(x, ...)
## S3 method for class 'fm_bbox'
fm_bbox(x, ...)
## S3 method for class 'fm_mesh_1d'
fm_bbox(x, ...)
## S3 method for class 'fm_mesh_2d'
fm_bbox(x, ...)
## S3 method for class 'fm_mesh_3d'
fm_bbox(x, ...)
## S3 method for class 'fm_segm'
fm_bbox(x, ...)
## S3 method for class 'fm_lattice_2d'
fm_bbox(x, ...)
## S3 method for class 'fm_lattice_Nd'
fm_bbox(x, ...)
## S3 method for class 'fm_tensor'
fm_bbox(x, ...)
## S3 method for class 'fm_collect'
fm_bbox(x, ...)
## S3 method for class 'sf'
fm_bbox(x, ...)
## S3 method for class 'sfg'
fm_bbox(x, ...)
## S3 method for class 'sfc'
fm_bbox(x, ...)
## S3 method for class 'bbox'
fm_bbox(x, ...)
fm_as_bbox(x, ...)
## S3 method for class 'fm_bbox'
x[i]
## S3 method for class 'fm_bbox'
c(..., .join = FALSE)
fm_as_bbox_list(x, ...)
Arguments
... |
Passed on to sub-methods |
x |
|
i |
indices specifying elements to extract |
.join |
logical; if |
Value
For c.fm_bbox()
, a fm_bbox_list
object if .join = FALSE
(the
default) or an fm_bbox
object if .join = TRUE
.
Methods (by class)
-
fm_bbox(list)
: Construct a bounding box from precomputed interval information, stored as a list of 2-vector ranges,list(xlim, ylim, ...)
.
Methods (by generic)
-
[
: Extract sub-list -
c(fm_bbox)
: The...
arguments should befm_bbox
objects, or coercible withfm_as_bbox(list(...))
.
Functions
-
fm_as_bbox_list()
: Convert a list to afm_bbox_list
object, with each element converted to anfm_bbox
object.
Examples
fm_bbox(matrix(1:6, 3, 2))
m <- c(A = fm_bbox(cbind(1, 2)), B = fm_bbox(cbind(3, 4)))
str(m)
str(m[2])
m <- fm_as_bbox_list(list(
A = fm_bbox(cbind(1, 2)),
B = fm_bbox(cbind(3, 4))
))
str(fm_as_bbox_list(m))
Blockwise aggregation matrices
Description
Creates an aggregation matrix for blockwise aggregation, with optional weighting.
Usage
fm_block(
block = NULL,
weights = NULL,
log_weights = NULL,
rescale = FALSE,
n_block = NULL
)
fm_block_eval(
block = NULL,
weights = NULL,
log_weights = NULL,
rescale = FALSE,
n_block = NULL,
values = NULL
)
fm_block_logsumexp_eval(
block = NULL,
weights = NULL,
log_weights = NULL,
rescale = FALSE,
n_block = NULL,
values = NULL,
log = TRUE
)
fm_block_weights(
block = NULL,
weights = NULL,
log_weights = NULL,
rescale = FALSE,
n_block = NULL
)
fm_block_log_weights(
block = NULL,
weights = NULL,
log_weights = NULL,
rescale = FALSE,
n_block = NULL
)
fm_block_log_shift(block = NULL, log_weights = NULL, n_block = NULL)
fm_block_prep(
block = NULL,
log_weights = NULL,
weights = NULL,
n_block = NULL,
values = NULL,
n_values = NULL,
force_log = FALSE
)
Arguments
block |
integer vector; block information. If Note: from version |
weights |
Optional weight vector |
log_weights |
Optional |
rescale |
logical; If |
n_block |
integer; The number of conceptual blocks. Only needs to be
specified if it's larger than |
values |
Vector to be blockwise aggregated |
log |
If |
n_values |
When supplied, used instead of |
force_log |
When |
Value
A (sparse) matrix
Functions
-
fm_block()
: A (sparse) matrix of sizen_block
timeslength(block)
. -
fm_block_eval()
: Evaluate aggregation. More efficient alternative to toas.vector(fm_block(...) %*% values)
. -
fm_block_logsumexp_eval()
: Evaluate log-sum-exp aggregation. More efficient and numerically stable alternative to tolog(as.vector(fm_block(...) %*% exp(values)))
. -
fm_block_weights()
: Computes (optionally) blockwise renormalised weights -
fm_block_log_weights()
: Computes (optionally) blockwise renormalised log-weights -
fm_block_log_shift()
: Computes shifts for stable blocked log-sum-exp. To compute\log(\sum_{i; \textrm{block}_i=k} \exp(v_i) w_i)
for each blockk
, first compute combined values and weights, and a shift:w_values <- values + fm_block_log_weights(block, log_weights = log_weights) shift <- fm_block_log_shift(block, log_weights = w_values)
Then aggregate the values within each block:
agg <- aggregate(exp(w_values - shift[block]), by = list(block = block), \(x) log(sum(x))) agg$x <- agg$x + shift[agg$block]
The implementation uses a faster method:
as.vector( Matrix::sparseMatrix( i = block, j = rep(1L, length(block)), x = exp(w_values - shift[block]), dims = c(n_block, 1)) ) + shift
-
fm_block_prep()
: Helper function for preparingblock
,weights
, andlog_weights
,n_block
inputs.
Examples
block <- rep(1:2, 3:2)
fm_block(block)
fm_block(block, rescale = TRUE)
fm_block(block, log_weights = -2:2, rescale = TRUE)
fm_block_eval(
block,
weights = 1:5,
rescale = TRUE,
values = 11:15
)
fm_block_logsumexp_eval(
block,
weights = 1:5,
rescale = TRUE,
values = log(11:15),
log = FALSE
)
Extract triangle centroids from an fm_mesh_2d
Description
Computes the centroids of the triangles of an fm_mesh_2d()
object.
Usage
fm_centroids(x, format = NULL)
Arguments
x |
An |
format |
character; |
Value
An sf
, data.frame
, or SpatialPointsDataFrame
object, with the vertex
coordinates, and a .triangle
column with the triangle indices.
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
Examples
if (require("ggplot2", quietly = TRUE)) {
vrt <- fm_centroids(fmexample$mesh, format = "sf")
ggplot() +
geom_sf(data = fm_as_sfc(fmexample$mesh)) +
geom_sf(data = vrt, color = "red")
}
Make a collection function space
Description
Collection function spaces. The interface and object storage model
is experimental and may change.
Usage
fm_collect(x, ...)
Arguments
x |
list of function space objects, such as |
... |
Currently unused |
Value
A fm_collect
or fm_collect_list
object.
Elements of fm_collect
:
- fun_spaces
fm_list
of function space objects- manifold
character; manifold type summary, obtained from the function spaces.
See Also
Other object creation and conversion:
fm_as_collect()
,
fm_as_fm()
,
fm_as_lattice_2d()
,
fm_as_lattice_Nd()
,
fm_as_mesh_1d()
,
fm_as_mesh_2d()
,
fm_as_mesh_3d()
,
fm_as_segm()
,
fm_as_sfc()
,
fm_as_tensor()
,
fm_lattice_2d()
,
fm_lattice_Nd()
,
fm_mesh_1d()
,
fm_mesh_2d()
,
fm_segm()
,
fm_simplify()
,
fm_tensor()
Examples
m <- fm_collect(list(
A = fmexample$mesh,
B = fmexample$mesh
))
m2 <- fm_as_collect(m)
m3 <- fm_as_collect_list(list(m, m))
c(fm_dof(m$fun_spaces[[1]]) + fm_dof(m$fun_spaces[[2]]), fm_dof(m))
fm_basis(m, loc = tibble::tibble(
loc = fmexample$loc_sf,
index = c(1, 1, 2, 2, 1, 2, 2, 1, 1, 2)
), full = TRUE)
fm_basis(m, loc = tibble::tibble(
loc = rbind(c(0, 0), c(0.1, 0.1)),
index = c("B", "A")
), full = TRUE)
fm_evaluator(m, loc = tibble::tibble(loc = cbind(0, 0), index = 2))
names(fm_fem(m))
fm_diameter(m)
Compute connected mesh subsets
Description
Compute subsets of vertices and triangles/tetrahedrons in an fm_mesh_2d or fm_mesh_3d object that are connected by edges/triangles, and split fm_segm objects into connected components.
Usage
fm_components(x, ...)
fm_mesh_components(...)
## S3 method for class 'fm_mesh_2d'
fm_components(x, ...)
## S3 method for class 'fm_mesh_3d'
fm_components(x, ...)
## S3 method for class 'fm_segm'
fm_components(x, ...)
## S3 method for class 'fm_segm_list'
fm_components(x, ...)
Arguments
x |
An object to extract components from |
... |
Additional arguments passed to methods |
Value
For fm_mesh_2d
and fm_mesh_3d
, returns a list with elements
vertex
and triangle
/tetra
, vectors of
integer labels for which connected component they belong, and info
, a
data.frame
with columns
component |
Connected component integer label. |
nV |
The number of vertices in the component. |
nT |
The number of triangles/tetrahedrons in the component. |
area/volume |
The surface area or volume associated with the component. Component labels are not comparable across different meshes, but some ordering stability is guaranteed by initiating each component from the lowest numbered triangle whenever a new component is initiated. |
For fm_segm
, returns a list of segments, each with component
either a single closed loop of segments, or an open segment chain.
Functions
-
fm_mesh_components()
: Backwards compatibility for version0.4.0
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
fm_mesh_2d()
, fm_rcdt_2d()
, fm_mesh_3d()
, fm_segm()
Examples
# Construct two simple meshes:
loc <- matrix(c(0, 1, 0, 1), 2, 2)
mesh1 <- fm_mesh_2d(loc = loc, max.edge = 0.1)
bnd <- fm_nonconvex_hull(loc, 0.3)
mesh2 <- fm_mesh_2d(boundary = bnd, max.edge = 0.1)
# Compute connectivity information:
conn1 <- fm_components(mesh1)
conn2 <- fm_components(mesh2)
# One component, simply connected mesh
conn1$info
# Two disconnected components
conn2$info
# Extract the subset mesh for each component:
# (Note: some information is lost, such as fixed segments,
# and boundary edge labels.)
mesh3_1 <- fm_rcdt_2d_inla(
loc = mesh2$loc,
tv = mesh2$graph$tv[conn2$triangle == 1, , drop = FALSE],
delaunay = FALSE
)
mesh3_2 <- fm_rcdt_2d_inla(
loc = mesh2$loc,
tv = mesh2$graph$tv[conn2$triangle == 2, , drop = FALSE],
delaunay = FALSE
)
if (require("ggplot2")) {
ggplot() +
geom_fm(data = mesh3_1, fill = "red", alpha = 0.5) +
geom_fm(data = mesh3_2, fill = "blue", alpha = 0.5)
}
(m <- fm_mesh_3d(
matrix(c(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0), 4, 3, byrow = TRUE),
matrix(c(1, 2, 3, 4), 1, 4, byrow = TRUE)
))
# Compute connectivity information:
(conn <- fm_components(m))
(segm <- c(
fm_segm(
matrix(c(0, 0, 1, 0, 1, 1, 0, 1), 4, 2, byrow = TRUE),
matrix(c(1, 2, 2, 3, 3, 4, 4, 1), 4, 2, byrow = TRUE)
),
fm_segm(
matrix(c(0, 0, 1, 0, 1, 1, 0, 1), 4, 2, byrow = TRUE),
matrix(c(3, 4, 1, 2, 2, 3), 3, 2, byrow = TRUE),
is.bnd = FALSE
)
))
# Compute connectivity information:
(conn <- lapply(segm, fm_components))
(conn2 <- fm_components(segm))
Check which mesh triangles are inside a polygon
Description
Wrapper for the sf::st_contains()
(previously sp::over()
) method to find
triangle centroids or vertices inside sf
or sp
polygon objects
Usage
fm_contains(x, y, ...)
## S3 method for class 'Spatial'
fm_contains(x, y, ...)
## S3 method for class 'sf'
fm_contains(x, y, ...)
## S3 method for class 'sfc'
fm_contains(x, y, ..., type = c("centroid", "vertex"))
Arguments
x |
geometry (typically an |
y |
an |
... |
Passed on to other methods |
type |
the query type; either |
Value
List of vectors of triangle indices (when type
is 'centroid'
) or
vertex indices (when type
is 'vertex'
). The list has one entry per row
of the sf
object. Use unlist(fm_contains(...))
if the combined union is
needed.
Author(s)
Haakon Bakka, bakka@r-inla.org, and Finn Lindgren Finn.Lindgren@gmail.com
Examples
# Create a polygon and a mesh
obj <- sf::st_sfc(
sf::st_polygon(
list(rbind(
c(0, 0),
c(50, 0),
c(50, 50),
c(0, 50),
c(0, 0)
))
),
crs = fm_crs("longlat_globe")
)
mesh <- fm_rcdt_2d_inla(globe = 2, crs = fm_crs("sphere"))
## 2 vertices found in the polygon
fm_contains(obj, mesh, type = "vertex")
## 3 triangles found in the polygon
fm_contains(obj, mesh)
## Multiple transformations can lead to slightly different results
## due to edge cases:
## 4 triangles found in the polygon
fm_contains(
obj,
fm_transform(mesh, crs = fm_crs("mollweide_norm"))
)
(Blockwise) cross product of integration points
Description
Calculates the groupwise cross product of integration points in different dimensions and multiplies their weights accordingly. If the object defining points in a particular dimension has no weights attached to it all weights are assumed to be 1.
Usage
fm_cprod(..., na.rm = NULL, .blockwise = FALSE)
Arguments
... |
|
na.rm |
logical; if |
.blockwise |
logical; if |
Value
A data.frame
, sf
, or SpatialPointsDataFrame
of
multidimensional integration points and their weights
Examples
if (require("ggplot2")) {
# Create integration points in dimension 'myDim' and 'myDiscreteDim'
ips1 <- fm_int(fm_mesh_1d(1:20),
rbind(c(0, 3), c(3, 8)),
name = "myDim"
)
ips2 <- fm_int(domain = c(1, 2, 4), name = "myDiscreteDim")
# Calculate the cross product
ips <- fm_cprod(ips1, ips2)
# Plot the integration points
ggplot(ips) +
geom_point(aes(myDim, myDiscreteDim, size = weight)) +
scale_size_area()
}
Obtain coordinate reference system object
Description
Obtain an sf::crs
or fm_crs
object from a spatial object, or
convert crs information to construct a new sf::crs
object.
Usage
fm_crs(x, ..., units = NULL, oblique = NULL)
fm_crs_oblique(x)
## S3 method for class 'fm_crs'
st_crs(x, ...)
## S3 method for class 'fm_crs'
x$name
## Default S3 method:
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'crs'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'fm_crs'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'fm_CRS'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'character'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'Spatial'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'SpatVector'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'SpatRaster'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'sf'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'sfc'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'sfg'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'fm_mesh_2d'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'fm_mesh_1d'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'fm_mesh_3d'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'fm_tensor'
fm_crs(x, ..., units = NULL, oblique = NULL, .multi = FALSE)
## S3 method for class 'fm_collect'
fm_crs(x, ..., units = NULL, oblique = NULL, .multi = FALSE)
## S3 method for class 'fm_lattice_2d'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'fm_segm'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'fm_list'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'matrix'
fm_crs(x, ..., units = NULL, oblique = NULL)
## S3 method for class 'fm_list'
fm_CRS(x, ..., units = NULL, oblique = NULL)
fm_wkt_predef()
## S3 method for class 'inla.CRS'
fm_crs(x, ..., units = NULL, oblique = NULL)
Arguments
x |
Object to convert to |
... |
Additional parameters. Not currently in use. |
units |
character; if non-NULL, |
oblique |
Numeric vector of length at most 4 of rotation angles (in
degrees) for an oblique projection, all values defaulting to zero. The
values indicate (longitude, latitude, orientation, orbit), as explained in
the Details section below. When |
name |
element name |
.multi |
logical; If |
Details
The first two
elements of the oblique
vector are the (longitude, latitude)
coordinates for the oblique centre point. The third value (orientation) is a
counter-clockwise rotation angle for an observer looking at the centre point
from outside the sphere. The fourth value is the quasi-longitude (orbit
angle) for a rotation along the oblique observers equator.
Simple oblique: oblique=c(0, 45)
Polar: oblique=c(0, 90)
Quasi-transversal: oblique=c(0, 0, 90)
Satellite orbit viewpoint: oblique=c(lon0-time*v1, 0, orbitangle, orbit0+time*v2)
, where lon0
is the longitude at which a satellite
orbit crosses the equator at time=0
, when the satellite is at an
angle orbit0
further along in its orbit. The orbital angle relative
to the equatorial plane is orbitangle
, and v1
and v2
are the angular velocities of the planet and the satellite, respectively.
Note that "forward" from the satellite's point of view is "to the right" in
the projection.
When oblique[2]
or oblique[3]
are non-zero, the resulting
projection is only correct for perfect spheres.
Value
Either an sf::crs
object or an fm_crs
object,
depending on if the coordinate reference system described by the parameters
can be expressed with a pure crs
object or not.
A crs
object (sf::st_crs()
) or a fm_crs
object.
An S3 fm_crs
object is a list with elements crs
and oblique
.
fm_wkt_predef
returns a WKT2 string defining a projection
Methods (by class)
-
fm_crs(fm_tensor)
: By default returns the crs of the first space in the tensor product space. -
fm_crs(fm_collect)
: By default returns the crs of the first space in the collection. -
fm_crs(fm_list)
: returns a list of 'crs' objects, one for each list element
Methods (by generic)
-
st_crs(fm_crs)
:st_crs(x, ...)
is equivalent tofm_crs(x, oblique = NA, ...)
whenx
is afm_crs
object. -
$
: For afm_crs
objectx
,x$name
calls the accessor method for thecrs
object inside it. Ifname
is "crs", the internal crs object itself is returned. Ifname
is "oblique", the internal oblique angle parameter vector is returned.
Functions
-
fm_crs_oblique()
: ReturnNA
for object with no oblique information, and otherwise a length 4 numeric vector. -
fm_CRS(fm_list)
: returns a list of 'CRS' objects, one for each list element
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
fm_crs_is_null
fm_crs<-()
, fm_crs_oblique<-()
Examples
crs1 <- fm_crs("longlat_globe")
crs2 <- fm_crs("lambert_globe")
crs3 <- fm_crs("mollweide_norm")
crs4 <- fm_crs("hammer_globe")
crs5 <- fm_crs("sphere")
crs6 <- fm_crs("globe")
names(fm_wkt_predef())
Assignment operators for crs information objects
Description
Assigns new crs information.
Usage
fm_crs(x) <- value
fm_crs_oblique(x) <- value
## S3 replacement method for class 'NULL'
fm_crs(x) <- value
## S3 replacement method for class 'NULL'
fm_crs_oblique(x) <- value
## S3 replacement method for class 'fm_segm'
fm_crs(x) <- value
## S3 replacement method for class 'fm_list'
fm_crs(x) <- value
## S3 replacement method for class 'fm_mesh_2d'
fm_crs(x) <- value
## S3 replacement method for class 'fm_collect'
fm_crs(x) <- value
## S3 replacement method for class 'fm_lattice_2d'
fm_crs(x) <- value
## S3 replacement method for class 'sf'
fm_crs(x) <- value
## S3 replacement method for class 'sfg'
fm_crs(x) <- value
## S3 replacement method for class 'sfc'
fm_crs(x) <- value
## S3 replacement method for class 'Spatial'
fm_crs(x) <- value
## S3 replacement method for class 'crs'
fm_crs_oblique(x) <- value
## S3 replacement method for class 'CRS'
fm_crs_oblique(x) <- value
## S3 replacement method for class 'fm_CRS'
fm_crs_oblique(x) <- value
## S3 replacement method for class 'fm_crs'
fm_crs_oblique(x) <- value
## S3 replacement method for class 'fm_segm'
fm_crs_oblique(x) <- value
## S3 replacement method for class 'fm_mesh_2d'
fm_crs_oblique(x) <- value
## S3 replacement method for class 'fm_collect'
fm_crs_oblique(x) <- value
## S3 replacement method for class 'fm_lattice_2d'
fm_crs_oblique(x) <- value
## S3 replacement method for class 'inla.CRS'
fm_crs_oblique(x) <- value
Arguments
x |
Object to assign crs information to |
value |
For For |
Value
The modified object
Functions
-
fm_crs(x) <- value
: Automatically converts the input value withfm_crs(value)
,fm_crs(value, oblique = NA)
,fm_CRS(value)
, orfm_CRS(value, oblique = NA)
, depending on the type ofx
. -
fm_crs_oblique(x) <- value
: Assigns newoblique
information.
See Also
Examples
x <- fm_segm()
fm_crs(x) <- fm_crs("+proj=longlat")
fm_crs(x)$proj4string
Check if two CRS objects are identical
Description
Check if two CRS objects are identical
Usage
fm_crs_is_identical(crs0, crs1, crsonly = FALSE)
Arguments
crs0 , crs1 |
Two |
crsonly |
logical. If |
Value
logical, indicating if the two crs objects are identical in the
specified sense (see the crsonly
argument)
See Also
fm_crs()
, fm_CRS(), fm_crs_is_null()
Examples
crs0 <- crs1 <- fm_crs("longlat_globe")
fm_crs_oblique(crs1) <- c(0, 90)
print(c(
fm_crs_is_identical(crs0, crs0),
fm_crs_is_identical(crs0, crs1),
fm_crs_is_identical(crs0, crs1, crsonly = TRUE)
))
Check if a crs is NULL or NA
Description
Methods of checking whether various kinds of CRS objects are NULL
or NA
.
Logically equivalent to either is.na(fm_crs(x))
or
is.na(fm_crs(x, oblique = NA))
, but with a short-cut pre-check for
is.null(x)
.
Usage
fm_crs_is_null(x, crsonly = FALSE)
## S3 method for class 'fm_crs'
is.na(x)
Arguments
x |
An object supported by |
crsonly |
For crs objects with extended functionality, such as
|
Value
logical
Functions
-
fm_crs_is_null()
: Check if an object is or hasNULL
orNA
CRS information. If notNULL
,is.na(fm_crs(x))
is returned. This allows the input to be e.g. a proj4string or epsg number, since the defaultfm_crs()
method passes its argument on tosf::st_crs()
. -
is.na(fm_crs)
: Check if afm_crs
hasNA
crs information andNA
obliqueness
See Also
fm_crs()
, fm_CRS(), fm_crs_is_identical()
Examples
fm_crs_is_null(NULL)
fm_crs_is_null(27700)
fm_crs_is_null(fm_crs())
fm_crs_is_null(fm_crs(27700))
fm_crs_is_null(fm_crs(oblique = c(1, 2, 3, 4)))
fm_crs_is_null(fm_crs(oblique = c(1, 2, 3, 4)), crsonly = TRUE)
fm_crs_is_null(fm_crs(27700, oblique = c(1, 2, 3, 4)))
fm_crs_is_null(fm_crs(27700, oblique = c(1, 2, 3, 4)), crsonly = TRUE)
Plot CRS and fm_crs objects
Description
Plot the outline of a
crs
or fm_crs()
projection, with optional graticules (transformed parallels
and meridians) and Tissot indicatrices.
Usage
fm_crs_plot(
x,
xlim = NULL,
ylim = NULL,
outline = TRUE,
graticule = c(15, 15, 45),
tissot = c(30, 30, 30),
asp = 1,
add = FALSE,
eps = 0.05,
...
)
fm_crs_graticule(
x,
by = c(15, 15, 45),
add = FALSE,
do.plot = TRUE,
eps = 0.05,
...
)
fm_crs_tissot(
x,
by = c(30, 30, 30),
add = FALSE,
do.plot = TRUE,
eps = 0.05,
diff.eps = 0.01,
...
)
Arguments
x |
A |
xlim |
Optional x-axis limits. |
ylim |
Optional y-axis limits. |
outline |
Logical, if |
graticule |
Vector of length at most 3, to plot meridians with spacing
|
tissot |
Vector of length at most 3, to plot Tissot's indicatrices with
spacing |
asp |
The aspect ratio for the plot, default 1. |
add |
If |
eps |
Clipping tolerance for rudimentary boundary clipping |
... |
Additional arguments passed on to the internal calls to
|
by |
The spacing between |
do.plot |
logical; If TRUE, do plotting |
diff.eps |
Pre-scaling |
Value
NULL
, invisibly
Functions
-
fm_crs_graticule()
:Constructs graticule information for a given
CRS
orfm_crs()
and optionally plots the graticules. Returns a list with two elements,meridians
andparallels
, which areSpatialLines
objects. -
fm_crs_tissot()
:Constructs Tissot indicatrix information for a given
CRS
orfm_crs()
and optionally plots the indicatrices. Returns a list with one element,tissot
, which is aSpatialLines
object.
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
Examples
if (require("sf") && require("sp")) {
for (projtype in c(
"longlat_norm",
"lambert_norm",
"mollweide_norm",
"hammer_norm"
)) {
fm_crs_plot(fm_crs(projtype), main = projtype)
}
}
if (require("sf") && require("sp")) {
oblique <- c(0, 45, 45, 0)
for (projtype in c(
"longlat_norm",
"lambert_norm",
"mollweide_norm",
"hammer_norm"
)) {
fm_crs_plot(
fm_crs(projtype, oblique = oblique),
main = paste("oblique", projtype)
)
}
}
Handling CRS/WKT
Description
Get and set CRS object or WKT string properties.
Usage
fm_wkt_is_geocent(wkt)
fm_crs_is_geocent(crs)
fm_wkt_get_ellipsoid_radius(wkt)
fm_crs_get_ellipsoid_radius(crs)
fm_ellipsoid_radius(x)
## Default S3 method:
fm_ellipsoid_radius(x)
## S3 method for class 'character'
fm_ellipsoid_radius(x)
fm_wkt_set_ellipsoid_radius(wkt, radius)
fm_ellipsoid_radius(x) <- value
## S3 replacement method for class 'character'
fm_ellipsoid_radius(x) <- value
## S3 replacement method for class 'CRS'
fm_ellipsoid_radius(x) <- value
## S3 replacement method for class 'fm_CRS'
fm_ellipsoid_radius(x) <- value
## S3 replacement method for class 'crs'
fm_ellipsoid_radius(x) <- value
## S3 replacement method for class 'fm_crs'
fm_ellipsoid_radius(x) <- value
fm_crs_set_ellipsoid_radius(crs, radius)
fm_wkt_unit_params()
fm_wkt_get_lengthunit(wkt)
fm_wkt_set_lengthunit(wkt, unit, params = NULL)
fm_crs_get_lengthunit(crs)
fm_crs_set_lengthunit(crs, unit)
fm_length_unit(x)
## Default S3 method:
fm_length_unit(x)
## S3 method for class 'character'
fm_length_unit(x)
fm_length_unit(x) <- value
## S3 replacement method for class 'character'
fm_length_unit(x) <- value
## S3 replacement method for class 'CRS'
fm_length_unit(x) <- value
## S3 replacement method for class 'fm_CRS'
fm_length_unit(x) <- value
## S3 replacement method for class 'crs'
fm_length_unit(x) <- value
## S3 replacement method for class 'fm_crs'
fm_length_unit(x) <- value
fm_wkt(crs)
fm_proj4string(crs)
fm_wkt_tree_projection_type(wt)
fm_wkt_projection_type(wkt)
fm_crs_projection_type(crs)
fm_crs_bounds(crs, warn.unknown = FALSE)
## S3 replacement method for class 'inla.CRS'
fm_ellipsoid_radius(x) <- value
## S3 replacement method for class 'inla.CRS'
fm_length_unit(x) <- value
Arguments
wkt |
A WKT2 character string |
crs |
An |
x |
crs object to extract value from or assign values in |
radius |
numeric; The new radius value |
value |
Value to assign |
unit |
character, name of a unit. Supported names are
"metre", "kilometre", and the aliases "meter", "m", International metre",
"kilometer", and "km", as defined by |
params |
Length unit definitions, in the list format produced by
|
wt |
A parsed wkt tree, see |
warn.unknown |
logical, default |
Value
For fm_wkt_unit_params
, a
list of named unit definitions
For fm_wkt_get_lengthunit
, a
list of length units used in the wkt string, excluding the ellipsoid radius
unit.
For fm_wkt_set_lengthunit
, a
WKT2 string with altered length units.
Note that the length unit for the ellipsoid radius is unchanged.
For fm_crs_get_lengthunit
, a
list of length units used in the wkt string, excluding the ellipsoid radius
unit.
For fm_length_unit<-
, a crs object with
altered length units.
Note that the length unit for the ellipsoid radius is unchanged.
Functions
-
fm_wkt()
: Returns a WKT2 string, for any input supported byfm_crs()
. -
fm_proj4string()
: Returns a proj4 string, for any input supported byfm_crs()
. -
fm_wkt_tree_projection_type()
: Returns "longlat", "lambert", "mollweide", "hammer", "tmerc", orNULL
-
fm_wkt_projection_type()
: Seefm_wkt_tree_projection_type
-
fm_crs_projection_type()
: Seefm_wkt_tree_projection_type
-
fm_crs_bounds()
: Returns bounds information for a projection, as a list with elementstype
("rectangle" or "ellipse"),xlim
,ylim
, andpolygon
.
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
Examples
c1 <- fm_crs("globe")
fm_length_unit(c1)
fm_length_unit(c1) <- "m"
fm_length_unit(c1)
Detect manifold type
Description
Detect if a 2d object is on "R2", "S2", or "M2"
Usage
fm_detect_manifold(x)
fm_crs_detect_manifold(x)
## S3 method for class 'crs'
fm_detect_manifold(x)
## S3 method for class 'CRS'
fm_detect_manifold(x)
## S3 method for class 'numeric'
fm_detect_manifold(x)
## S3 method for class 'matrix'
fm_detect_manifold(x)
## S3 method for class 'fm_mesh_2d'
fm_detect_manifold(x)
Arguments
x |
Object to investigate |
Value
A string containing the detected manifold classification
Functions
-
fm_crs_detect_manifold()
: Detect if a crs is on "R2" or "S2" (iffm_crs_is_geocent(crs)
isTRUE
). ReturnsNA_character_
if the crs is NULL or NA.
Examples
fm_detect_manifold(1:4)
fm_detect_manifold(rbind(c(1, 0, 0), c(0, 1, 0), c(1, 1, 0)))
fm_detect_manifold(rbind(c(1, 0, 0), c(0, 1, 0), c(0, 0, 1)))
Diameter bound for a geometric object
Description
Find an upper bound to the convex hull of a point set or function space
Usage
fm_diameter(x, ...)
## S3 method for class 'matrix'
fm_diameter(x, manifold = NULL, ...)
## S3 method for class 'sf'
fm_diameter(x, ...)
## S3 method for class 'sfg'
fm_diameter(x, ...)
## S3 method for class 'sfc'
fm_diameter(x, ...)
## S3 method for class 'fm_lattice_2d'
fm_diameter(x, ...)
## S3 method for class 'fm_mesh_1d'
fm_diameter(x, ...)
## S3 method for class 'fm_mesh_2d'
fm_diameter(x, ...)
## S3 method for class 'fm_segm'
fm_diameter(x, ...)
## S3 method for class 'fm_mesh_3d'
fm_diameter(x, ...)
## S3 method for class 'fm_tensor'
fm_diameter(x, ...)
## S3 method for class 'fm_collect'
fm_diameter(x, ...)
## S3 method for class 'fm_list'
fm_diameter(x, ...)
Arguments
x |
A point set as an |
... |
Additional parameters passed on to the submethods. |
manifold |
Character string specifying the manifold type. Default for
|
Value
A scalar, upper bound for the diameter of the convex hull of the
point set. For multi-domain spaces (e.g. fm_tensor()
and
fm_collect()
), a vector of upper bounds for each domain is returned.
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
Examples
fm_diameter(matrix(c(0, 1, 1, 0, 0, 0, 1, 1), 4, 2))
Function spece degrees of freedom
Description
Obtain the degrees of freedom of a function space, i.e. the number of basis functions it uses.
Usage
fm_dof(x)
## S3 method for class 'fm_mesh_1d'
fm_dof(x)
## S3 method for class 'fm_mesh_2d'
fm_dof(x)
## S3 method for class 'fm_mesh_3d'
fm_dof(x)
## S3 method for class 'fm_tensor'
fm_dof(x)
## S3 method for class 'fm_collect'
fm_dof(x)
## S3 method for class 'fm_lattice_2d'
fm_dof(x)
## S3 method for class 'fm_lattice_Nd'
fm_dof(x)
Arguments
x |
A function space object, such as |
Value
An integer
Examples
fm_dof(fmexample$mesh)
Methods for projecting to/from mesh objects
Description
Calculate evaluation information and/or evaluate a function defined on a mesh or function space.
Usage
fm_evaluate(...)
## Default S3 method:
fm_evaluate(mesh, field, ...)
## S3 method for class 'fm_evaluator'
fm_evaluate(projector, field, ...)
## S3 method for class 'fm_basis'
fm_evaluate(basis, field, ...)
fm_evaluator(...)
## Default S3 method:
fm_evaluator(...)
## S3 method for class 'fm_mesh_3d'
fm_evaluator(mesh, loc = NULL, lattice = NULL, dims = NULL, ...)
## S3 method for class 'fm_mesh_2d'
fm_evaluator(mesh, loc = NULL, lattice = NULL, crs = NULL, ...)
## S3 method for class 'fm_mesh_1d'
fm_evaluator(mesh, loc = NULL, xlim = mesh$interval, dims = 100, ...)
fm_evaluator_lattice(mesh, ...)
## Default S3 method:
fm_evaluator_lattice(mesh, dims = 100, ...)
## S3 method for class 'fm_bbox'
fm_evaluator_lattice(mesh, dims = 100, ...)
## S3 method for class 'fm_mesh_2d'
fm_evaluator_lattice(
mesh,
xlim = NULL,
ylim = NULL,
dims = c(100, 100),
projection = NULL,
crs = NULL,
...
)
Arguments
... |
Additional arguments passed on to methods. |
mesh |
An fm_mesh_1d, fm_mesh_2d, or other object supported by a sub-method. |
field |
Basis function weights, one per mesh basis function, describing the function to be evaluated at the projection locations |
projector |
An |
basis |
An fm_basis object. |
loc |
Projection locations. Can be a matrix, |
lattice |
An |
dims |
Lattice dimensions. |
crs |
An optional CRS or inla.CRS object associated with |
xlim |
X-axis limits for a lattice. For R2 meshes, defaults to covering the domain. |
ylim |
Y-axis limits for a lattice. For R2 meshes, defaults to covering the domain. |
projection |
One of |
Value
A vector or matrix of the evaluated function
An fm_evaluator
object
Methods (by class)
-
fm_evaluate(default)
: The default method callsproj = fm_evaluator(mesh, ...)
, followed byfm_evaluate(proj, field)
.
Functions
-
fm_evaluate()
: Returns the field function evaluated at the locations determined by anfm_evaluator
object.fm_evaluate(mesh, field = field, ...)
is a shortcut tofm_evaluate(fm_evaluator(mesh, ...), field = field)
. -
fm_evaluator()
: Returns anfm_evaluator
list object with evaluation information. Theproj
element is afm_basis
object, containing (at least) a mapping matrixA
and a logical vectorok
, that indicates which locations were mappable to the input mesh. Forfm_mesh_2d
input,proj
also contains abary
fm_bary object, with the barycentric coordinates within the triangle each input location falls in. -
fm_evaluator(default)
: The default method callsfm_basis
and creates a basicfm_evaluator
object -
fm_evaluator(fm_mesh_3d)
: The...
arguments are passed on tofm_evaluator_lattice()
if noloc
orlattice
is provided. -
fm_evaluator(fm_mesh_2d)
: The...
arguments are passed on tofm_evaluator_lattice()
if noloc
orlattice
is provided. -
fm_evaluator_lattice()
: Create a lattice object by default covering the input mesh. -
fm_evaluator_lattice(default)
: Creates anfm_lattice_2d()
object, by default covering the input mesh. -
fm_evaluator_lattice(fm_bbox)
: Creates anfm_lattice_Nd()
object, by default covering the input mesh. -
fm_evaluator_lattice(fm_mesh_2d)
: Creates anfm_lattice_2d()
object, by default covering the input mesh.
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
fm_mesh_2d()
, fm_mesh_1d()
,
fm_lattice_2d()
Examples
if (TRUE) {
n <- 20
loc <- matrix(runif(n * 2), n, 2)
mesh <- fm_rcdt_2d_inla(loc, refine = list(max.edge = 0.05))
proj <- fm_evaluator(mesh)
field <- cos(mesh$loc[, 1] * 2 * pi * 3) * sin(mesh$loc[, 2] * 2 * pi * 7)
image(proj$x, proj$y, fm_evaluate(proj, field))
}
# if (require("ggplot2") &&
# require("ggpolypath")) {
# ggplot() +
# gg(data = fm_as_sfc(mesh), col = field)
# }
Compute finite element matrices
Description
Compute finite element mass and structure matrices
Usage
fm_fem(mesh, order = 2, ...)
## S3 method for class 'fm_mesh_1d'
fm_fem(mesh, order = 2, ...)
## S3 method for class 'fm_mesh_2d'
fm_fem(mesh, order = 2, aniso = NULL, ...)
## S3 method for class 'fm_tensor'
fm_fem(mesh, order = 2, ...)
## S3 method for class 'fm_collect'
fm_fem(mesh, order = 2, ...)
## S3 method for class 'fm_mesh_3d'
fm_fem(mesh, order = 2, ...)
Arguments
mesh |
|
order |
integer; the maximum operator order |
... |
Currently unused |
aniso |
If non-NULL, a |
Value
fm_fem.fm_mesh_1d
: A list with elements c0
, c1
, g1
, g2
,
etc.
When mesh$degree == 2
, also g01
, g02
, and g12
.
fm_fem.fm_mesh_2d
: A list with elements c0
, c1
, g1
, va
,
ta
, and more if order > 1
. When aniso
is non-NULL, also g1aniso
matrices, etc.
fm_fem.fm_tensor
: A list with elements cc
, g1
, g2
.
fm_fem.fm_collect
: A list with elements c0
, c1
,
g1
, g2
, etc, and cc
(c0
for every model except fm_mesh_1d
with
degree=2
, for which it is c1
). If the base type for the collection
provides va
and ta
values, those are also returned.
fm_fem.fm_mesh_3d
: A list with elements c0
, c1
, g1
, g2
,
va
, ta
, and more if order > 2
.
Examples
names(fm_fem(fm_mesh_1d(1:4), order = 3))
names(fm_fem(fmexample$mesh, order = 3))
Generate text RGB color specifications.
Description
Generates a text RGB color specification matrix based on a color palette.
Usage
fm_generate_colors(
color,
color.axis = NULL,
color.n = 512,
color.palette = cm.colors,
color.truncate = FALSE,
alpha = NULL
)
Arguments
color |
|
color.axis |
The min/max limit values for the color mapping. |
color.n |
The number of colors to use in the color palette. |
color.palette |
A color palette function. |
color.truncate |
If |
alpha |
Transparency/opaqueness values. |
Value
A list with character vector colors
and numeric vector alpha
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
Examples
fm_generate_colors(1:4, color.axis = c(1, 4))
SPDE, GMRF, and Matérn process methods
Description
Usage
fm_matern_precision(x, alpha, rho, sigma)
fm_matern_sample(x, alpha = 2, rho, sigma, n = 1, loc = NULL)
fm_covariance(Q, A1 = NULL, A2 = NULL, partial = FALSE)
fm_sample(n, Q, mu = 0, constr = NULL)
Arguments
x |
A mesh object, e.g. from |
alpha |
The SPDE operator order. The resulting smoothness index
is |
rho |
The Matérn range parameter
(scale parameter |
sigma |
The nominal Matérn std.dev. parameter |
n |
The number of samples to generate |
loc |
locations to evaluate the random field, compatible with
|
Q |
A precision matrix |
A1 , A2 |
Matrices, typically obtained from |
partial |
|
mu |
Optional mean vector |
constr |
Optional list of constraint information, with elements
|
Value
fm_matern_sample()
returns a matrix, where each column is a
sampled field. If loc
is NULL
, the fm_dof(mesh)
basis weights are
given. Otherwise, the evaluated field at the nrow(loc)
locations loc
are given (from version 0.1.4.9001
)
Functions
-
fm_matern_precision()
: Construct the (sparse) precision matrix for the basis weights for Whittle-Matérn SPDE models. The boundary behaviour is determined by the provided mesh function space. -
fm_matern_sample()
: Simulate a Matérn field given a mesh and covariance function parameters, and optionally evaluate at given locations. -
fm_covariance()
: Compute the covariance between "A1 x" and "A2 x", when x is a basis vector with precision matrixQ
. -
fm_sample()
: Generaten
samples based on a sparse precision matrixQ
Examples
library(Matrix)
mesh <- fm_mesh_1d(-20:120, degree = 2)
Q <- fm_matern_precision(mesh, alpha = 2, rho = 15, sigma = 1)
x <- seq(0, 100, length.out = 601)
A <- fm_basis(mesh, x)
plot(x,
as.vector(Matrix::diag(fm_covariance(Q, A))),
type = "l",
ylab = "marginal variances"
)
plot(x,
fm_evaluate(mesh, loc = x, field = fm_sample(1, Q)[, 1]),
type = "l",
ylab = "process sample"
)
Create hexagon lattice points
Description
from
0.3.0.9001
. Create
hexagon lattice points within a boundary. By default, the hexagonal lattice
is anchored at the coordinate system origin, so that grids with different
but overlapping boundaries will have matching points.
Usage
fm_hexagon_lattice(
bnd,
edge_len = NULL,
buffer_n = 0.49,
align = "origin",
meta = FALSE
)
Arguments
bnd |
Boundary object ( |
edge_len |
Triangle edge length. Default |
buffer_n |
Number of triangle height multiples for buffer inside the boundary object to the start of the lattice. Default 0.49. |
align |
Alignment of the hexagon lattice, either a length-2 numeric, or
character, a
|
meta |
logical; if |
Value
An sfc
object with points, if meta
is FALSE
(default), or if
meta=TRUE
, a list:
- lattice
sfc
with lattice points- edge_len
numeric
with edge length- bnd_inner
sf
object with the inner boundary used to filter points outside of aedge_len * buffer_n
distance from the boundary- grid_n
integer
with the number of points in each direction prior to filtering- align
numeric
with the alignment coordinates of the hexagon lattice
Author(s)
Man Ho Suen M.H.Suen@sms.ed.ac.uk, Finn Lindgren Finn.Lindgren@gmail.com
See Also
Examples
(m <- fm_mesh_2d(
fm_hexagon_lattice(
fmexample$boundary_sf[[1]],
edge_len = 0.1 * 5
),
max.edge = c(0.2, 1) * 5,
boundary = fmexample$boundary_sf
))
(m2 <- fm_mesh_2d(
fm_hexagon_lattice(
fmexample$boundary_sf[[1]],
edge_len = 0.1 * 5,
align = "centroid"
),
max.edge = c(0.2, 1) * 5,
boundary = fmexample$boundary_sf
))
if (require("ggplot2", quietly = TRUE) &&
require("patchwork", quietly = TRUE)) {
((ggplot() +
geom_fm(data = m) +
geom_point(aes(0, 0), col = "red")) |
(ggplot() +
geom_fm(data = m2) +
geom_point(aes(0, 0), col = "red") +
geom_sf(data = sf::st_centroid(fmexample$boundary_sf[[1]]))
)
)
}
Create hexagon lattice points
Description
Create hexagon lattice points within a boundary
Usage
fm_hexagon_lattice_orig(bnd, x_bin = 250, edge_len_n = 1)
Arguments
bnd |
Boundary object |
x_bin |
Number of bins in x axis |
edge_len_n |
Number of edge length of mesh from the boundary to create hexagon mesh using x_bin |
Value
A list with lattice points, edge length, and inner boundary
Author(s)
Man Ho Suen M.H.Suen@sms.ed.ac.uk
Multi-domain integration
Description
Construct integration points on tensor product spaces
Usage
fm_int(domain, samplers = NULL, ...)
## S3 method for class 'list'
fm_int(domain, samplers = NULL, ...)
## S3 method for class 'numeric'
fm_int(domain, samplers = NULL, name = "x", ...)
## S3 method for class 'character'
fm_int(domain, samplers = NULL, name = "x", ...)
## S3 method for class 'factor'
fm_int(domain, samplers = NULL, name = "x", ...)
## S3 method for class 'SpatRaster'
fm_int(domain, samplers = NULL, name = "x", ...)
## S3 method for class 'fm_lattice_2d'
fm_int(domain, samplers = NULL, name = "x", ...)
## S3 method for class 'fm_mesh_1d'
fm_int(
domain,
samplers = NULL,
name = "x",
int.args = NULL,
format = NULL,
...
)
## S3 method for class 'fm_mesh_2d'
fm_int(
domain,
samplers = NULL,
name = NULL,
int.args = NULL,
format = NULL,
...
)
Arguments
domain |
Functional space specification; single domain or a named list of domains |
samplers |
For single domain |
... |
Additional arguments passed on to other methods |
name |
For single-domain methods, the variable name to use for the integration points. Default 'x' |
int.args |
List of arguments passed to line and integration methods.
|
format |
character; determines the output format, as either "sf"
(default for |
Value
A tibble
, sf
, or SpatialPointsDataFrame
of 1D
and 2D integration points, including a weight
column, a.block
column,
and a matrix column .block_origin
.
The .block
column is used to identify the integration
blocks defined by the samplers. The .block_origin
collects the original
subdomain block information for tensor product blocks.
Methods (by class)
-
fm_int(list)
: Multi-domain integration -
fm_int(numeric)
: Discrete double or integer space integration -
fm_int(character)
: Discrete character space integration -
fm_int(factor)
: Discrete factor space integration -
fm_int(SpatRaster)
:SpatRaster
integration. Not yet implemented. -
fm_int(fm_lattice_2d)
:fm_lattice_2d
integration. Not yet implemented. -
fm_int(fm_mesh_1d)
:fm_mesh_1d
integration. Supported samplers:-
NULL
for integration over the entire domain; A length 2 vector defining an interval;
A 2-column matrix with a single interval in each row;
A tibble with a named column containing a matrix, and optionally a
weight
column.
-
-
fm_int(fm_mesh_2d)
:fm_mesh_2d
integration. Any sampler class with an associatedfm_int_mesh_2d()
method is supported.
Examples
# Integration on the interval (2, 3.5) with Simpson's rule
ips <- fm_int(fm_mesh_1d(0:4), samplers = cbind(2, 3.5))
plot(ips$x, ips$weight)
# Create integration points for the two intervals [0,3] and [5,10]
ips <- fm_int(
fm_mesh_1d(0:10),
rbind(c(0, 3), c(5, 10))
)
plot(ips$x, ips$weight)
# Convert a 1D mesh into integration points
mesh <- fm_mesh_1d(seq(0, 10, by = 1))
ips <- fm_int(mesh, name = "time")
plot(ips$time, ips$weight)
if (require("ggplot2", quietly = TRUE)) {
#' Integrate on a 2D mesh with polygon boundary subset
ips <- fm_int(fmexample$mesh, fmexample$boundary_sf[[1]])
ggplot() +
geom_sf(data = fm_as_sfc(fmexample$mesh, multi = TRUE), alpha = 0.5) +
geom_sf(data = fmexample$boundary_sf[[1]], fill = "red", alpha = 0.5) +
geom_sf(data = ips, aes(size = weight)) +
scale_size_area()
}
# Individual sampling points:
(ips <- fm_int(0:10, c(0, 3, 5, 6, 10)))
# Sampling blocks:
(ips <- fm_int(0:10, list(c(0, 3), c(5, 6, 10))))
# Continuous integration on intervals
ips <- fm_int(
fm_mesh_1d(0:10, boundary = "cyclic"),
rbind(c(0, 3), c(5, 10))
)
plot(ips$x, ips$weight)
Subset integration on a mesh
Description
Integration methods for spatial samplers on fm_mesh_2d
meshes.
Usage
fm_int_mesh_2d(samplers, domain, name = NULL, int.args = NULL, ...)
fm_int_mesh_2d_NULL(samplers, domain, name = NULL, int.args = NULL, ...)
## S3 method for class 'sf'
fm_int_mesh_2d(samplers, domain, name = NULL, int.args = NULL, ...)
## S3 method for class 'sfc_POINT'
fm_int_mesh_2d(
samplers,
domain,
name = NULL,
int.args = NULL,
.weight = rep(1, NROW(samplers)),
...
)
## S3 method for class 'sfc_MULTIPOINT'
fm_int_mesh_2d(
samplers,
domain,
name = NULL,
int.args = NULL,
.weight = rep(1, NROW(samplers)),
...
)
## S3 method for class 'sfc_LINESTRING'
fm_int_mesh_2d(
samplers,
domain,
name = NULL,
int.args = NULL,
.weight = rep(1, NROW(samplers)),
...
)
## S3 method for class 'sfc_MULTILINESTRING'
fm_int_mesh_2d(
samplers,
domain,
name = NULL,
int.args = NULL,
.weight = rep(1, NROW(samplers)),
...
)
## S3 method for class 'sfc_POLYGON'
fm_int_mesh_2d(
samplers,
domain,
name = NULL,
int.args = NULL,
.weight = rep(1, NROW(samplers)),
...
)
## S3 method for class 'sfc_MULTIPOLYGON'
fm_int_mesh_2d(
samplers,
domain,
name = NULL,
int.args = NULL,
.weight = rep(1, NROW(samplers)),
...
)
## S3 method for class 'sfc_GEOMETRY'
fm_int_mesh_2d(
samplers,
domain,
name = NULL,
int.args = NULL,
.weight = rep(1, NROW(samplers)),
...
)
## S3 method for class 'Spatial'
fm_int_mesh_2d(
samplers,
domain,
name = NULL,
int.args = NULL,
format = NULL,
...
)
## S3 method for class 'fm_segm'
fm_int_mesh_2d(
samplers,
domain,
name = NULL,
int.args = NULL,
format = NULL,
...
)
Arguments
samplers |
For single domain |
domain |
Functional space specification; single domain or a named list of domains |
name |
For single-domain methods, the variable name to use for the integration points. Default 'x' |
int.args |
List of arguments passed to line and integration methods.
|
... |
Additional arguments passed on to other methods |
format |
character; determines the output format, as either "sf"
(default for |
Value
A list
, sf
, or Spatial
object with
point coordinate information and additional columns weight
and .block
Methods (by class)
-
fm_int_mesh_2d(sf)
:sf
integration -
fm_int_mesh_2d(sfc_POINT)
:sfc_POINT
integration -
fm_int_mesh_2d(sfc_MULTIPOINT)
:sfc_MULTIPOINT
integration -
fm_int_mesh_2d(sfc_LINESTRING)
:sfc_LINESTRING
integration -
fm_int_mesh_2d(sfc_MULTILINESTRING)
:sfc_MULTILINESTRING
integration -
fm_int_mesh_2d(sfc_POLYGON)
:sfc_POLYGON
integration -
fm_int_mesh_2d(sfc_MULTIPOLYGON)
:sfc_MULTIPOLYGON
integration -
fm_int_mesh_2d(sfc_GEOMETRY)
:sfc_GEOMERY
integration -
fm_int_mesh_2d(Spatial)
:Spatial
integration -
fm_int_mesh_2d(fm_segm)
:fm_segm
integration
Functions
-
fm_int_mesh_2d_NULL()
: Full domain integration
Examples
str(fm_int_mesh_2d(samplers = NULL, domain = fmexample$mesh))
Integration scheme for mesh triangle interiors
Description
Integration scheme for mesh triangle interiors
Usage
fm_int_mesh_2d_core(mesh, tri_subset = NULL, nsub = NULL)
Arguments
mesh |
Mesh on which to integrate |
tri_subset |
Optional triangle index vector for integration on a subset
of the mesh triangles (Default |
nsub |
number of subdivision points along each triangle edge, giving
|
Value
tibble
with columns loc
and weight
with
integration points for the mesh
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
Examples
str(fm_int_mesh_2d_core(fmexample$mesh))
Multi-domain sampler integration
Description
Combine integration over different domains
Usage
fm_int_multi_sampler(domain, samplers, ...)
Arguments
domain |
A list of named domains |
samplers |
A named list of samplers |
... |
Passed on to each |
Value
An object with integration points and weights
Examples
fm_int_multi_sampler(
domain = list(x = fm_mesh_1d(1:4), y = 11:12),
samplers = tibble::tibble(
x = rbind(c(1, 3), c(2, 4)),
y = c(12, 11)
)
)
Query if points are inside a mesh
Description
Queries whether each input point is within a mesh or not.
Usage
fm_is_within(x, y, ...)
Arguments
x |
A set of points/locations of a class supported by |
y |
An fm_mesh_2d or other class supported by
|
... |
Passed on to |
Value
A logical vector
Examples
all(fm_is_within(fmexample$loc, fmexample$mesh))
Make a lattice object
Description
Construct a lattice grid for fm_mesh_2d()
Usage
fm_lattice_2d(...)
## Default S3 method:
fm_lattice_2d(
x = seq(0, 1, length.out = 2),
y = seq(0, 1, length.out = 2),
z = NULL,
dims = if (is.matrix(x)) {
dim(x)
} else {
c(length(x), length(y))
},
units = NULL,
crs = NULL,
...
)
Arguments
... |
Passed on to submethods |
x |
vector or grid matrix of x-values. Vector values are sorted before
use. Matrix input is assumed to be a grid of x-values with the same
ordering convention of |
y |
vector of grid matrix of y-values. Vector values are sorted before
use. Matrix input is assumed to be a grid of y-values with the same
ordering convention of |
z |
if x is a matrix, a grid matrix of z-values, with the same ordering
as |
dims |
the size of the grid, length 2 vector |
units |
One of |
crs |
An optional |
Value
An fm_lattice_2d
object with elements
- dims
integer vector
- x
x-values for original vector input
- y
y-values for original vector input
- loc
matrix of
(x, y)
values or(x, y, z)
values. May be altered byfm_transform()
- segm
fm_segm
object- crs
fm_crs
object forloc
, orNULL
- crs0
fm_crs
object for(x,y)
, orNULL
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
Other object creation and conversion:
fm_as_collect()
,
fm_as_fm()
,
fm_as_lattice_2d()
,
fm_as_lattice_Nd()
,
fm_as_mesh_1d()
,
fm_as_mesh_2d()
,
fm_as_mesh_3d()
,
fm_as_segm()
,
fm_as_sfc()
,
fm_as_tensor()
,
fm_collect()
,
fm_lattice_Nd()
,
fm_mesh_1d()
,
fm_mesh_2d()
,
fm_segm()
,
fm_simplify()
,
fm_tensor()
Examples
lattice <- fm_lattice_2d(
seq(0, 1, length.out = 17),
seq(0, 1, length.out = 10)
)
## Use the lattice "as-is", without refinement:
mesh <- fm_rcdt_2d_inla(lattice = lattice, boundary = lattice$segm)
mesh <- fm_rcdt_2d_inla(lattice = lattice, extend = FALSE)
## Refine the triangulation, with limits on triangle angles and edges:
mesh <- fm_rcdt_2d(
lattice = lattice,
refine = list(max.edge = 0.08),
extend = FALSE
)
## Add an extension around the lattice, but maintain the lattice edges:
mesh <- fm_rcdt_2d(
lattice = lattice,
refine = list(max.edge = 0.08),
interior = lattice$segm
)
## Only add extension:
mesh <- fm_rcdt_2d(lattice = lattice, refine = list(max.edge = 0.08))
Lattice grids for N dimensions
Description
Construct an N-dimensional lattice grid
Usage
fm_lattice_Nd(x = NULL, ...)
## S3 method for class 'matrix'
fm_lattice_Nd(x = NULL, dims = NULL, values = NULL, ...)
## S3 method for class 'data.frame'
fm_lattice_Nd(x = NULL, ...)
## S3 method for class 'list'
fm_lattice_Nd(x = NULL, dims = NULL, ...)
## S3 method for class 'fm_bbox'
fm_lattice_Nd(x = NULL, dims = NULL, ...)
## S3 method for class ''NULL''
fm_lattice_Nd(x = NULL, ..., dims = NULL)
Arguments
x |
|
... |
Passed on to submethods |
dims |
numeric; the size of the grid of dimension |
values |
list of grid axis values |
Value
An fm_lattice_Nd
object with elements
- dims
integer vector
- values
the grid coordinate axis values
- loc
matrix of constructed grid coordinates
Methods (by class)
-
fm_lattice_Nd(`NULL`)
: Ignores theNULL
x
and creates a lattice based onvalues
(if non-NULL) anddims
unit hypercube lattice grid withdims
dimensions.
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
Other object creation and conversion:
fm_as_collect()
,
fm_as_fm()
,
fm_as_lattice_2d()
,
fm_as_lattice_Nd()
,
fm_as_mesh_1d()
,
fm_as_mesh_2d()
,
fm_as_mesh_3d()
,
fm_as_segm()
,
fm_as_sfc()
,
fm_as_tensor()
,
fm_collect()
,
fm_lattice_2d()
,
fm_mesh_1d()
,
fm_mesh_2d()
,
fm_segm()
,
fm_simplify()
,
fm_tensor()
Examples
(lattice <- fm_lattice_Nd(
list(
seq(0, 1, length.out = 3),
seq(0, 1, length.out = 4),
seq(0, 1, length.out = 2)
)
))
if (requireNamespace("geometry", quietly = TRUE)) {
(mesh <- fm_delaunay_3d(lattice$loc))
}
Handle lists of fmesher objects
Description
Methods for constructing and manipulating fm_list
objects.
Usage
fm_list(x, ..., .class_stub = NULL)
fm_as_list(x, ..., .class_stub = NULL)
## S3 method for class 'fm_list'
c(...)
## S3 method for class 'fm_list'
x[i]
Arguments
x |
|
... |
Arguments passed to each individual conversion call. |
.class_stub |
character; class stub name of class to convert each list
element to. If |
i |
indices specifying elements to extract |
Value
An fm_list
object, potentially with fm_{class_stub}_list
added.
Methods (by generic)
-
c(fm_list)
: The...
arguments should be coercible tofm_list
objects. -
[
: Extract sub-list
Functions
-
fm_list()
: Convert each element of a list, or convert a single non-list object and return in a list -
fm_as_list()
: Convert each element of a list, or convert a single non-list object and return in a list
Examples
fm_as_list(list(fmexample$mesh, fm_segm_join(fmexample$boundary_fm)))
Query the mesh manifold type
Description
Extract a manifold definition string, or a logical for matching manifold type
Usage
fm_manifold(x, type = NULL)
fm_manifold_get(x)
## Default S3 method:
fm_manifold_get(x)
## S3 method for class 'character'
fm_manifold_get(x)
## S3 method for class 'fm_lattice_2d'
fm_manifold_get(x)
## S3 method for class 'fm_lattice_Nd'
fm_manifold_get(x)
fm_manifold_type(x)
fm_manifold_dim(x)
Arguments
x |
An object with |
type |
|
Value
fm_manifold()
: Either logical (matching manifold type yes/no),
or character (the stored manifold, when is.null(type)
is TRUE
)
fm_manifold_get()
: character
or NULL
fm_manifold_type()
: character or NULL; "M" (curved manifold),
"R" (flat space), "S" (generalised spherical space), "T"
(general tensor product space), or "G" (metric graph)
fm_manifold_dim()
: integer or NULL
Functions
-
fm_manifold_get()
: Method for obtaining a text representation of the manifold characteristics, e.g. "R1", "R2", "M2", or "T3". The default method assumes that the manifold is stored as acharacter
string in a "manifold" element of the object, so it can be extracted withx[["manifold"]]
. Object classes that do not store the information in this way need to implement their own method.
Examples
fm_manifold_get(fmexample$mesh)
fm_manifold(fmexample$mesh)
fm_manifold(fmexample$mesh, "R2")
fm_manifold_type(fmexample$mesh)
fm_manifold_dim(fmexample$mesh)
Make a 1D mesh object
Description
Create a fm_mesh_1d
object.
Usage
fm_mesh_1d(
loc,
interval = range(loc),
boundary = NULL,
degree = 1,
free.clamped = FALSE,
...
)
Arguments
loc |
B-spline knot locations. |
interval |
Interval domain endpoints. |
boundary |
Boundary condition specification. Valid conditions are
|
degree |
The B-spline basis degree. Supported values are 0, 1, and 2. |
free.clamped |
If |
... |
Additional options, currently unused. |
Value
An fm_mesh_1d
object
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
Other object creation and conversion:
fm_as_collect()
,
fm_as_fm()
,
fm_as_lattice_2d()
,
fm_as_lattice_Nd()
,
fm_as_mesh_1d()
,
fm_as_mesh_2d()
,
fm_as_mesh_3d()
,
fm_as_segm()
,
fm_as_sfc()
,
fm_as_tensor()
,
fm_collect()
,
fm_lattice_2d()
,
fm_lattice_Nd()
,
fm_mesh_2d()
,
fm_segm()
,
fm_simplify()
,
fm_tensor()
Examples
if (require("ggplot2")) {
m1 <- fm_mesh_1d(c(1, 2, 3, 5, 8, 10),
boundary = c("neumann", "free")
)
weights <- c(2, 3, 6, 3, 4, 7)
ggplot() +
geom_fm(data = m1, xlim = c(0.5, 11), weights = weights)
m2 <- fm_mesh_1d(c(1, 2, 3, 5, 8, 10),
boundary = c("neumann", "free"),
degree = 2
)
ggplot() +
geom_fm(data = m2, xlim = c(0.5, 11), weights = weights)
# The knot interpretation is different for degree=2 and degree=1 meshes:
ggplot() +
geom_fm(data = m1, xlim = c(0.5, 11), weights = weights) +
geom_fm(data = m2, xlim = c(0.5, 11), weights = weights)
# The `mid` values are the representative basis function midpoints,
# and can be used to connect degree=2 and degree=1 mesh interpretations:
m1b <- fm_mesh_1d(m2$mid,
boundary = c("neumann", "free"),
degree = 1
)
ggplot() +
geom_fm(data = m2, xlim = c(0.5, 11), weights = weights) +
geom_fm(data = m1b, xlim = c(0.5, 11), weights = weights)
}
Make a 2D mesh object
Description
Make a 2D mesh object
Usage
fm_mesh_2d(...)
fm_mesh_2d_inla(
loc = NULL,
loc.domain = NULL,
offset = NULL,
n = NULL,
boundary = NULL,
interior = NULL,
max.edge = NULL,
min.angle = NULL,
cutoff = 1e-12,
max.n.strict = NULL,
max.n = NULL,
plot.delay = NULL,
crs = NULL,
...
)
Arguments
... |
Currently passed on to |
loc |
Matrix of point locations to be used as initial triangulation
nodes. Can alternatively be a |
loc.domain |
Matrix of point locations used to determine the domain
extent. Can alternatively be a |
offset |
The automatic extension distance. One or two values, for an inner and an optional outer extension. If negative, interpreted as a factor relative to the approximate data diameter (default=-0.10???) |
n |
The number of initial nodes in the automatic extensions (default=16) |
boundary |
one or more (as list) of |
interior |
one object supported by |
max.edge |
The largest allowed triangle edge length. One or two values. |
min.angle |
The smallest allowed triangle angle. One or two values. (Default=21) |
cutoff |
The minimum allowed distance between points. Point at most as far apart as this are replaced by a single vertex prior to the mesh refinement step. |
max.n.strict |
The maximum number of vertices allowed, overriding
|
max.n |
The maximum number of vertices allowed, overriding
|
plot.delay |
If logical |
crs |
An optional |
Value
An fm_mesh_2d
object.
Functions
-
fm_mesh_2d_inla()
: Legacy method forINLA::inla.mesh.2d()
Create a triangle mesh based on initial point locations, specified or automatic boundaries, and mesh quality parameters.
INLA compatibility
For mesh and curve creation, the fm_rcdt_2d_inla()
, fm_mesh_2d_inla()
,
and fm_nonconvex_hull_inla()
methods will keep the interface syntax used by
INLA::inla.mesh.create()
, INLA::inla.mesh.2d()
, and
INLA::inla.nonconvex.hull()
functions, respectively, whereas the
fm_rcdt_2d()
, fm_mesh_2d()
, and fm_nonconvex_hull()
interfaces may be
different, and potentially change in the future.
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
fm_rcdt_2d()
, fm_mesh_2d()
, fm_delaunay_2d()
,
fm_nonconvex_hull()
, fm_extensions()
, fm_refine()
Other object creation and conversion:
fm_as_collect()
,
fm_as_fm()
,
fm_as_lattice_2d()
,
fm_as_lattice_Nd()
,
fm_as_mesh_1d()
,
fm_as_mesh_2d()
,
fm_as_mesh_3d()
,
fm_as_segm()
,
fm_as_sfc()
,
fm_as_tensor()
,
fm_collect()
,
fm_lattice_2d()
,
fm_lattice_Nd()
,
fm_mesh_1d()
,
fm_segm()
,
fm_simplify()
,
fm_tensor()
Examples
fm_mesh_2d_inla(boundary = fm_extensions(cbind(2, 1), convex = 1, 2))
Special coordinate mappings for fm_mesh_2d
projections.
Description
Calculates coordinate mappings for spherical fm_mesh_2d
projections.
This is an internal function not intended for general use.
Usage
fm_mesh_2d_map(loc, projection = NULL, inverse = TRUE)
fm_mesh_2d_map_lim(loc = NULL, projection = NULL)
Arguments
loc |
Coordinates to be mapped. |
projection |
The projection type. One of |
inverse |
If |
Value
For fm_mesh_2d_map_lim
, a list:
xlim |
X axis limits in the map domain |
ylim |
Y axis limits in the map domain |
No attempt is made to find minimal limits for partial spherical domains.
Functions
-
fm_mesh_2d_map_lim()
: Projection extent limit calculations
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
Examples
(loc <- fm_mesh_2d_map(cbind(20, 10), "longlat"))
fm_mesh_2d_map(loc, "longlat", inverse = FALSE)
Construct a 3D tetrahedralisation
Description
Constructs a 3D tetrahedralisation object.
Usage
fm_mesh_3d(loc = NULL, tv = NULL, ...)
fm_delaunay_3d(loc, ...)
Arguments
loc |
Input coordinates that should be part of the mesh. Can be a
matrix, |
tv |
Tetrahedron indices, as a N-by-4 index vector into |
... |
Currently unused. |
Value
An fm_mesh_3d
object
Functions
-
fm_delaunay_3d()
: Construct a plain Delaunay triangulation in 3D. Requires thegeometry
package.
Examples
(m <- fm_mesh_3d(
matrix(c(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0), 4, 3, byrow = TRUE),
matrix(c(1, 2, 3, 4), 1, 4, byrow = TRUE)
))
(m <- fm_delaunay_3d(matrix(rnorm(30), 10, 3)))
Construct the intersection mesh of a mesh and a polygon
Description
Construct the intersection mesh of a mesh and a polygon
Usage
fm_mesh_intersection(mesh, poly)
Arguments
mesh |
|
poly |
|
Value
An fm_mesh_2d object
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
Examples
segm <- fm_segm(rbind(c(-4, -4), c(4, -4), c(0, 4)),
is.bnd = TRUE
)
str(m <- fm_mesh_intersection(fmexample$mesh, segm))
plot(fmexample$mesh)
lines(segm, col = 4)
plot(m, edge.color = 2, add = TRUE)
Compute an extension of a spatial object
Description
Constructs a potentially nonconvex extension of a spatial object by
performing dilation by convex + concave
followed by
erosion by concave
. This is equivalent to dilation by convex
followed
by closing (dilation + erosion) by concave
.
Usage
fm_nonconvex_hull(x, ..., format = "sf", method = "fm")
fm_extensions(
x,
convex = -0.15,
concave = convex,
...,
format = "sf",
method = "fm"
)
fm_nonconvex_hull_fm(
x,
convex = -0.15,
concave = convex,
resolution = 40,
eps = NULL,
eps_rel = NULL,
crs = fm_crs(x),
...
)
fm_nonconvex_hull_sf(
x,
convex = -0.15,
concave = convex,
preserveTopology = TRUE,
dTolerance = NULL,
crs = fm_crs(x),
...
)
## S3 method for class 'sfc'
fm_nonconvex_hull(x, ..., format = "sf", method = "fm")
## S3 method for class 'matrix'
fm_nonconvex_hull(x, ..., format = "sf", method = "fm")
## S3 method for class 'sf'
fm_nonconvex_hull(x, ..., format = "sf", method = "fm")
## S3 method for class 'Spatial'
fm_nonconvex_hull(x, ..., format = "sf", method = "fm")
## S3 method for class 'sfg'
fm_nonconvex_hull(x, ..., format = "sf", method = "fm")
## S3 method for class 'fm_segm'
fm_nonconvex_hull(x, ..., format = "sf", method = "fm")
## S3 method for class 'fm_segm_list'
fm_nonconvex_hull(x, ..., format = "sf", method = "fm")
Arguments
x |
A spatial object |
... |
Arguments passed on to the |
format |
character specifying the output format; "sf" (default) or "fm" |
method |
character specifying the construction method; "fm" (default) or "sf" |
convex |
numeric vector; How much to extend |
concave |
numeric vector; The minimum allowed reentrant curvature.
Default equal to |
resolution |
integer; The internal computation resolution. A warning
will be issued when this needs to be increased for higher accuracy, with
the required resolution stated. For |
eps , eps_rel |
The polygonal curve simplification tolerances used for
simplifying the resulting boundary curve. See |
crs |
Optional crs object for the resulting polygon. Default is
|
preserveTopology |
logical; argument to |
dTolerance |
If not zero, controls the |
Details
Morphological dilation by convex
, followed by closing by
concave
, with minimum concave curvature radius concave
. If
the dilated set has no gaps of width between
2 \textrm{convex}
(\sqrt{1+2\textrm{concave}/\textrm{convex}} - 1)
and 2\textrm{concave}
, then the minimum convex curvature
radius is convex
.
The implementation is based on the identity
\textrm{dilation}(a) \&
\textrm{closing}(b) = \textrm{dilation}(a+b) \& \textrm{erosion}(b)
where all operations are with respect to disks with the specified radii.
When convex
, concave
, or dTolerance
are negative,
fm_diameter * abs(...)
is used instead.
Value
fm_nonconvex_hull()
returns an extended object as an sfc
polygon
object (if format = "sf"
) or an fm_segm object (if 'format = "fm")
fm_extensions()
returns a list of sfc
objects.
Functions
-
fm_extensions()
: Constructs a potentially nonconvex extension of a spatial object by performing dilation byconvex + concave
followed by erosion byconcave
. This is equivalent to dilation byconvex
followed by closing (dilation + erosion) byconcave
.The
...
arguments are passed on tofm_nonconvex_hull_fm()
orfm_nonconvex_hull_sf()
, depending on themethod
argument. -
fm_nonconvex_hull_fm()
:fmesher
method forfm_nonconvex_hull()
, which uses thesplancs::nndistF()
function to compute nearest-neighbour distances. -
fm_nonconvex_hull_sf()
: Differs fromsf::st_buffer(x, convex)
followed bysf::st_concave_hull()
(available from GEOS 3.11) in how the amount of allowed concavity is controlled.
INLA compatibility
For mesh and curve creation, the fm_rcdt_2d_inla()
, fm_mesh_2d_inla()
,
and fm_nonconvex_hull_inla()
methods will keep the interface syntax used by
INLA::inla.mesh.create()
, INLA::inla.mesh.2d()
, and
INLA::inla.nonconvex.hull()
functions, respectively, whereas the
fm_rcdt_2d()
, fm_mesh_2d()
, and fm_nonconvex_hull()
interfaces may be
different, and potentially change in the future.
References
Gonzalez and Woods (1992), Digital Image Processing
See Also
Examples
inp <- matrix(rnorm(20), 10, 2)
out <- fm_nonconvex_hull(inp, convex = 1, method = "sf")
plot(out)
points(inp, pch = 20)
out <- fm_nonconvex_hull(inp, convex = 1, method = "fm", format = "fm")
lines(out, col = 2, add = TRUE)
if (TRUE) {
inp <- sf::st_as_sf(as.data.frame(matrix(1:6, 3, 2)), coords = 1:2)
bnd <- fm_extensions(inp, convex = c(0.75, 2))
plot(fm_mesh_2d(boundary = bnd, max.edge = c(0.25, 1)), asp = 1)
}
Non-convex hull computation
Description
Legacy method for
INLA::inla.nonconvex.hull()
.
Use fm_nonconvex_hull()
with method = "fm"
instead, with
either format = "fm"
(for compatibility with code
expecting fm_segm
output) or format = "sf"
.
Usage
fm_nonconvex_hull_inla(
x,
convex = -0.15,
concave = convex,
resolution = 40,
eps = NULL,
eps_rel = NULL,
crs = NULL,
...
)
fm_nonconvex_hull_inla_basic(
x,
convex = -0.15,
resolution = 40,
eps = NULL,
crs = fm_crs(x)
)
Arguments
x |
A spatial object |
convex |
numeric vector; How much to extend |
concave |
numeric vector; The minimum allowed reentrant curvature.
Default equal to |
resolution |
integer; The internal computation resolution. A warning
will be issued when this needs to be increased for higher accuracy, with
the required resolution stated. For |
eps , eps_rel |
The polygonal curve simplification tolerances used for
simplifying the resulting boundary curve. See |
crs |
Optional crs object for the resulting polygon. Default is
|
... |
Unused. |
Value
fm_nonconvex_hull_inla()
returns an fm_segm
object, for compatibility with inla.nonconvex.hull()
.
Functions
-
fm_nonconvex_hull_inla_basic()
: Special methodfm_nonconvex_hull_fm()
method forconcave = 0
. Requiressplancs::nndistF()
.
INLA compatibility
For mesh and curve creation, the fm_rcdt_2d_inla()
, fm_mesh_2d_inla()
,
and fm_nonconvex_hull_inla()
methods will keep the interface syntax used by
INLA::inla.mesh.create()
, INLA::inla.mesh.2d()
, and
INLA::inla.nonconvex.hull()
functions, respectively, whereas the
fm_rcdt_2d()
, fm_mesh_2d()
, and fm_nonconvex_hull()
interfaces may be
different, and potentially change in the future.
See Also
Other nonconvex inla legacy support:
fm_segm_contour_helper()
,
fm_simplify_helper()
Examples
fm_nonconvex_hull_inla(cbind(0, 0), convex = 1)
Generate lattice points covering a mesh
Description
Generate terra
, sf
, or sp
lattice locations
Usage
fm_pixels(
mesh,
dims = c(150, 150),
xlim = NULL,
ylim = NULL,
mask = TRUE,
format = "sf",
minimal = TRUE
)
Arguments
mesh |
An |
dims |
A length 2 integer vector giving the dimensions of the target lattice. |
xlim , ylim |
Length 2 numeric vectors of x- and y- axis limits.
Defaults taken from the range of the mesh or mask; see |
mask |
If logical and TRUE, remove pixels that are outside the mesh.
If |
format |
character; "sf", "terra" or "sp" |
minimal |
logical; if |
Value
sf
, SpatRaster
, or SpatialPixelsDataFrame
covering the mesh or
mask.
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
Examples
if (require("ggplot2", quietly = TRUE)) {
dims <- c(50, 50)
pxl <- fm_pixels(
fmexample$mesh,
dims = dims,
mask = fmexample$boundary_sf[[1]],
minimal = TRUE
)
pxl$val <- rnorm(NROW(pxl)) +
fm_evaluate(fmexample$mesh, pxl, field = 2 * fmexample$mesh$loc[, 1])
ggplot() +
geom_tile(
data = pxl,
aes(geometry = geometry, fill = val),
stat = "sf_coordinates"
) +
geom_sf(data = fm_as_sfc(fmexample$mesh), alpha = 0.2)
}
if (require("ggplot2", quietly = TRUE) &&
require("terra", quietly = TRUE) &&
require("tidyterra", quietly = TRUE)) {
pxl <- fm_pixels(fmexample$mesh,
dims = c(50, 50), mask = fmexample$boundary_sf[[1]],
format = "terra"
)
pxl$val <- rnorm(NROW(pxl) * NCOL(pxl))
pxl <-
terra::mask(
pxl,
mask = pxl$.mask,
maskvalues = c(FALSE, NA),
updatevalue = NA
)
ggplot() +
geom_spatraster(data = pxl, aes(fill = val)) +
geom_sf(data = fm_as_sfc(fmexample$mesh), alpha = 0.2)
}
Sparse partial inverse
Description
Compute sparse partial matrix inverse. As of 0.2.0.9010
, an R
implementation of the Takahashi recursion method, unless a special build of
the fmesher
package is used.
Usage
fm_qinv(A)
Arguments
A |
A sparse symmetric positive definite matrix |
Value
A sparse symmetric matrix, with the elements of the inverse of A
for the non-zero pattern of A
plus potential Cholesky in-fill locations.
Examples
A <- Matrix::Matrix(
c(2, -1, 0, 0, -1, 2, -1, 0, 0, -1, 2, -1, 0, 0, -1, 2),
4,
4
)
# Partial inverse:
(S <- fm_qinv(A))
# Full inverse (not guaranteed to be symmetric):
(S2 <- solve(A))
# Matrix symmetry:
c(sum((S - Matrix::t(S))^2), sum((S2 - Matrix::t(S2))^2))
# Accuracy (not that S2 is non-symmetric, and S may be more accurate):
sum((S - S2)[S != 0]^2)
Basis functions for mesh manifolds
Description
Calculate basis functions on fm_mesh_1d()
or fm_mesh_2d()
,
without necessarily matching the default function space of the given mesh
object.
Usage
fm_raw_basis(
mesh,
type = "b.spline",
n = 3,
degree = 2,
knot.placement = "uniform.area",
rot.inv = TRUE,
boundary = "free",
free.clamped = TRUE,
...
)
Arguments
mesh |
An |
type |
|
n |
For B-splines, the number of basis functions in each direction (for
1d meshes |
degree |
Degree of B-spline polynomials. See
|
knot.placement |
For B-splines on the sphere, controls the latitudinal
placements of knots. |
rot.inv |
For spherical harmonics on a sphere, |
boundary |
Boundary specification, default is free boundaries. See
|
free.clamped |
If |
... |
Unused |
Value
A matrix with evaluated basis function
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
fm_mesh_1d()
, fm_mesh_2d()
, fm_basis()
Examples
loc <- rbind(c(0, 0), c(1, 0), c(1, 1), c(0, 1))
mesh <- fm_mesh_2d(loc, max.edge = 0.15)
basis <- fm_raw_basis(mesh, n = c(4, 5))
proj <- fm_evaluator(mesh, dims = c(10, 10))
image(proj$x, proj$y, fm_evaluate(proj, basis[, 7]), asp = 1)
if (interactive() && require("rgl")) {
plot_rgl(mesh, col = basis[, 7], draw.edges = FALSE, draw.vertices = FALSE)
}
Refined Constrained Delaunay Triangulation
Description
Computes a refined constrained Delaunay triangulation on R2 or S2.
Usage
fm_rcdt_2d(...)
fm_rcdt_2d_inla(
loc = NULL,
tv = NULL,
boundary = NULL,
interior = NULL,
extend = (missing(tv) || is.null(tv)),
refine = FALSE,
lattice = NULL,
globe = NULL,
cutoff = 1e-12,
quality.spec = NULL,
crs = NULL,
delaunay = TRUE,
...
)
fm_delaunay_2d(loc, crs = NULL, ...)
Arguments
... |
Currently passed on to |
loc |
Input coordinates that should be part of the mesh. Can be a
matrix, |
tv |
Initial triangulation, as a N-by-3 index vector into |
boundary , interior |
Objects supported by |
extend |
Setting to |
refine |
|
lattice |
An |
globe |
If non-NULL, an integer specifying the level of subdivision
for global mesh points, used with |
cutoff |
The minimum allowed distance between points. Point at most as far apart as this are replaced by a single vertex prior to the mesh refinement step. |
quality.spec |
List of vectors of per vertex |
crs |
Optional crs object |
delaunay |
logical; If |
Value
An fm_mesh_2d
object
Functions
-
fm_rcdt_2d_inla()
: Legacy method for theINLA::inla.mesh.create()
interface -
fm_delaunay_2d()
: Construct a plain Delaunay triangulation.
INLA compatibility
For mesh and curve creation, the fm_rcdt_2d_inla()
, fm_mesh_2d_inla()
,
and fm_nonconvex_hull_inla()
methods will keep the interface syntax used by
INLA::inla.mesh.create()
, INLA::inla.mesh.2d()
, and
INLA::inla.nonconvex.hull()
functions, respectively, whereas the
fm_rcdt_2d()
, fm_mesh_2d()
, and fm_nonconvex_hull()
interfaces may be
different, and potentially change in the future.
Examples
(m <- fm_rcdt_2d_inla(
boundary = fm_nonconvex_hull(cbind(0, 0), convex = 5)
))
fm_delaunay_2d(matrix(rnorm(30), 15, 2))
Refine a 2d mesh
Description
Refine an existing mesh
Usage
fm_refine(mesh, refine = list(max.edge = 1))
Arguments
mesh |
An |
refine |
A list of refinement options passed on to fm_rcdt_2d_inla |
Value
A refined fm_mesh_2d
object
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
Examples
fm_dof(fmexample$mesh)
fm_dof(fm_refine(fmexample$mesh, refine = list(max.edge = 1)))
Row-wise Kronecker products
Description
Takes two Matrices and computes the row-wise Kronecker product. Optionally applies row-wise weights and/or applies an additional 0/1 row-wise Kronecker matrix product.
Usage
fm_row_kron(M1, M2, repl = NULL, n.repl = NULL, weights = NULL)
Arguments
M1 |
A matrix that can be transformed into a sparse Matrix. |
M2 |
A matrix that can be transformed into a sparse Matrix. |
repl |
An optional index vector. For each entry, specifies which
replicate the row belongs to, in the sense used in
|
n.repl |
The maximum replicate index, in the sense used in
|
weights |
Optional scaling weights to be applied row-wise to the resulting matrix. |
Value
A Matrix::sparseMatrix
object.
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
Examples
fm_row_kron(rbind(c(1, 1, 0), c(0, 1, 1)), rbind(c(1, 2), c(3, 4)))
Check for potential sp
version compatibility issues
Description
Loads the sp package with requireNamespace("sp", quietly = TRUE)
, and
checks and optionally sets the sp
evolution status flag if rgdal
is
unavailable.
This function is only needed for backwards compatibility with sp
versions
before 2.0-0
.
Usage
fm_safe_sp(quietly = FALSE, force = FALSE, minimum_version = "1.4-5")
Arguments
quietly |
logical; if |
force |
logical; If |
minimum_version |
character; the minimum required sp version. Default 1.4-5 (should always match the requirement in the package DESCRIPTION) |
Value
Returns (invisibly) FALSE
if a potential issue is detected, and
give a message if quietly
is FALSE
. Otherwise returns TRUE
Examples
if (fm_safe_sp()) {
# Run sp dependent calculations
}
Make a spatial segment object
Description
Make a spatial segment object
Usage
fm_segm(...)
## Default S3 method:
fm_segm(loc = NULL, idx = NULL, grp = NULL, is.bnd = TRUE, crs = NULL, ...)
## S3 method for class 'fm_segm'
fm_segm(..., grp = NULL, grp.default = 0L, is.bnd = NULL)
## S3 method for class 'fm_segm_list'
fm_segm(x, grp = NULL, grp.default = 0L, ...)
fm_segm_join(x, grp = NULL, grp.default = 0L, is.bnd = NULL)
fm_segm_split(x, grp = NULL, grp.default = 0L)
## S3 method for class 'inla.mesh.segment'
fm_segm(..., grp.default = 0)
## S3 method for class 'fm_mesh_2d'
fm_segm(x, boundary = TRUE, grp = NULL, ...)
fm_is_bnd(x)
fm_is_bnd(x) <- value
Arguments
... |
Passed on to submethods |
loc |
Matrix of point locations, or |
idx |
Segment index sequence vector or index pair matrix. The indices
refer to the rows of |
grp |
When joining segments, use these group labels for segments instead of the original group labels. |
is.bnd |
|
crs |
An optional |
grp.default |
If |
x |
Mesh to extract segments from |
boundary |
logical; if |
value |
logical |
Value
An fm_segm
or fm_segm_list
object
Methods (by class)
-
fm_segm(fm_segm)
: Join multiplefm_segm
objects into a singlefm_segm
object. Ifis.bnd
is non-NULL, it overrides the input segment information. Otherwise, it checks if the inputs are consistent. -
fm_segm(fm_segm_list)
: Joinfm_segm
objects from afm_segm_list
into a singlefm_segm
object. Equivalent tofm_segm_join(x)
-
fm_segm(fm_mesh_2d)
: Extract the boundary or interior segments of a 2d mesh. Ifgrp
is non-NULL, extracts only segments matching the matching the set of groups given bygrp
.
Functions
-
fm_segm()
: Create a newfm_segm
object. -
fm_segm_join()
: Join multiplefm_segm
objects into a singlefm_segm
object. Ifis.bnd
is non-NULL, it overrides the segment information. Otherwise it checks for consistency. -
fm_segm_split()
: Split anfm_segm
object bygrp
into anfm_segm_list
object, optionally keeping only some groups.
See Also
Other object creation and conversion:
fm_as_collect()
,
fm_as_fm()
,
fm_as_lattice_2d()
,
fm_as_lattice_Nd()
,
fm_as_mesh_1d()
,
fm_as_mesh_2d()
,
fm_as_mesh_3d()
,
fm_as_segm()
,
fm_as_sfc()
,
fm_as_tensor()
,
fm_collect()
,
fm_lattice_2d()
,
fm_lattice_Nd()
,
fm_mesh_1d()
,
fm_mesh_2d()
,
fm_simplify()
,
fm_tensor()
Examples
fm_segm(rbind(c(0, 0), c(1, 0), c(1, 1), c(0, 1)), is.bnd = FALSE)
fm_segm(rbind(c(0, 0), c(1, 0), c(1, 1), c(0, 1)), is.bnd = TRUE)
fm_segm_join(fmexample$boundary_fm)
fm_segm(fmexample$mesh, boundary = TRUE)
fm_segm(fmexample$mesh, boundary = FALSE)
Contour segment
Description
Helper from legacy INLA::inla.contour.segment()
Usage
fm_segm_contour_helper(
x = seq(0, 1, length.out = nrow(z)),
y = seq(0, 1, length.out = ncol(z)),
z,
nlevels = 10,
levels = NULL,
groups = NULL,
positive = TRUE,
eps = NULL,
eps_rel = NULL,
crs = NULL
)
Arguments
x , y , z |
The |
nlevels |
Number of contour levels |
levels |
The contour levels. If |
groups |
The group values for each contour level.
If |
positive |
Logical; if |
eps , eps_rel |
Polygonal curve simplification tolerances |
crs |
A coordinate reference system |
Value
An fm_segm
object
See Also
Other nonconvex inla legacy support:
fm_nonconvex_hull_inla()
,
fm_simplify_helper()
Examples
fm_segm_contour_helper(z = matrix(1:16, 4, 4))
Methods for fm_segm lists
Description
fm_segm
lists can be combined into fm_segm_list
list objects.
Usage
## S3 method for class 'fm_segm'
c(...)
## S3 method for class 'fm_segm_list'
c(...)
## S3 method for class 'fm_segm_list'
x[i]
Arguments
... |
Objects to be combined. |
x |
|
i |
indices specifying elements to extract |
Value
A fm_segm_list
object
Methods (by generic)
-
c(fm_segm_list)
: The...
arguments should be coercible tofm_segm_list
objects. -
[
: Extract sub-list
Functions
-
c(fm_segm)
: The...
arguments should befm_segm
objects, or coercible withfm_as_segm_list(list(...))
.
See Also
Examples
m <- c(A = fm_segm(1:2), B = fm_segm(3:4))
str(m)
str(m[2])
Recursive curve simplification.
Description
Simplifies polygonal curve segments by joining nearly
co-linear segments.
Uses a variation of the binary splitting Ramer-Douglas-Peucker algorithm,
with an ellipse of half-width eps
ellipse instead of a rectangle, motivated
by prediction ellipse for Brownian bridge.
Usage
fm_simplify(x, eps = NULL, eps_rel = NULL, ...)
Arguments
x |
An |
eps |
Absolute straightness tolerance. Default |
eps_rel |
Relative straightness tolerance. Default |
... |
Currently unused. |
Details
Variation of Ramer-Douglas-Peucker. Uses width epsilon ellipse instead of rectangle, motivated by prediction ellipse for Brownian bridge.
Value
The simplified fm_segm()
object.
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
References
Ramer, Urs (1972). "An iterative procedure for the polygonal approximation of plane curves". Computer Graphics and Image Processing. 1 (3): 244–256. doi:10.1016/S0146-664X(72)80017-0
Douglas, David; Peucker, Thomas (1973). "Algorithms for the reduction of the number of points required to represent a digitized line or its caricature". The Canadian Cartographer. 10 (2): 112–122. doi:10.3138/FM57-6770-U75U-7727
See Also
Other object creation and conversion:
fm_as_collect()
,
fm_as_fm()
,
fm_as_lattice_2d()
,
fm_as_lattice_Nd()
,
fm_as_mesh_1d()
,
fm_as_mesh_2d()
,
fm_as_mesh_3d()
,
fm_as_segm()
,
fm_as_sfc()
,
fm_as_tensor()
,
fm_collect()
,
fm_lattice_2d()
,
fm_lattice_Nd()
,
fm_mesh_1d()
,
fm_mesh_2d()
,
fm_segm()
,
fm_tensor()
Examples
theta <- seq(0, 2 * pi, length.out = 1000)
(segm <- fm_segm(cbind(cos(theta), sin(theta)),
idx = seq_along(theta)
))
(segm1 <- fm_simplify(segm, eps_rel = 0.1))
(segm2 <- fm_simplify(segm, eps_rel = 0.2))
plot(segm)
lines(segm1, col = 2)
lines(segm2, col = 3)
(segm <- fm_segm(cbind(theta, sin(theta * 4)),
idx = seq_along(theta)
))
(segm1 <- fm_simplify(segm, eps_rel = 0.1))
(segm2 <- fm_simplify(segm, eps_rel = 0.2))
plot(segm)
lines(segm1, col = 2)
lines(segm2, col = 3)
Recursive curve simplification.
Description
Helper from legacy INLA::inla.simplify.curve()
Attempts to simplify a polygonal curve by joining nearly colinear segments.
Uses a variation of the binary splitting Ramer-Douglas-Peucker algorithm,
with an ellipse of half-width eps
ellipse instead of a rectangle, motivated
by prediction ellipse for Brownian bridge.
Usage
fm_simplify_helper(loc, idx, eps = NULL, eps_rel = NULL)
Arguments
loc |
Coordinate matrix. |
idx |
Index vector into |
eps |
Absolute straightness tolerance. Default |
eps_rel |
Relative straightness tolerance. Default |
Details
Variation of Ramer-Douglas-Peucker. Uses width epsilon ellipse instead of rectangle, motivated by prediction ellipse for Brownian bridge.
Value
An index vector into loc
specifying the simplified polygonal
curve.
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
Other nonconvex inla legacy support:
fm_nonconvex_hull_inla()
,
fm_segm_contour_helper()
Examples
theta <- seq(0, 2 * pi, length.out = 1000)
loc <- cbind(cos(theta), sin(theta))
idx <- fm_simplify_helper(loc = loc, idx = 1:nrow(loc), eps = 0.01)
print(c(nrow(loc), length(idx)))
plot(loc, type = "l")
lines(loc[idx, ], col = "red")
fm_sizes
Description
Compute effective sizes of faces/cells and vertices in a mesh
Usage
fm_sizes(...)
## S3 method for class 'fm_mesh_2d'
fm_sizes(mesh, ...)
## S3 method for class 'fm_mesh_3d'
fm_sizes(mesh, ...)
Arguments
... |
Passed on to submethods |
mesh |
object of a supported mesh class |
Value
A list
with elements face
and vertex
for 2D meshes, or cell
and vertex
for 3D meshes. The elements are vectors of effective sizes of
the faces/cells and vertices, respectively.
Examples
str(fm_sizes(fmexample$mesh))
Split lines at triangle edges
Description
Compute intersections between line segments and triangle edges, and filter out segment of length zero.
Usage
fm_split_lines(mesh, ...)
## S3 method for class 'fm_mesh_2d'
fm_split_lines(mesh, segm, ...)
Arguments
mesh |
An fm_mesh_2d object |
... |
Unused. |
segm |
An |
Value
An fm_segm()
object with the same crs as the mesh,
with an added field origin
, that for each new segment gives the
originator index into to original segm
object for each new line segment.
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
Examples
mesh <- fm_mesh_2d(
boundary = fm_segm(
rbind(c(0, 0), c(1, 0), c(1, 1), c(0, 1)),
is.bnd = TRUE
)
)
splitter <- fm_segm(rbind(c(0.8, 0.2), c(0.2, 0.8)))
segm_split <- fm_split_lines(mesh, splitter)
plot(mesh)
lines(splitter)
points(segm_split$loc)
Store points in different formats
Description
Convert a matrix of points into different formats.
Usage
fm_store_points(loc, crs = NULL, info = NULL, format = NULL)
Arguments
loc |
a coordinate matrix |
crs |
CRS information to associate with the coordinates |
info |
An optional data.frame of additional data |
format |
character; |
Value
An sf
, data.frame
, or SpatialPointsDataFrame
object, with
optional added information.
Examples
fm_store_points(fmexample$loc, format = "sf")
Split triangles of a mesh into subtriangles
Description
Splits each mesh triangle into
(n + 1)^2
subtriangles.
The current version drops any edge constraint information from the mesh.
Usage
fm_subdivide(mesh, n = 1, delaunay = FALSE)
Arguments
mesh |
an fm_mesh_2d object |
n |
number of added points along each edge. Default is 1. |
delaunay |
logical; if |
Value
A refined fm_mesh_2d object
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
Examples
mesh <- fm_rcdt_2d_inla(
loc = rbind(c(0, 0), c(1, 0), c(0, 1)),
tv = rbind(c(1, 2, 3))
)
mesh_sub <- fm_subdivide(mesh, 3)
mesh
mesh_sub
plot(mesh_sub, edge.color = 2)
plot(fm_subdivide(fmexample$mesh, 3), edge.color = 2)
plot(fmexample$mesh, add = TRUE, edge.color = 1)
Make a tensor product function space
Description
Tensor product function spaces. The interface and object storage model
is experimental and may change.
Usage
fm_tensor(x, ...)
Arguments
x |
list of function space objects, such as |
... |
Currently unused |
Value
A fm_tensor
or fm_tensor_list
object. Elements of fm_tensor
:
- fun_spaces
fm_list
of function space objects- manifold
character; manifold type summary. Regular subset of Rd "Rd", if all function spaces have type "R", torus connected "Td" if all function spaces have type "S", and otherwise "Md" In all cases,
d
is the sum of the manifold dimensions of the function spaces.
See Also
Other object creation and conversion:
fm_as_collect()
,
fm_as_fm()
,
fm_as_lattice_2d()
,
fm_as_lattice_Nd()
,
fm_as_mesh_1d()
,
fm_as_mesh_2d()
,
fm_as_mesh_3d()
,
fm_as_segm()
,
fm_as_sfc()
,
fm_as_tensor()
,
fm_collect()
,
fm_lattice_2d()
,
fm_lattice_Nd()
,
fm_mesh_1d()
,
fm_mesh_2d()
,
fm_segm()
,
fm_simplify()
Examples
m <- fm_tensor(list(
space = fmexample$mesh,
time = fm_mesh_1d(1:5)
))
m2 <- fm_as_tensor(m)
m3 <- fm_as_tensor_list(list(m, m))
c(fm_dof(m$fun_spaces$space) * fm_dof(m$fun_spaces$time), fm_dof(m))
str(fm_evaluator(m, loc = list(space = cbind(0, 0), time = 2.5)))
str(fm_basis(m, loc = list(space = cbind(0, 0), time = 2.5)))
str(fm_fem(m))
Object coordinate transformation
Description
Handle transformation of various inla objects according to coordinate
reference systems of crs
(from sf::st_crs()
), fm_crs
, sp::CRS
,
fm_CRS
, or INLA::inla.CRS
class.
Usage
fm_transform(x, crs, ...)
## Default S3 method:
fm_transform(x, crs, ..., crs0 = NULL)
## S3 method for class 'NULL'
fm_transform(x, crs, ...)
## S3 method for class 'matrix'
fm_transform(x, crs, ..., passthrough = FALSE, crs0 = NULL)
## S3 method for class 'sf'
fm_transform(x, crs, ..., passthrough = FALSE)
## S3 method for class 'sfc'
fm_transform(x, crs, ..., passthrough = FALSE)
## S3 method for class 'sfg'
fm_transform(x, crs, ..., passthrough = FALSE)
## S3 method for class 'Spatial'
fm_transform(x, crs, ..., passthrough = FALSE)
## S3 method for class 'fm_mesh_2d'
fm_transform(x, crs = fm_crs(x), ..., passthrough = FALSE, crs0 = fm_crs(x))
## S3 method for class 'fm_collect'
fm_transform(x, crs = fm_crs(x), ..., passthrough = FALSE, crs0 = NULL)
## S3 method for class 'fm_lattice_2d'
fm_transform(x, crs = fm_crs(x), ..., passthrough = FALSE, crs0 = fm_crs(x))
## S3 method for class 'fm_segm'
fm_transform(x, crs = fm_crs(x), ..., passthrough = FALSE, crs0 = fm_crs(x))
## S3 method for class 'fm_list'
fm_transform(x, crs, ...)
Arguments
x |
The object that should be transformed from it's current CRS to a new CRS |
crs |
The target crs object |
... |
Potential additional arguments |
crs0 |
The source crs object for spatial classes without crs information |
passthrough |
Default is FALSE. Setting to TRUE allows objects with no CRS information to be passed through without transformation. Use with care! |
Value
A transformed object, normally of the same class as the input object.
See Also
Examples
fm_transform(
rbind(c(0, 0), c(0, 90), c(0, 91)),
crs = fm_crs("sphere"),
crs0 = fm_crs("longlat_norm")
)
Unify coordinates to 3-column matrix
Description
Convert coordinate information to a 3-column matrix. This is mainly an internal function, and the interface may change.
Usage
fm_unify_coords(x, crs = NULL)
## S3 method for class 'NULL'
fm_unify_coords(x, crs = NULL)
## Default S3 method:
fm_unify_coords(x, crs = NULL)
## S3 method for class 'Spatial'
fm_unify_coords(x, crs = NULL)
## S3 method for class 'sf'
fm_unify_coords(x, crs = NULL)
## S3 method for class 'sfc'
fm_unify_coords(x, crs = NULL)
Arguments
x |
A object with coordinate information |
crs |
A optional crs object to convert the coordinates to |
Value
A coordinate matrix
Examples
fm_unify_coords(fmexample$loc_sf)
Project integration points to mesh vertices
Description
Compute information for assigning points to the vertices of the covering triangle
Usage
fm_vertex_projection(points, mesh)
Arguments
points |
A |
mesh |
An |
Value
SpatialPointsDataFrame
, sf
, tibble
, or list
of mesh
vertices with projected data attached
Examples
head(fm_vertex_projection(list(loc = fmexample$loc), fmexample$mesh))
head(fm_vertex_projection(fmexample$loc_sf, fmexample$mesh))
Extract vertex locations from an fm_mesh_2d
Description
Extracts the vertices of an fm_mesh_2d
object.
Usage
fm_vertices(x, format = NULL)
Arguments
x |
An |
format |
character; |
Value
An sf
, data.frame
, or SpatialPointsDataFrame
object, with the vertex
coordinates, and a .vertex
column with the vertex indices.
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
Examples
if (require("ggplot2", quietly = TRUE)) {
vrt <- fm_vertices(fmexample$mesh, format = "sf")
ggplot() +
geom_sf(data = fm_as_sfc(fmexample$mesh)) +
geom_sf(data = vrt, color = "red")
}
Internal WKT handling
Description
Conversion between WKT and a tree representation
Usage
fm_wkt_as_wkt_tree(x, ...)
fm_wkt_tree_as_wkt(x, pretty = FALSE, ...)
fm_wkt_tree_get_item(x, item, duplicate = 1)
fm_wkt_tree_set_item(x, item_tree, duplicate = 1)
Arguments
x |
A WKT2 string, or a |
... |
Unused |
pretty |
logical; If TRUE, use pretty formatting. Default: FALSE |
item |
character vector with item labels identifying a parameter item entry. |
duplicate |
For items that have more than one match, |
item_tree |
An item tree identifying a parameter item entry |
Value
A hierarchical list, describing WKT information as a tree
fm_wkt_tree_as_wkt
character; the WKT corresponding to the tree.
fm_wkt_tree_get_item
returns the value of an item found in the
tree
fm_wkt_tree_set_item
returns the modified tree
Examples
str(fm_wkt_as_wkt_tree(fm_crs("longlat_norm")$wkt))
Deprecated functions in fmesher
Description
These functions still attempt to do their job, but will be removed in a future version.
Usage
fm_spTransform(x, ...)
## Default S3 method:
fm_spTransform(x, crs0 = NULL, crs1 = NULL, passthrough = FALSE, ...)
## S3 method for class 'SpatialPoints'
fm_spTransform(x, CRSobj, passthrough = FALSE, ...)
## S3 method for class 'SpatialPointsDataFrame'
fm_spTransform(x, CRSobj, passthrough = FALSE, ...)
fm_sp2segment(...)
Arguments
x |
The object that should be transformed from it's current CRS to a new CRS |
... |
Potential additional arguments |
crs0 |
The source sp::CRS or inla.CRS object |
crs1 |
The target sp::CRS or inla.CRS object |
passthrough |
Default is FALSE. Setting to TRUE allows objects with no CRS information to be passed through without transformation. |
CRSobj |
The target sp::CRS or inla.CRS object |
Functions
-
fm_spTransform()
:(See
fm_transform()
instead) Handle transformation of various inla objects according to coordinate reference systems ofsp::CRS
orINLA::inla.CRS
class. -
fm_spTransform(default)
: The default method handles low level transformation of raw coordinates. -
fm_sp2segment()
:in favour of
fm_as_segm()
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
Print objects
Description
Print objects
Usage
## S3 method for class 'fm_segm'
print(x, ..., digits = NULL, verbose = TRUE, newline = TRUE)
## S3 method for class 'fm_segm_list'
print(x, ..., digits = NULL, verbose = FALSE, newline = TRUE)
## S3 method for class 'fm_list'
print(x, ..., digits = NULL, verbose = FALSE, newline = TRUE)
## S3 method for class 'fm_mesh_2d'
print(x, ..., digits = NULL, verbose = FALSE)
## S3 method for class 'fm_mesh_3d'
print(x, ..., digits = NULL, verbose = FALSE)
## S3 method for class 'fm_mesh_1d'
print(x, ..., digits = NULL, verbose = FALSE)
## S3 method for class 'fm_bbox'
print(x, ..., digits = NULL, verbose = TRUE, newline = TRUE)
## S3 method for class 'fm_tensor'
print(x, ..., digits = NULL, verbose = FALSE)
## S3 method for class 'fm_collect'
print(x, ..., digits = NULL, verbose = FALSE)
## S3 method for class 'fm_lattice_2d'
print(x, ..., digits = NULL, verbose = FALSE)
## S3 method for class 'fm_lattice_Nd'
print(x, ..., digits = NULL, verbose = FALSE)
## S3 method for class 'fm_crs'
print(x, ...)
## S3 method for class 'fm_CRS'
print(x, ...)
Arguments
x |
an object used to select a method. |
... |
further arguments passed to or from other methods. |
digits |
a positive integer indicating how many significant digits are
to be used for numeric and complex x. The default, NULL, uses
|
verbose |
logical |
newline |
logical; if |
Value
The input object x
Examples
fm_bbox(matrix(1:6, 3, 2))
print(fm_bbox(matrix(1:6, 3, 2)), verbose = FALSE)
print(fmexample$mesh)
print(fmexample$boundary_fm)
print(fm_mesh_1d(c(1, 2, 3, 5, 7), degree = 2))
Barycentric coordinate computation
Description
Locate points and compute triangular barycentric coordinates
Usage
fmesher_bary(mesh_loc, mesh_tv, loc, options)
Arguments
mesh_loc |
numeric matrix; mesh vertex coordinates |
mesh_tv |
3-column integer matrix with 0-based vertex indices for each triangle |
loc |
numeric matrix; coordinates of points to locate in the mesh |
options |
list of triangulation options |
Value
A list with vector index
(triangle index) and matrix where
(3-column barycentric matrix)
Examples
m <- fmesher_rcdt(list(cet_margin = 1), matrix(0, 1, 2))
b <- fmesher_bary(m$s,
m$tv,
matrix(c(0.5, 0.5), 1, 2),
list())
Barycentric coordinate computation
Description
Locate points and compute triangular barycentric coordinates
Usage
fmesher_bary3d(mesh_loc, mesh_tv, loc, options)
Arguments
mesh_loc |
numeric matrix; mesh vertex coordinates |
mesh_tv |
3-column integer matrix with 0-based vertex indices for each triangle |
loc |
numeric matrix; coordinates of points to locate in the mesh |
options |
list of triangulation options |
Value
A list with vector index
(tetra index) and matrix where
(4-column barycentric matrix)
Examples
m <- fmesher_mesh3d(list(cet_margin = 1),
matrix(rnorm(15), 5, 3),
matrix(c(0,1,2,3), 1, 4))
b <- fmesher_bary3d(m$loc,
m$tv,
matrix(c(0.5, 0.5, 0.5), 1, 3),
list())
Finite element matrix computation
Description
Construct finite element structure matrices
Usage
fmesher_fem(mesh_loc, mesh_tv, fem_order_max, aniso, options)
Arguments
mesh_loc |
numeric matrix; mesh vertex coordinates |
mesh_tv |
3-column integer matrix with 0-based vertex indices for each triangle |
fem_order_max |
integer; the highest operator order to compute |
aniso |
If non-NULL, a |
options |
list of triangulation options ( |
Value
A list of matrices
Examples
m <- fmesher_rcdt(list(cet_margin = 1), matrix(0, 1, 2))
b <- fmesher_fem(m$s, m$tv, fem_order_max = 2, aniso = NULL, options = list())
Globe points
Description
Create points on a globe
Usage
fmesher_globe_points(globe)
Arguments
globe |
integer; the number of edge subdivision segments, 1 or higher. |
Value
A matrix of points on a unit radius globe
Examples
fmesher_globe_points(1)
3D tetrahedralisation storage
Description
(...)
Usage
fmesher_mesh3d(options, loc, tv)
Arguments
options |
list of triangulation options |
loc |
numeric matrix; initial points to include |
tv |
4-column integer matrix with 0-based vertex indices for each triangle |
Value
A list of information objects for a generated tetrahedralisation
Examples
m <- fmesher_mesh3d(list(),
matrix(c(1,0,0,0,1,0,0,0,1,0,0,0), 4, 3, byrow=TRUE),
matrix(c(0,1,2,3), 1, 4, byrow=TRUE))
Compute sparse matrix inverse
Description
Requires RcppEigen which is not compiled in by default. Enable with
PKG_CPPFLAGS=-DFMESHER_WITH_EIGEN
in src/Makevars
and add RcppEigen
to the DESCRIPTION
LinkingTo
field.
Usage
fmesher_qinv(AA)
Arguments
AA |
A sparse matrix |
Refined Constrained Delaunay Triangulation
Description
(...)
Usage
fmesher_rcdt(
options,
loc,
tv = NULL,
boundary = NULL,
interior = NULL,
boundary_grp = NULL,
interior_grp = NULL
)
Arguments
options |
list of triangulation options |
loc |
numeric matrix; initial points to include |
tv |
3-column integer matrix with 0-based vertex indices for each triangle |
boundary |
2-column integer matrix with 0-based vertex indices for each boundary edge constraint |
interior |
2-column integer matrix with 0-based vertex indices for each interior edge constraint |
boundary_grp |
integer vector with group labels |
interior_grp |
integer vector with group labels |
Value
A list of information objects for a generated triangulation
Examples
m <- fmesher_rcdt(list(cet_margin = 1), matrix(0, 1, 2))
Rotationally invariant spherical B-splines
Description
Compute rotationally invariant spherical B-splines on the unit sphere
Usage
fmesher_spherical_bsplines1(loc, n, degree, uniform)
fmesher_spherical_bsplines(loc, n, degree, uniform)
Arguments
loc |
numeric vector/matrix; coordinates of points to locate in the mesh,
only the z-coordinates are used ( |
n |
The number of basis functions |
degree |
The polynomial basis degree |
uniform |
logical; If |
Value
A matrix of evaluated b-spline basis functions
Examples
m <- fm_rcdt_2d(globe = 1)
fmesher_spherical_bsplines(m$loc, n = 3, degree = 2, uniform = FALSE)
fmesher_spherical_bsplines1(m$loc[, 3], n = 3, degree = 2, uniform = FALSE)
Split lines at triangle edges
Description
Split a sequence of line segments at triangle edges
Usage
fmesher_split_lines(mesh_loc, mesh_tv, loc, idx, options)
Arguments
mesh_loc |
numeric matrix; mesh vertex coordinates |
mesh_tv |
3-column integer matrix with 0-based vertex indices for each triangle |
loc |
numeric coordinate matrix |
idx |
2-column integer matrix |
options |
list of triangulation options ( |
Value
A list of line splitting information objects
See Also
Examples
mesh <- fm_mesh_2d(
boundary = fm_segm(rbind(c(0,0), c(1,0), c(1,1), c(0, 1)), is.bnd = TRUE)
)
splitter <- fm_segm(rbind(c(0.8, 0.2), c(0.2, 0.8)))
segm_split <- fm_split_lines(mesh, splitter)
Subdivide triangles
Description
Subdivide a mesh with congruent and anti-congruent subtriangles
Usage
fmesher_subdivide(
mesh_loc,
mesh_tv,
mesh_boundary,
mesh_interior,
subdivisions,
options
)
Arguments
mesh_loc |
numeric matrix; mesh vertex coordinates |
mesh_tv |
3-column integer matrix with 0-based vertex indices for each triangle |
mesh_boundary |
2-column integer matrix with 0-based vertex indices for boundary constraints, currently ignored |
mesh_interior |
2-column integer matrix with 0-based vertex indices for interior constraints, currently ignored |
subdivisions |
integer; number of new points along each edge. |
options |
list of triangulation options ( |
Value
A list of new loc
and tv
information
See Also
Examples
mesh <- fm_mesh_2d(
boundary = fm_segm(rbind(c(0,0), c(1,0), c(1,1), c(0, 1)), is.bnd = TRUE)
)
new_mesh <- fm_subdivide(mesh, n = 3)
plot(new_mesh, edge.color = 2)
plot(mesh, add = TRUE, edge.color = 1)
Example mesh data
Description
This is an example data set used for fmesher
package examples.
Usage
fmexample
Format
The data is a list containing these elements:
loc
:A
matrix
of points.loc_sf
:An
sfc
version ofloc
.boundary_fm
:A
fm_segm_list
of twofm_segm
objects used in the mesh construction.boundary_sf
:An
sfc
list version ofboundary
.mesh
:An
fm_mesh_2d()
object.
Source
Generated by data-raw/fmexample.R
.
See Also
Examples
if (require(ggplot2, quietly = TRUE)) {
ggplot() +
geom_sf(data = fm_as_sfc(fmexample$mesh)) +
geom_sf(data = fmexample$boundary_sf[[1]], fill = "red", alpha = 0.5)
}
Add sp data to fmexample
Description
Adds loc_sp
and boundary_sp
to fmexample for use
in sp
related code examples and tests.
Usage
fmexample_sp()
Value
Returns a copy of fmexample with loc_sp
(SpatialPoints
) and
boundary_sp
(SpatialPolygons
) added.
Examples
if (fm_safe_sp()) {
fmexample_sp()
}
ggplot2 geomes for fmesher related objects
Description
geom_fm
is a generic function for generating geomes from various kinds of
fmesher
objects, e.g. fm_segm
and fm_mesh_2d
.
The function invokes particular methods which depend
on the class of the data
argument.
Requires the ggplot2
package.
Note: geom_fm
is not yet a "proper" ggplot2
geom method; the interface
may therefore change in the future.
Usage
geom_fm(mapping = NULL, data = NULL, ...)
## S3 method for class 'fm_mesh_2d'
geom_fm(
mapping = NULL,
data = NULL,
...,
mappings = NULL,
defs = NULL,
crs = NULL,
mapping_int = deprecated(),
mapping_bnd = deprecated(),
defs_int = deprecated(),
defs_bnd = deprecated()
)
## S3 method for class 'fm_segm'
geom_fm(mapping = NULL, data = NULL, ..., crs = NULL)
## S3 method for class 'fm_mesh_1d'
geom_fm(
mapping = NULL,
data = NULL,
...,
mappings = NULL,
defs = NULL,
xlim = NULL,
basis = TRUE,
knots = TRUE,
derivatives = FALSE,
weights = NULL
)
Arguments
mapping |
|
data |
an object for which to generate a geom. |
... |
Arguments passed on to the geom method. |
mappings , defs |
optional lists of |
crs |
Optional crs to transform the object to before plotting. |
mapping_int , mapping_bnd , defs_int , defs_bnd |
|
xlim |
numeric 2-vector; specifies the interval for which to compute
functions. Default is |
basis |
logical; if |
knots |
logical; if |
derivatives |
logical; if |
weights |
numeric vector; if provided, draw weighted basis functions and the resulting weighted sum. |
Value
A combination of ggplot2
geoms.
Methods (by class)
-
geom_fm(fm_mesh_2d)
: Converts anfm_mesh_2d()
object tosf
withfm_as_sfc()
and usesgeom_sf
to visualize the triangles and edges.The mesh vertices are only plotted if
mappings$loc
ordefs$loc
is non-NULL
, e.g.defs = list(loc = list())
. Default argument settings:... = linewidth = 0.25, color = "grey" # default for triangle mapping defs = list( int = list(linewidth = 0.5, color = "blue"), bnd = list(linewidth = 1, color = "black", alpha = 0), loc = list(size = 1, color = "red") )
-
geom_fm(fm_segm)
: Converts anfm_segm()
object tosf
withfm_as_sfc()
and usesgeom_sf
to visualize it. -
geom_fm(fm_mesh_1d)
: Evaluates and plots the basis functions defined by anfm_mesh_1d()
object.
Examples
ggplot() +
geom_fm(data = fmexample$mesh)
m <- fm_mesh_2d(
cbind(10, 20),
boundary = fm_extensions(cbind(10, 20), c(25, 65)),
max.edge = c(4, 10),
crs = fm_crs("+proj=longlat")
)
ggplot() +
geom_fm(data = m)
ggplot() +
geom_fm(data = m, defs = list(loc = list()))
ggplot() +
geom_fm(data = m, crs = fm_crs("epsg:27700"))
# Compute a mesh vertex based function on a different grid
px <- fm_pixels(
fm_transform(m, fm_crs("mollweide_globe")),
dims = c(50, 50) # Speed up the example by lowering the resolution
)
px$fun <- fm_evaluate(m,
loc = px,
field = sin(m$loc[, 1] / 5) * sin(m$loc[, 2] / 5)
)
ggplot() +
geom_tile(aes(geometry = geometry, fill = fun),
data = px,
stat = "sf_coordinates"
) +
geom_fm(
data = m, alpha = 0.2, linewidth = 0.05,
crs = fm_crs("mollweide_globe")
)
m1 <- fm_segm(rbind(c(1, 2), c(4, 3), c(2, 4)), is.bnd = TRUE)
m2 <- fm_segm(rbind(c(2, 2), c(3, 4), c(2, 3)), is.bnd = FALSE)
ggplot() +
geom_fm(data = m1) +
geom_fm(data = m2)
m <- fm_mesh_1d(
c(1, 2, 3, 5, 7),
boundary = c("dirichlet", "neumann"),
degree = 2
)
ggplot() +
geom_fm(data = m)
Unit test helpers
Description
Local helper functions for package unit tests
Usage
local_fm_testthat_assign(x, values, envir = parent.frame())
local_fm_testthat_tolerances(
tolerances = c(1e-04, 0.01, 0.1),
envir = parent.frame()
)
local_fm_testthat_setup(envir = parent.frame())
Arguments
x |
character; Name of variable to assign to |
values |
the object to assign to |
envir |
environment for exit handlers |
tolerances |
numeric vector of length 3; |
Value
None
Functions
-
local_fm_testthat_assign()
: Assign local variable. Useful for easy cleanup of global workspace withwithr::deferred_run()
when running tests interactively. -
local_fm_testthat_tolerances()
: Assign test tolerances Assign local tolerance variables. Useful for easy cleanup of global workspace withwithr::deferred_run()
when running tests interactively. -
local_fm_testthat_setup()
: Initialise environment for tests. To be called either at the top of a testfile, or inside tests.
Examples
outer_fun <- function() {
fun <- function(envir = parent.frame()) {
local_fm_testthat_assign("local_var_name", 1:4, envir = envir)
}
fun()
local_var_name
}
exists("local_var_name")
outer_fun()
exists("local_var_name")
Draw a triangulation mesh object
Description
Plots an fm_mesh_2d()
object using standard graphics.
Usage
## S3 method for class 'fm_mesh_2d'
lines(x, ..., add = TRUE)
## S3 method for class 'fm_mesh_2d'
plot(
x,
col = "white",
t.sub = seq_len(nrow(x$graph$tv)),
add = FALSE,
lwd = 1,
xlim = range(x$loc[, 1]),
ylim = range(x$loc[, 2]),
main = NULL,
size = 1,
draw.vertices = FALSE,
vertex.color = "black",
draw.edges = TRUE,
edge.color = rgb(0.3, 0.3, 0.3),
draw.segments = draw.edges,
rgl = deprecated(),
visibility = "front",
asp = 1,
axes = FALSE,
xlab = "",
ylab = "",
...
)
Arguments
x |
An |
... |
Further graphics parameters, interpreted by the respective plotting systems. |
add |
If |
col |
Color specification. A single named color, a vector of scalar
values, or a matrix of RGB values. Requires |
t.sub |
Optional triangle index subset to be drawn. |
lwd |
Line width for triangle edges. |
xlim |
X-axis limits. |
ylim |
Y-axis limits. |
main |
Deprecated. |
size |
argument |
draw.vertices |
If |
vertex.color |
Color specification for all vertices. |
draw.edges |
If |
edge.color |
Color specification for all edges. |
draw.segments |
If |
rgl |
Deprecated |
visibility |
If "front" only display mesh faces with normal pointing towards the camera. |
asp |
Aspect ratio for new plots. Default 1. |
axes |
logical; whether axes should be drawn on the plot. Default FALSE. |
xlab , ylab |
character; labels for the axes. |
Value
None
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
plot.fm_segm()
, plot_rgl.fm_mesh_2d()
Examples
mesh <- fm_rcdt_2d(globe = 10)
plot(mesh)
mesh <- fm_mesh_2d(cbind(0, 1), offset = c(1, 1.5), max.edge = 0.5)
plot(mesh)
Draw fm_segm
objects.
Description
Draws a fm_segm()
object with generic or rgl
graphics.
Usage
## S3 method for class 'fm_segm'
plot(x, ..., add = FALSE)
## S3 method for class 'fm_segm'
lines(
x,
loc = NULL,
col = NULL,
colors = c("black", "blue", "red", "green"),
add = TRUE,
xlim = NULL,
ylim = NULL,
rgl = FALSE,
asp = 1,
axes = FALSE,
xlab = "",
ylab = "",
visibility = "front",
...
)
## S3 method for class 'fm_segm_list'
plot(x, ...)
## S3 method for class 'fm_segm_list'
lines(x, ...)
Arguments
x |
An |
... |
Additional parameters, passed on to graphics methods. |
add |
If |
loc |
Point locations to be used if |
col |
Segment color specification. |
colors |
Colors to cycle through if |
xlim , ylim |
X and Y axis limits for a new plot. |
rgl |
If |
asp |
Aspect ratio for new plots. Default 1. |
axes |
logical; whether axes should be drawn on the plot. Default FALSE. |
xlab , ylab |
character; labels for the axes. |
visibility |
If "front" only display mesh faces with normal pointing towards the camera. |
Value
None
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
Examples
plot(fm_segm(fmexample$mesh, boundary = TRUE))
lines(fm_segm(fmexample$mesh, boundary = FALSE), col = 2)
Low level triangulation mesh plotting
Description
Plots a triangulation mesh using rgl
.
Usage
plot_rgl(x, ...)
lines_rgl(x, ..., add = TRUE)
## S3 method for class 'fm_segm'
lines_rgl(
x,
loc = NULL,
col = NULL,
colors = c("black", "blue", "red", "green"),
...,
add = TRUE
)
## S3 method for class 'fm_mesh_2d'
plot_rgl(
x,
col = "white",
color.axis = NULL,
color.n = 512,
color.palette = cm.colors,
color.truncate = FALSE,
alpha = NULL,
lwd = 1,
specular = "black",
draw.vertices = TRUE,
draw.edges = TRUE,
draw.faces = TRUE,
draw.segments = draw.edges,
size = 2,
edge.color = rgb(0.3, 0.3, 0.3),
t.sub = seq_len(nrow(x$graph$tv)),
visibility = "",
S = deprecated(),
add = FALSE,
...
)
## S3 method for class 'fm_segm'
plot_rgl(x, ..., add = FALSE)
## S3 method for class 'fm_segm_list'
plot_rgl(x, ...)
## S3 method for class 'fm_segm_list'
lines_rgl(x, ...)
Arguments
x |
A |
... |
Additional parameters passed to and from other methods. |
add |
If |
loc |
Point locations to be used if |
col |
Segment color specification. |
colors |
Colors to cycle through if |
color.axis |
The min/max limit values for the color mapping. |
color.n |
The number of colors to use in the color palette. |
color.palette |
A color palette function. |
color.truncate |
If |
alpha |
Transparency/opaqueness values. See |
lwd |
Line width for edges. See |
specular |
Specular color. See |
draw.vertices |
If |
draw.edges |
If |
draw.faces |
If |
draw.segments |
If |
size |
Size for vertex points. |
edge.color |
Edge color specification. |
t.sub |
Optional triangle index subset to be drawn. |
visibility |
If "front" only display mesh faces with normal pointing towards the camera. |
S |
Deprecated. |
Value
An rgl device identifier, invisibly.
Author(s)
Finn Lindgren Finn.Lindgren@gmail.com
See Also
Examples
if (interactive() && require("rgl")) {
mesh <- fm_rcdt_2d(globe = 10)
plot_rgl(mesh, col = mesh$loc[, 1])
}
Print method for fm_basis
Description
Prints information for an fm_basis object.
Usage
## S3 method for class 'fm_basis'
print(x, ..., prefix = "")
Arguments
x |
|
... |
Unused |
prefix |
a prefix to be used for each line. Default is an empty string. |
Value
invisible(x)
See Also
Examples
print(fm_basis(fmexample$mesh, fmexample$loc, full = TRUE))
Print method for fm_evaluator()
Description
Prints information for an fm_evaluator object.
Usage
## S3 method for class 'fm_evaluator'
print(x, ...)
Arguments
x |
|
... |
Unused |
Value
invisible(x)
See Also
Examples
print(fm_evaluator(fmexample$mesh, fmexample$loc))