Nothing
test_that("Matrix4", {
library(testthat)
m <- ravetools:::new_matrix4()
expect_true(m$is_matrix4)
expect_equal(m$to_array(), diag(1, 4))
expect_equal(m$elements, diag(1, 4))
m$set(matrix(1:16, 4, 4))
expect_equal(m$to_array(), matrix(1:16, 4, 4))
expect_equal(m[], matrix(1:16, 4, 4))
m$set(1:16)
m0 <- matrix(1:16, 4, 4, byrow = TRUE)
expect_equal(m[], m0)
m2 <- m$clone2()
expect_equal(m2$identity()[], diag(1, 4))
expect_equal(m[], m0)
m2$copy(m)
expect_equal(m2[], m0)
expect_equal(m2$identity()$copy_position(m)[], matrix(c(1,0,0,4,
0,1,0,8,
0,0,1,12,
0,0,0,1), 4, byrow = TRUE))
x <- ravetools:::new_vector3()
y <- ravetools:::new_vector3()
z <- ravetools:::new_vector3()
m2$copy(m)$extract_basis(x,y,z)
expect_equal(x[], m0[1:3,1,drop = FALSE])
expect_equal(y[], m0[1:3,2,drop = FALSE])
expect_equal(z[], m0[1:3,3,drop = FALSE])
m00 <- diag(1, 4)
m00[1:3,1] <- x[]
m00[1:3,2] <- y[]
m00[1:3,3] <- 0
expect_equal(m2$identity()$make_basis(x, y)[], m00)
m00[1:3,3] <- z[]
expect_equal(m2$identity()$make_basis(x, y, z)[], m00)
m00[1:3,1] <- y[]
m00[1:3,2] <- z[]
m00[1:3,3] <- x[]
expect_equal(m2$identity()$make_basis(y[], z[], x[])[], m00)
m00 <- m2$extract_rotation(m)[]
expect_equal(m0[1:3,1] / m00[1:3,1], rep(norm(m0[1:3,1], "2"), 3))
expect_equal(m0[1:3,2] / m00[1:3,2], rep(norm(m0[1:3,2], "2"), 3))
expect_equal(m0[1:3,3] / m00[1:3,3], rep(norm(m0[1:3,3], "2"), 3))
## JS code:
## new THREE.Matrix4().lookAt(new THREE.Vector3(1,2,3), new THREE.Vector3(4,5,6), new THREE.Vector3(9,8,6)).elements.join(",")
ex <- matrix(
c(-0.5345224838248486,0.8017837257372731,-0.2672612419124245,0,
0.6172133998483676,0.15430334996209175,-0.7715167498104594,0,
-0.5773502691896257,-0.5773502691896257,-0.5773502691896257,0,
0,0,0,1), 4
)
expect_equal(m2$identity()$look_at(new_vector3(1,2,3), new_vector3(4,5,6), new_vector3(9,8,6))[], ex)
expect_equal(m2$set(t(m0))$multiply(m)[], t(m0) %*% m0)
expect_equal(m2$set(t(m0))$premultiply(m)[], m0 %*% t(m0))
expect_equal(m2$set(m0)$multiply_matrices(m, m2)[], m0 %*% m0)
expect_equal(m2$set(m0)$multiply_scalar(1.4)[], m0 * 1.4)
m00 <- matrix(c(
1, 0, 0, 128,
-1,1, 0, 128,
0,-1, 1, 128,
0, 0, 4, 1
), 4, 4, byrow = TRUE)
expect_equal(m2$set(m00)$determinant(), det(m00))
m00 <- t(m0)
m00[1:3,4] <- 21:23
expect_equal(m2$set(m0)$transpose()$set_position(21:23)[], m00)
m00 <- matrix(c(
1, 0, 0, 128,
-1,1, 0, 128,
0,-1, 1, 128,
0, 0, 4, 1
), 4, 4, byrow = TRUE)
expect_equal(m2$set(m00)$invert()[], solve(m00))
# microbenchmark::microbenchmark(
# m2$set(m00)$invert(),
# solve(m00)
# )
expect_equal(m2$set(m00)$scale(2,3,4)[], m00 %*% diag(c(2,3,4,1)))
expect_equal(m2$set(m00)$get_max_scale_on_axis(), sqrt(2))
m00 <- diag(1, 4)
m00[1:3,4] <- c(1,2,3)
expect_equal(m2$make_translation(1,2,3)[], m00)
theta <- pi / 6
expect_equal(m2$make_rotation_x(theta)[], matrix(c(
1, 0, 0, 0,
0, cos(theta), -sin(theta), 0,
0, sin(theta), cos(theta), 0,
0, 0, 0, 1
), 4, 4, byrow = TRUE))
expect_equal(m2$make_rotation_y(theta)[], matrix(c(
cos(theta), 0, sin(theta), 0,
0, 1, 0, 0,
-sin(theta), 0, cos(theta), 0,
0, 0, 0, 1
), 4, 4, byrow = TRUE))
expect_equal(m2$make_rotation_z(theta)[], matrix(c(
cos(theta), -sin(theta), 0, 0,
sin(theta), cos(theta), 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
), 4, 4, byrow = TRUE))
## JS Code:
# new THREE.Matrix4().makeRotationAxis(new THREE.Vector3(1,2,3), Math.PI / 6).elements.join(",")
expect_equal(m2$make_rotation_axis(c(1,2,3), theta)[], matrix(c(
1,1.7679491924311224,-0.598076211353316,0,
-1.2320508075688772,1.401923788646684,1.3038475772933678,0,
1.4019237886466838,0.3038475772933678,2.0717967697244903,0,
0,0,0,1
), 4, 4, byrow = FALSE))
expect_equal(m2$make_scale(1,2,3)[], diag(c(1,2,3,1)))
expect_equal(m2$make_scale(x)[], diag(c(x[],1)))
# xy, xz, yx, yz, zx, zy
expect_equal(m2$make_shear(1,2,3,4,5,6)[], matrix(c(
1, 3, 5, 0,
1, 1, 6, 0,
2, 4, 1, 0,
0, 0, 0, 1
), 4, 4, byrow = TRUE))
## JS Code:
# new THREE.Matrix4().makePerspective(1,2,3,4,5,6).elements.join(",")
expect_equal(m2$make_perpective(1,2,3,4,5,6)[], matrix(c(
10,0,0,0,0,-10,0,0,3,-7,-11,-1,0,0,-60,0
), 4, 4, byrow = FALSE))
## JS Code:
# new THREE.Matrix4().makeOrthographic(1,2,3,4,5,6).elements.join(",")
expect_equal(m2$make_orthographic(1,2,3,4,5,6)[], matrix(c(
2,0,0,0,0,-2,0,0,0,0,-2,0,-3,7,-11,1
), 4, 4, byrow = FALSE))
})
Any 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.