如何在 3D 中放置一个点,以便它创建某个角度
How to place a point in 3D so that it creates a certain angle?
我有一个关于3D的小问题。
以下是我问题的一个例子。
我有两点:
答: 12 4 5乙: 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)点 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点的轨迹其实是一个圆锥体,你可以想象,B是顶点,线AB是圆锥体的中心线,意味着3D圆锥体在AB上是对称的。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何创建一个空的全局类并在启动时实例化它
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- 在c++中为double类型的数组创建一个unique_ptr
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 我想通过带有C++和Python的插件创建一个可扩展的应用程序
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 创建一个包含 c++ 默认值的环境文件
- 如何创建一个类,以便向量工作 std::vector<MyClass<int>> v{ 1,2,3 };