我正在使用以下代码来获取两个xyz坐标的距离。
function dist(x0,y0,z0,x1,y1,z1){
deltaX = x1 - x0;
deltaY = y1 - y0;
deltaZ = z1 - z0;
distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ);
return distance;
}
对于给定的两个坐标。
arr1 = [1524519105.309092, 575131.076859, 4141688.619666, -14.086608]
arr2 = [1524519105.310092, 575131.082497, 4141688.628375, -14.086852]
其中索引0代表时间戳;以下3个数字代表xyz。 我的目标是比较这两个坐标并得出速度。这是我到目前为止的内容:
let x2 = arr2[1] // Array 2 x
let y2 = arr2[2] // Array 2 y
let z2 = arr2[3] // Array 2 z
let x1 = arr1[1] // Array 1 x
let y1 = arr1[2] // Array 1 y
let z1 = arr1[3] // Array 1 z
var c = dist(x1,y1,z1,x2,y2,z2)
var time_difference = arr1[0] - arr2[0] // time difference
var speed = Math.round(c / time_difference);
速度不能给我合适的速度;有时候我得到-0,这使我相信我在时差上做错了什么。 我的总体目标是使速度达到每秒米。
答案 0 :(得分:1)
如果您正在使用Three.js,请使用其功能。
var arr1 = [1524519105.309092, 575131.076859, 4141688.619666, -14.086608]
var arr2 = [1524519105.310092, 575131.082497, 4141688.628375, -14.086852]
var vec1 = new THREE.Vector3().fromArray(arr1, 1);
var vec2 = new THREE.Vector3().fromArray(arr2, 1);
var timeDiff = arr2[0] - arr1[0]; // next minus current
var speed = vec2.sub(vec1).divideScalar(timeDiff).length(); // next minus current divided by time difference
console.log({speed});
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/94/three.min.js"></script>
答案 1 :(得分:0)
var time_difference = arr1[0] - arr2[0]
您的arr1[0]
时间戳早于arr2[0]
时间戳(小于)。因此,在这种情况下,arr1[0] - arr2[0]
将为负。如果无论speed
是什么,总是想要一个正数arr
,请首先在结果上使用Math.abs
:
function dist(x0,y0,z0,x1,y1,z1){
deltaX = x1 - x0;
deltaY = y1 - y0;
deltaZ = z1 - z0;
distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ);
return distance;
}
arr1 = [1524519105.309092, 575131.076859, 4141688.619666, -14.086608]
arr2 = [1524519105.310092, 575131.082497, 4141688.628375, -14.086852]
let x2 = arr2[1] // Array 2 x
let y2 = arr2[2] // Array 2 y
let z2 = arr2[3] // Array 2 z
let x1 = arr1[1] // Array 1 x
let y1 = arr1[2] // Array 2 y
let z1 = arr1[3] // Array 3 z
var c = dist(x1,y1,z1,x2,y2,z2)
var time_difference = Math.abs(arr1[0] - arr2[0]);
var speed = Math.round(c / time_difference);
console.log(speed);