zToVector function
Implementation
Array zToVector(Vector3 vector) {
if (vector.normSquared() == 0.0) {
return Array.identity(3);
}
var v = vector.normalize();
var phi = acos(v.z);
var theta = 0.0;
if (v.x != 0.0 || v.y != 0) {
// projection of vector to unit circle
var axisProj = v.withCoords(z: 0).normalize();
theta = acos(axisProj.x);
if (axisProj.y < 0) {
theta *= -1;
}
}
var phiDown = Array(values: [
[cos(phi), 0, sin(phi)],
[0, 1, 0],
[-sin(phi), 0, cos(phi)],
]);
return rotationAboutZ(theta).matMul(phiDown);
}