function convertThreeJSToOdomCoordinates(threeJSCoord, odometryTransform) {
const odomQuaternionInv = new THREE.Quaternion(
odometryTransform.quaternion.x,
odometryTransform.quaternion.y,
odometryTransform.quaternion.z,
odometryTransform.quaternion.w
).invert();
const vectorThreeJS = new THREE.Vector3(
threeJSCoord.x,
threeJSCoord.y,
threeJSCoord.z
);
const relativePosition = vectorThreeJS.sub(new THREE.Vector3(
odometryTransform.position.x,
odometryTransform.position.y,
odometryTransform.position.z
));
relativePosition.applyQuaternion(odomQuaternionInv);
const odomCoordinates = {
x: relativePosition.x,
y: relativePosition.y,
z: relativePosition.z
};
return odomCoordinates;
}
const threeJSCoord = new THREE.Vector3(10, 20, 0);
const odometryTransform = {
position: { x: 5, y: 5, z: 0 },
quaternion: { x: 0, y: 0, z: 0, w: 1 }
};
const odomCoord = convertThreeJSToOdomCoordinates(threeJSCoord, odometryTransform);
console.log(odomCoord);
* {
margin: 0;
padding: 0;
}
#world {
position: absolute;
width: 100%;
height: 100%;
overflow: hidden;
background: linear-gradient(#e4e0ba, #f7d9aa);
}
console