A utility function for drawing vector diagrams. Draws a circular arc to show the angle between two vectors in 2D or 3D.
arc(p1, p2, p3, d = 0.1, absolute = TRUE, ...)
Starting point of first vector
End point of first vector, and also start of second vector
End point of second vector
The distance from p2
along each vector for drawing their corner
logical; if TRUE
, d
is taken as an absolute distance along the vectors; otherwise it
is calculated as a relative distance, i.e., a fraction of the length of the vectors.
Arguments passed to link[graphics]{lines}
or to link[rgl]{lines3d}
none
In this implementation, the two vectors are specified by three points, p1
, p2
, p3
, meaning
a line from p1
to p2
, and another line from p2
to p3
.
https://math.stackexchange.com/questions/1507248/find-arc-between-two-tips-of-vectors-in-3d
Other vector diagrams:
Proj()
,
arrows3d()
,
circle3d()
,
corner()
,
plot.regvec3d()
,
pointOnLine()
,
regvec3d()
,
vectors3d()
,
vectors()
library(rgl)
#>
#> Attaching package: 'rgl'
#> The following object is masked from 'package:matlib':
#>
#> GramSchmidt
vec <- rbind(diag(3), c(1,1,1))
rownames(vec) <- c("X", "Y", "Z", "J")
open3d()
aspect3d("iso")
vectors3d(vec, col=c(rep("black",3), "red"), lwd=2)
# draw the XZ plane, whose equation is Y=0
planes3d(0, 0, 1, 0, col="gray", alpha=0.2)
# show projections of the unit vector J
segments3d(rbind( c(1,1,1), c(1, 1, 0)))
segments3d(rbind( c(0,0,0), c(1, 1, 0)))
segments3d(rbind( c(1,0,0), c(1, 1, 0)))
segments3d(rbind( c(0,1,0), c(1, 1, 0)))
segments3d(rbind( c(1,1,1), c(1, 0, 0)))
# show some orthogonal vectors
p1 <- c(0,0,0)
p2 <- c(1,1,0)
p3 <- c(1,1,1)
p4 <- c(1,0,0)
# show some angles
arc(p1, p2, p3, d=.2)
arc(p4, p1, p2, d=.2)
arc(p3, p1, p2, d=.2)