title: "Geometry in affiner" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Geometry in affiner} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8}
In {affiner}
angles are represented by the angle()
class:
Supports the following angular units (note we ignore any punctuation and space characters as well as any trailing s's e.g. "half turns" will be treated as equivalent to "halfturn"):
"deg" or "degree"
"rev", "revolution", "tr", or "turn"
degrees()
, gradians()
, pi_radians()
, radians()
, turns()
are convenience wrappers around as_angle.()
that specifies the angular unit.
One can use the affiner_angular_unit
global option to set the default angular unit used by this package from "degrees" to "gradians", (multiples of) "pi-radians", "radians", or "turns".
Use is_congruent()
to check if two angles are congruent modulo full turns.
library("affiner") as_angle(90, "degrees") + turns(1) is_congruent(degrees(180), radians(pi)) as.numeric(turns(1/3), "radians")
{affiner}
provides several angle()
class aware trigonometric functions:
sine()
, cosine()
, tangent()
, secant()
, cosecant()
, cotangent()
,arcsine()
, arccosine()
, arctangent()
, arcsecant()
, arccosecant()
, and arccotangent()
.
arcsine()
and arccosine()
also feature a tolerance
value so that values that exceed the 1
/ -1
cutoffs by a small tolerance are rounded to those values.sin()
, cos()
, and tan()
on angle()
objects.library("affiner") sin(2 * pi) sine(degrees(360)) arctangent(x = 0, y = 1)
In {affiner}
2D Coordinates are represented by a Coord2D
R6 class:
Coord2D
objects with as_coord2d()
Coord2D
R6 objects supports several affine transformation methods that can be chained:
permute()
project()
reflect()
rotate()
scale()
shear()
translate()
transform()
{affiner}
affine transformations are post-multiplied so affine transformations
can be applied in an intuitive order.abs()
computes Euclidean norm and distance2d()
computes Euclidean distancesconvex_hull2d()
computes the convex hull.range()
computes the axis-aligned bounding box ranges.# Cartesian coordinates library("affiner") p <- as_coord2d(x = 1:10, y = 1:10) print(p) p2 <- p$ clone()$ scale(x = 0.5)$ rotate(degrees(90))$ reflect(as_line2d("y-axis"))$ translate(as_coord2d(x = 0.5, y = 0.5))$ print() # Polar coordinates theta <- degrees(seq(0, 300, by = 60)) radius <- 1 p <- as_coord2d(theta, radius = radius) is_congruent(as_angle(p), theta) |> all() is_congruent(abs(p), radius) |> all()
In {affiner}
3D Coordinates are represented by a Coord3D
R6 class:
Coord3D
objects with as_coord3d()
Coord3D
R6 objects supports several affine transformation methods that can be chained:
permute()
project()
reflect()
rotate()
scale()
shear()
translate()
transform()
{affiner}
affine transformations are post-multiplied so affine transformations
can be applied in an intuitive order.abs()
computes Euclidean norm and distance3d()
computes Euclidean distancesrange()
computes the axis-aligned bounding box ranges.cross_product3d()
computes cross products (*
computes inner products).# Cartesian coordinates library("affiner") p <- as_coord3d(x = 1:10, y = 1:10, z = 1:10) print(p) p2 <- p$ clone()$ scale(z = 0.5)$ rotate(axis = as_coord3d("z-axis"), theta = degrees(90))$ reflect(as_plane3d("yz-plane"))$ shear(xy_shear = 0.5)$ translate(as_coord3d(x = 0.5, y = 0.5, z = 0.5))$ print() # Spherical coordinates inclination <- as_angle(p, type = "inclination") azimuth <- as_angle(p, type = "azimuth") radius <- abs(p) ps <- as_coord3d(azimuth, radius = radius, inclination = inclination) all.equal(p, ps) # Cylindrical coordinates radius <- as_coord2d(p, plane = "xy-plane") |> abs() pc <- as_coord3d(azimuth, radius = radius, z = p$z) all.equal(p, pc)
{affiner}
can project Coord3D
objects to Coord2D
objects using orthographic/axonometric and oblique projections:
as_coord2d(x)
as_coord2d(x, permutation = "xzy")
as_coord2d(x, scale = 0.5)
as_coord2d(x, permutation = "xzy", scale = 0.5)
scale
parameter (usually from 0.5 to 1.0) and the alpha
angle parameter
(usually from 30° to 45°).x$
clone()$
translate(-mean(x)$
rotate("z-axis", degrees(45))$
rotate("x-axis", degrees(-90 + 35.264)) |>
as_coord2d()
vignette("affiner", package = "affiner")
for some visual examplesAny scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.