gpt4 book ai didi

c++ - 如何在 3D 中放置一个点以使其形成一定的角度?

转载 作者:太空狗 更新时间:2023-10-29 21:46:45 24 4
gpt4 key购买 nike

我有一个关于 3D 的小问题。

下面是我的问题的一个例子。

我有两点:

答:12 4 5B: 6 8 -10

我还有一点:C: 5 6 7

我需要变换(?)点 C,使角 ABC 为 48 度。

我该怎么做?如果有人可以帮助我使用这些公式,或者甚至可以将上面的示例变成一个可行的示例,我将不胜感激。

换一种说法:如何变换 C.x、C.y 和 C.z 使角 ABC 为 48 度?

我真的很感激在这方面的一些帮助,因为我现在被困住了。

旁注:我已经实现了一种寻找角度的方法:

float Angle( float x1, float y1, float z1,
float x2, float y2, float z2 )
{
float x, y, z;
CrossProduct( x1, y1, z1, x2, y2, z2, &x, &y, &z );

float result = atan2 ( L2Norm( x, y, z ),
DotProduct( x1, y1, z1, x2, y2, z2 ) );

return result;
}

你使用它:角度(B.x - A.x,B.y - A.y,B.z - A.z, C.x - B.x, C.y - B.y, C.z - B.z);

最佳答案

       A------C    
|
c'' | c'
B

由于 3D 中的三个点定义了一个平面,因此在该平面上只有 2 个可能的候选变换 C-->c' 或 C-->c''。

c' 将是 c' = A+t*(B-A) + u*(C-A) 约束 Normalize(c'-A) dot Normalize(B-A) == cos (48/180 * pi).

我首先建议标准化 D=(B-A),然后:

D dot D+u*(C-A) = 1 * |D+u(C-A)| * cos (48 degrees)

Dx*(Dx+u*(Cx-Ax))+ Dy*(Dy+u*(Cy-Ay))+Dz*(Dz+u*(Cz-Az)) ==
0.669 * sqrt ((Dx+u*(Cx-Ax))^2+(Dy+u*(Cy-Ay))^2+(Dz+u*(Cz-Az))^2)

这是 a+u*b == 0.669*sqrt(c+du+e*u^2) 的形式,它将简化为 u 中的二次多项式,方法是对两者求平方边。

关于c++ - 如何在 3D 中放置一个点以使其形成一定的角度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14472287/

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