在matlib
包中,https://github.com/friendly/matlib/,我有一个函数,vectors3d()
用于绘制几何矢量图.
下面的代码给出了一个示例图,显示了单位矢量"J"及其在X,Y,Z轴上的一些投影.在调用中segments3d
,每个参数都是一个2 x 3矩阵,给出了开始/结束坐标.
if (!require(matlib)) devtools::install_github(friendly/matlib) library(matlib) library(rgl) vec <- rbind(diag(3), c(1,1,1)) rownames(vec) <- c("X", "Y", "Z", "J") open3d() vectors3d(vec, col=c(rep("black",3), "red"), lwd=2) # draw the XZ plane, whose equation is Z=0 planes3d(0, 0, 1, 0, col="gray", alpha=0.2) # show projections of the unit vector J segments3d(v1 <- rbind( c(1,1,1), c(1, 1, 0))) segments3d(v2 <- rbind( c(0,0,0), c(1, 1, 0))) segments3d(v3 <- rbind( c(1,0,0), c(1, 1, 0))) segments3d(v4 <- rbind( c(0,1,0), c(1, 1, 0)))
我想在此添加直角线,|_
以表明我使用的矢量对segments3d
是正交的.我在下图中手工绘制了这些.但我不知道如何计算这种形式的给定矢量对所需的小线段,比如说v1
和v2
.我愿意假设每个|_
段的长度都是一个很小的数字,比如0.05.
编辑:问题简化为如下:鉴于三点,p1
,p2
,p3
,找到点标p21
,p23
和p123
下面的图所示.前两个是找到沿两个点之间的线的点的简单的例子,但我难倒上找到第三个点的坐标,p123
即一个点的距离的位置d
沿平行的线到线p2->p3
起始于p21
.
在R中,到目前为止我所拥有的是
#' Find position of a point along a line from x1 to x2 point_on_line <- function(x1, x2, d, absolute=TRUE) { v <- x2 - x1 if (!absolute) v <- v / len(v) x1 + d * v } p1 <- c(0,0,0) p2 <- c(1,1,0) p3 <- c(1,1,1) (p21 <- point_on_line(p2, p1, .10)) (p23 <- point_on_line(p2, p3, .10)) points3d(rbind(p21, p23), size=10, col="red")
这给了我下面的图表.有人可以帮我完成吗?