从其向量与轴及其长度成的角度获取3D空间中点的坐标

问题描述 投票:1回答:3

我有一个向量的大小,该向量指向从原点(0x,0y,0z)到3D空间中的某个地方。我还有一个向量在X和Z轴上的投影在自身和Y轴之间的夹角。换句话说,我有一个操纵杆,用于左右移动时读取X角度(从-35到35度),前后移动时读取Z角度(从-35到35度)。当操纵杆处于其初始位置时,它将返回0。我得到了幅度的读数(琴弦从操纵杆中拉出了多远)。我需要找到字符串末尾的点的坐标(假设1 cm的大小等于一个单位矢量)。点将始终位于x-z轴平面上方。幅度永远不会为0。

我很欣赏Java上的一种算法或一段代码,即使链接到其他材料也很好。问与答谈论旋转角度和矩阵,但看来我有一个不同的问题。

UPD:角度不在向量和x,y,z轴之间。它们是向量在轴上的投影与Y轴所成的角度。

UPD1:操纵杆可左右左右移动:

    +z
     |            
-x -- -- +x       -x --'-- +x
     |
    -z
Top view          Side view (along z-axis)

以及在中间有可扩展的字符串:

    +z                +s (+y)
     |                 |
-x -- -- +x       -x --'-- +x
     |
    -z
Top view          Side view (along z-axis)

当字符串扩展时,形成3D点(P)

    +z               +y                 +y
     | P              |  P               |  P
     |/               | /                | /
-x --/-- +x           |/                 |/
     |           -x --'-- +x        -z --'-- +z
    -z
Top view          Side view          Side view
               (along z-axis)      (along x-axis)

我以以下格式接收坐标:

- x-axis angle (call it alpha) [-1 1] in reality between [-35 and 35] degrees
- y-axis angle (call it theta) [-1 1] in reality between [-35 and 35] degrees
- magnitude of vector OP (call it magnitude) [-1 1] in reality between 0[ and 305] cm
java math vector 3d geometry
3个回答
4
投票
“转换”

更多信息here

编辑:

进一步检查该问题后,我发现该问题更为奇怪。您在y轴上有两个分量矢量(0,y,z)和(x,y,0)的投影,它们描述了俯仰和横滚。我确定操纵杆为偏航提供了另一个组件,但是未在OP中指定。奇怪的是,这些分量实际上不可能是(x,y,z)向量的向量分量,因为那时y投影将是相同的。我

认为 OP寻找的是由这些给定的组成点和原点创建的新平面的法线。为此,必须给我给出投影所源自的矢量的大小。由于未指定,因此我

假定是单位向量。

Vector xPrime=Vector(sqrt(1-xProj^2),xProj,0); Vector zPrime=Vector(0,y,sqrt(1-zProj^2)); Vector ans=cross(zPrime,xPrime); cross product的公式。根据OP中的符号约定,答案可能需要排除某些成分。

0
投票
Y轴与向量在X轴上的投影之间的夹角为“α”,Y轴与向量在Z轴上的投影之间的夹角为“θ”。x轴上的线(投影)具有一个方程:

y = (1/tan(alpha) * x) + (0 * z)

线(z轴上的投影具有等式:

y = (0 * x) + (1/tan(theta) * z)

因此,我们可以重新排列它们以获得以下等式:

x = (z * tan(alpha)) / tan(theta)
z = (x * tan(theta)) / tan(alpha)

如果我们替换所有未知数,但向量的大小方程中只有一个:

|v| = sqrt(x^2 + y^2 + z^2)

我们得到一个可以根据x重新排列的方程:

         /   magnitude^2 + tan^2(alpha)    \
x = sqrt |---------------------------------|
         \ tan^2(alpha) + tan^2(theta) + 1 /

漂亮的方程式:

http://latex.codecogs.com/gif.latex?\ sqrt {} \ frac {\ left%20 | vector \ right%20 | ^ 2%20 +%20tan ^ 2%28xy%29} {tan ^ 2%28xy%29%20 +% 20tan ^ 2%28zy%29%20 +%201}

((复制-粘贴链接)]

然后我们可以替换先前方程式中的x以获得z和y。


0
投票
enter image description here

假设:

OK = LT' = x [unknown] OL = T'K = y [unknown] OT = 1 [unit vector] ^TKT' = ^a ^TLT' = ^b

我们找出

x和

y之间的关系:

y = x * (tan(b) / tan(a))
以OT为单位向量,
x
可以通过以下方式找到:

x = sqrt{ tan^2(a) * cos^2(b) / (tan^2(a) + sin^2(b)) } y = 1 / sqrt{ tan^2(a) / sin^2(b) + 1 }

z
(TT')是:

z = x * tan(b)

© www.soinside.com 2019 - 2024. All rights reserved.