dual-quat-to-mat4
Advanced tools
Comparing version 1.0.0 to 1.0.1
{ | ||
"name": "dual-quat-to-mat4", | ||
"version": "1.0.0", | ||
"version": "1.0.1", | ||
"description": "Convert a dual quaternion into a 4x4 matrix", | ||
@@ -5,0 +5,0 @@ "main": "src/dual-quat-to-mat4", |
@@ -30,6 +30,6 @@ dual-quat-to-mat4 [![npm version](https://badge.fury.io/js/dual-quat-to-mat4.svg)](http://badge.fury.io/js/dual-quat-to-mat4) [![Build Status](https://travis-ci.org/chinedufn/dual-quat-to-mat4.svg?branch=master)](https://travis-ci.org/chinedufn/dual-quat-to-mat4) | ||
var dualQuatToMat4 = require('dual-quat-to-mat4') | ||
var matrix = [] | ||
var dualQuat = dualQuatToMat4(matrix, [0, 0, 0, 1, 0, 0, 0, 0]) | ||
var dualQuat = dualQuatToMat4([0, 0, 0, 1, 0, 0, 0, 0]) | ||
console.log(dualQuat) | ||
console.log(matrix) | ||
// [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] | ||
@@ -40,8 +40,16 @@ ``` | ||
### `dualQuatToMat4(matrix)` -> `Array[16]` | ||
### `dualQuatToMat4(out, dualQuat)` -> `Array[16]` | ||
#### dual quaternion | ||
#### out | ||
*Requred* | ||
*Required* | ||
Type: `Array[*]` | ||
An allocated array that will get elements [0] through [15] set as your output matrix | ||
#### dualQuat | ||
*Required* | ||
Type: `Array[8]` | ||
@@ -48,0 +56,0 @@ |
@@ -5,23 +5,23 @@ module.exports = convertDualQuatToMatrix | ||
// recommended reading: https://www.cs.utah.edu/~ladislav/kavan07skinning/kavan07skinning.pdf | ||
function convertDualQuatToMatrix (dq) { | ||
function convertDualQuatToMatrix (out, dq) { | ||
// dq[0] dq[1] dq[2] dq[3] are our rotation quaternion elements | ||
// dq[4] dq[5] dq[6] dq[7] are our translation quaternion elements (the dual quaternions imaginary component) | ||
return [ | ||
1.0 - (2.0 * dq[1] * dq[1]) - (2.0 * dq[2] * dq[2]), | ||
(2.0 * dq[0] * dq[1]) + (2.0 * dq[3] * dq[2]), | ||
(2.0 * dq[0] * dq[2]) - (2.0 * dq[3] * dq[1]), | ||
0, | ||
(2.0 * dq[0] * dq[1]) - (2.0 * dq[3] * dq[2]), | ||
1.0 - (2.0 * dq[0] * dq[0]) - (2.0 * dq[2] * dq[2]), | ||
(2.0 * dq[1] * dq[2]) + (2.0 * dq[3] * dq[0]), | ||
0, | ||
(2.0 * dq[0] * dq[2]) + (2.0 * dq[3] * dq[1]), | ||
(2.0 * dq[1] * dq[2]) - (2.0 * dq[3] * dq[0]), | ||
1.0 - (2.0 * dq[0] * dq[0]) - (2.0 * dq[1] * dq[1]), | ||
0, | ||
2.0 * (-dq[7] * dq[0] + dq[4] * dq[3] - dq[5] * dq[2] + dq[6] * dq[1]), | ||
2.0 * (-dq[7] * dq[1] + dq[4] * dq[2] + dq[5] * dq[3] - dq[6] * dq[0]), | ||
2.0 * (-dq[7] * dq[2] - dq[4] * dq[1] + dq[5] * dq[0] + dq[6] * dq[3]), | ||
1 | ||
] | ||
// dq[4] dq[5] dq[6] dq[7] are our translation quaternion elements (the dual quaternion's imaginary component) | ||
out[0] = 1.0 - (2.0 * dq[1] * dq[1]) - (2.0 * dq[2] * dq[2]) | ||
out[1] = (2.0 * dq[0] * dq[1]) + (2.0 * dq[3] * dq[2]) | ||
out[2] = (2.0 * dq[0] * dq[2]) - (2.0 * dq[3] * dq[1]) | ||
out[3] = 0 | ||
out[4] = (2.0 * dq[0] * dq[1]) - (2.0 * dq[3] * dq[2]) | ||
out[5] = 1.0 - (2.0 * dq[0] * dq[0]) - (2.0 * dq[2] * dq[2]) | ||
out[6] = (2.0 * dq[1] * dq[2]) + (2.0 * dq[3] * dq[0]) | ||
out[7] = 0 | ||
out[8] = (2.0 * dq[0] * dq[2]) + (2.0 * dq[3] * dq[1]) | ||
out[9] = (2.0 * dq[1] * dq[2]) - (2.0 * dq[3] * dq[0]) | ||
out[10] = 1.0 - (2.0 * dq[0] * dq[0]) - (2.0 * dq[1] * dq[1]) | ||
out[11] = 0 | ||
out[12] = 2.0 * (-dq[7] * dq[0] + dq[4] * dq[3] - dq[5] * dq[2] + dq[6] * dq[1]) | ||
out[13] = 2.0 * (-dq[7] * dq[1] + dq[4] * dq[2] + dq[5] * dq[3] - dq[6] * dq[0]) | ||
out[14] = 2.0 * (-dq[7] * dq[2] - dq[4] * dq[1] + dq[5] * dq[0] + dq[6] * dq[3]) | ||
out[15] = 1 | ||
return out | ||
} |
@@ -10,6 +10,9 @@ var test = require('tape') | ||
var expectedOriginalDualQuat = [0, 0, 0, 1, 0, 0, 0, 0] | ||
var expectedDualQuatOut = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] | ||
var out = [] | ||
var convertedMatrix = dualQuatToMat4( | ||
out, | ||
expectedOriginalDualQuat | ||
) | ||
t.deepEqual(out, expectedDualQuatOut) | ||
var convertedDualQuat = mat4ToDualQuat(convertedMatrix) | ||
@@ -26,4 +29,5 @@ | ||
var expectedOriginalDualQuat = [-0.27447058422968623, -0.016130971701251967, 0.05674661681750636, 0.9597840903036474, -0.0017457254491423332, -0.12487046113525742, -0.011375334994009861, -0.0019253500880238306] | ||
var out = [] | ||
var convertedMatrix = dualQuatToMat4( | ||
out, | ||
expectedOriginalDualQuat | ||
@@ -30,0 +34,0 @@ ) |
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
5973
61
69
5
1