当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R trans3d 透视图的 3D 到 2D 转换


R语言 trans3d 位于 grDevices 包(package)。

说明

使用 4x4 观察变换矩阵将 3 维点投影到 2 维点。主要用于添加透视图,例如 persp

用法

trans3d(x, y, z, pmat, continuous = FALSE, verbose = TRUE)

参数

x , y , z

等长的数值向量,指定 3D 空间中的点。

pmat

观察变换矩阵,适合使用齐次 4D 坐标 将 3D 坐标 投影到 2D 平面;此类矩阵由 persp() 返回。

continuous

逻辑标志,指定转换是否应检查转换后的点是否连续,即它们不会跳过 不连续点。由于这些假设 (x,y,z) 说明连续曲线,因此默认值必须为 false。然而,在投影这样的曲线的情况下,建议设置continuous=TRUE

verbose

仅适用于 continuous=TRUE ,指示当点被切断时是否应发出警告。

包含两个组件的列表

x , y

3d 输入 (x,y,z) 的投影 2d 坐标。

例子

## See  help(persp) {after attaching the 'graphics' package}
##      -----------

## Example for 'continuous = TRUE' (vs default):
require(graphics)
x <- -10:10/10 # [-1, 1]
y <- -16:16/16 # [-1, 1] ==> z = fxy := outer(x,y) is also in [-1,1]

p <- persp(x, y, fxy <- outer(x,y), phi = 20, theta = 15, r = 3, ltheta = -75,
           shade = 0.8, col = "green3", ticktype = "detailed")
## 5 axis-parallel auxiliary lines in x-y  and y-z planes :
lines(trans3d(-.5 , y=-1:1, z=min(fxy),  pmat=p), lty=2)
lines(trans3d(  0 , y=-1:1, z=min(fxy),  pmat=p), lty=2)
lines(trans3d(-1:1, y= -.7, z=min(fxy),  pmat=p), lty=2)
lines(trans3d( -1,  y= -.7, z=c(-1,1) ,  pmat=p), lty=2)
lines(trans3d( -1,  y=-1:1, z= -.5    ,  pmat=p), lty=2)
## 2 pillars to carry the horizontals below:
lines(trans3d(-.5 , y= -.7, z=c(-1,-.5), pmat=p), lwd=1.5, col="gray10")
lines(trans3d( 0  , y= -.7, z=c(-1,-.5), pmat=p), lwd=1.5, col="gray10")
## now some "horizontal rays" (going from center to very left or very right):
doHor <- function(x1, x2, z, CNT=FALSE, ...)
    lines(trans3d(x=seq(x1, x2, by=0.5), y= -0.7, z = z, pmat = p, continuous = CNT),
          lwd = 3, type="b", xpd=NA, ...)
doHor(-10,  0, z = -0.5, col = 2)  # x in [-10, 0] -- to the very left : fine
doHor(-.5,  2, z = -0.52,col = 4) # x in [-0.5, 2] only {to the right} --> all fine
## but now, x in [-0.5, 20] -- "too far" ==> "wrap around" problem (without 'continuous=TRUE'):
doHor(-.5, 20, z = -0.58, col = "steelblue", lty=2)
## but it is fixed with continuous = CNT = TRUE:
doHor(-.5, 20, z = -0.55, CNT=TRUE, col = "skyblue")

也可以看看

persp

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 3D to 2D Transformation for Perspective Plots。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。