gpt4 book ai didi

c++ - 获取一条线的未知端点的角度

转载 作者:太空狗 更新时间:2023-10-29 20:05:36 33 4
gpt4 key购买 nike

简短版本:

基本上,我正在尝试使用 Line AB 的终点(Point B)。

我尝试使用 atan2( B.y, B.x) 但它给了我相对于 X-Axis 的角度,这导致了错误的坐标。我想我需要得到由 Line BCPoint B 所在的假想水平轴 (Angle P) 形成的角度。有没有办法获得那个角度?如果得到那个角度不能做我想做的事,那什么可以?

长版:

我正在尝试使用 C++ 做一些数学运算,但遇到了这个问题。

我有两个 vector ,Vector AVector B(由 Point APoint B 说明,它们形成了 line AB )。现在,我想获取 Vector C(Point C),它与 Vector B 相距 L 个单位(由 BC 行 说明)。

Case 1: Get point if B.y > A.y

我四处搜索,阅读了一些书籍,得到了这个公式来得到我需要的点。

/* Let:
* L = length from B to C
* ( B.x, B.y ) = start point
* ( C.x, C.y ) = end point
* theta = angle respective to X-Axis ( using atan2( B.y, B.x ) )
*/

// To get C.x use formula cos( theta ) = ( C.x - B.x ) / L then derive
C.x = ( L * cos( theta ) ) + B.x;

// To get C.y use formula sin( theta ) = ( C.y - B.y ) / L then derive
C.y = ( L * sin( theta ) ) + B.y;

但是,这不会导致如上所示的 Point C,因为生成的 C 将对应于 X 轴。阅读更多内容后,我发现我需要获取 Line BC(淡红色线)与假想水平轴之间的角度(如紫色 Angle P 所示) (青色线)Point B 所在的位置。

另一个例子:

Case 2: Get point if B.y < A.y

在这种情况下,使用上面的公式会导致 C 位于错误的位置(在 ( X , 5 ) 之上)

我不确定获取 Angle P 是否符合我的要求,如果您知道更合适的答案,请这样做。

最佳答案

你不需要触发。这是简单的比例。我发现的方便规则是,如果您发现自己使用 sin、cos atan2,那么您可能做错了。

下面是不触发的方法

dx = B.x - A.x;
dy = B.y - A.y;
dist = sqrt(dx*dx + dy*dy);
C.x = B.x + L*(dx/dist);
C.y = B.y + L*(dy/dist);

关于c++ - 获取一条线的未知端点的角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12434842/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com