Javascript 如何从距离、方位角和仰角获取三维坐标

Javascript 如何从距离、方位角和仰角获取三维坐标,javascript,3d,coordinates,trigonometry,Javascript,3d,Coordinates,Trigonometry,我在一个3D环境(100x100x100虚拟立方体)中工作,其中每个点都由其x、y和z位置定义。我们有两个点:A的位置是x:20Y:35Z:40,B的位置是x:50Y:40Z:85。使用这个算法()我可以找到从A看B的距离,方位角和仰角 let ax = 20; let ay = 35; let az = 40; let bx = 50; let by = 40; let bz = 85; let dx = bx-ax; let dy = by-ay; let dz = bz-az; le

我在一个3D环境(100x100x100虚拟立方体)中工作,其中每个点都由其x、y和z位置定义。我们有两个点:A的位置是x:20Y:35Z:40,B的位置是x:50Y:40Z:85。使用这个算法()我可以找到从A看B的距离,方位角和仰角

let ax = 20;
let ay = 35;
let az = 40;

let bx = 50;
let by = 40;
let bz = 85;

let dx = bx-ax;
let dy = by-ay;
let dz = bz-az;

let dist = Math.sqrt( Math.pow(dx,2) + Math.pow(dy,2) + Math.pow(dz,2) ); // SQRT((x2–x1)2+(y2–y1)2+(z2–z1)2)
let azim = toDeg( Math.atan( dx / dy ) );                                 // arctan((x2–x1)/(y2–y1))
let elev = toDeg( Math.asin( dz / dist ) );                               // arcsin ((z2–z1) / distance)
方位角+仰角通过函数toDeg()以度为单位进行转换以进行验证

function toDeg (angle) {
    let a = angle * (180 / Math.PI);
    return a 
}
结果是:

dist = 54.31390245600108
azim = 80.53767779197439
elev = 55.94671404468539
现在的问题是:如何检索B初始值?知道A位置(20,35,40)和B的距离+方位+标高,是否有可能获得其位置50,40,85

假设数学函数不返回精确结果(截断的小数),则绝对精度并不重要,因为通过Math.round()->点x:49.9999 y:40.0002 z:849999在立方体中不存在,因此查找即49.9999而不是50会给出正确的值

Thx提前获取帮助

关闭以获取解决方案:

let azim = Math.atan( dx / dy ); // keep result in radians
let elev = Math.asin( dz / dist );

 X = Math.round( dist * ( Math.cos( elev ) * Math.sin( azim ) ) );
 Y = Math.round( dist * ( Math.cos( elev ) * Math.cos( azim ) ) );
 Z = Math.round( dist * Math.sin( elev ) );

要解决的最后一个问题:在某些情况下(即X为负数,ax低于数学,abs(X))X和Y是错误的。我现在正在寻找一种直接获得正确结果的方法,而不是编码条件(if/else…)。

我找到了这个页面,但我不知道如何使用它。。。对不起,我在trigo方面的水平很差:-)还有这个:(见最后一个答案)