首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过点的矢量与轴和长度的夹角,得到点在3D空间中的坐标

通过点的矢量与轴和长度的夹角,得到点在3D空间中的坐标
EN

Stack Overflow用户
提问于 2013-05-09 07:09:45
回答 3查看 2.7K关注 0票数 1

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

我希望能有一个关于Java的算法或一段代码,即使有额外资料的链接也是很好的。有关于旋转角和矩阵的问答,但看起来我有一个不同的问题。

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

UPD1:操纵杆可以左右移动和前后移动:

代码语言:javascript
复制
    +z
     |            
-x -- -- +x       -x --'-- +x
     |
    -z
Top view          Side view (along z-axis)

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

代码语言:javascript
复制
    +z                +s (+y)
     |                 |
-x -- -- +x       -x --'-- +x
     |
    -z
Top view          Side view (along z-axis)

当字符串延伸时,3D中的点(P)就形成了

代码语言:javascript
复制
    +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)

我收到以下格式的坐标:

代码语言:javascript
复制
- 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
EN

回答 3

Stack Overflow用户

发布于 2013-05-09 09:08:06

听起来你有两个角度和一个大小,这是球面坐标。您希望将球面坐标转换为笛卡尔坐标:

更多信息here

编辑:

在进一步检查这个问题后,我发现这个问题要奇怪得多。你有两个分量向量(0,y,z)和(x,y,0)在y轴上的投影,它们描述俯仰和滚动。我确信操纵杆为偏航提供了另一个组件,但是它并没有在操作中指定。奇怪的是,这些分量实际上不可能是(x,y,z)向量的向量分量,因为这样y投影将是相同的。我认为OP正在寻找的是由这些给定的分量点和原点创建的新平面的法线。为了让它起作用,我必须给出投影产生的向量的大小。因为没有指定,所以我假设它们是单位向量。

代码语言:javascript
复制
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中的签名约定,答案可能需要否定一些组件。

票数 4
EN

Stack Overflow用户

发布于 2013-05-12 00:10:16

这似乎并不像预期的那样工作。我正在努力寻找解决方案。

设Y轴与向量在X轴上的投影之间的夹角为"alpha“,Y轴与向量在Z轴上的投影之间的夹角(θ)。X轴上的直线(投影)有一个方程式:

代码语言:javascript
复制
y = (1/tan(alpha) * x) + (0 * z)

直线(z轴上的投影有一个等式:

代码语言:javascript
复制
y = (0 * x) + (1/tan(theta) * z)

所以我们可以把它们放在后面,得到下面的方程:

代码语言:javascript
复制
x = (z * tan(alpha)) / tan(theta)
z = (x * tan(theta)) / tan(alpha)

如果我们替换矢量的量级方程中除一个以外的所有未知数:

代码语言:javascript
复制
|v| = sqrt(x^2 + y^2 + z^2)

我们得到一个方程式,它可以用x重新排列:

代码语言:javascript
复制
         /   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
EN

Stack Overflow用户

发布于 2020-05-14 21:14:54

这是我的一个解决方案(不同的轴,但原理是相同的)

假设:

代码语言:javascript
复制
OK = LT' = x [unknown]
OL = T'K = y [unknown]
OT = 1 [unit vector]
^TKT' = ^a
^TLT' = ^b

我们找出了xy之间的关系

代码语言:javascript
复制
y = x * (tan(b) / tan(a))

在OT为单位向量的情况下,可以通过以下方法找到x

代码语言:javascript
复制
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')是:

代码语言:javascript
复制
z = x * tan(b)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16451723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档