首页 > 解决方案 > 寻找一种将平移/倾斜方向反转回 x、y 的方法

问题描述

我有如下内容:输入 x、y 和 h 以获得平移和倾斜方向

        double dz = Math.sqrt( x*x + y*y );
        double rotPan = Math.toDegrees(Math.atan(x / y));
        double rotTilt = Math.toDegrees(Math.atan( h / dz ));

是否可以仅通过将h赋予起点并达到初始xy值来反转 Math 的效果?

标签: javamathtrigonometry

解决方案


你所要做的就是重新排列方程。

        double dz = Math.sqrt( x*x + y*y );
        double rotPan = Math.toDegrees(Math.atan(x / y));
        double rotTilt = Math.toDegrees(Math.atan( h / dz ));

给定rotTilt,您可以计算 与 的h比率dz

double hOverDz = Math.tan(Math.toRadians(rotTilt));

所以如果你知道h,你可以计算dz

dz = h / Math.tan(Math.toRadians(rotTilt));

给定rotPan,您可以计算 与 的x比率y

double xOverY = Math.tan(Math.toRadians(rotPan));

所以:

x = y * xOverY;

代入和重新排列:

dz = sqrt(y^2 * xOverY^2 + y*y)
   = sqrt((xOverY^2 + 1) * y*y)
dz = y * sqrt(1 + xOverY^2) 

y  = dz / sqrt(1 + xOverY^2)
   = h / (tan(rotTilt) * sqrt(1 + xOverY^2))

y  = h / tan(rotTile) * sqrt(1 + tan(rotPan)^2))

因此

x  = y * xOverY
   = (h / tan(rotTile) * sqrt(1 + tan(rotPan)^2))) * tan(rotPan)

推荐阅读