cutSpace | R Documentation |
separate a 3D-pointcloud by a hyperplane
cutSpace(pointcloud, v1, v2 = NULL, v3 = NULL, normal = NULL, upper = TRUE)
pointcloud |
numeric n x 3 matrix |
v1 |
numeric vector of length=3 specifying a point on the separating plane |
v2 |
numeric vector of length=3 specifying a point on the separating plane |
v3 |
numeric vector of length=3 specifying a point on the separating plane |
normal |
plane normal (overrides specification by v2 and v3) |
upper |
logical specify whether the points above or below the plane are to be reported as TRUE. |
As above and below are specified by the normal calculated from (v2-v1) \times (v3-v1)
, where \times
denotes the vector crossproduct. This means the normal points "upward" when viewed from the positon where v1, v2 and v3 are arranged counter-clockwise. Thus, which side is "up" depends on the ordering of v1, v2 and v3.
logical vector of length n. Reporting for each point if it is above or below the hyperplane
data(nose)
v1 <- shortnose.lm[1,]
v2 <- shortnose.lm[2,]
v3 <- shortnose.lm[3,]
pointcloud <- vert2points(shortnose.mesh)
upper <- cutSpace(pointcloud, v1, v2, v3)
## Not run:
require(rgl)
normal <- crossProduct(v2-v1,v3-v1)
zeroPro <- points2plane(rep(0,3),v1,normal)
## get sign of normal displacement from zero
sig <- sign(crossprod(-zeroPro,normal))
d <- sig*norm(zeroPro,"2")
planes3d(normal[1],normal[2],normal[3],d=d)
points3d(pointcloud[upper,])
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.