在给定平面上创建 XYZ 位置的数据集
Create dataset of XYZ positions on a given plane
我需要创建一个XYZ位置列表,给定一个起点和基于平面的位置之间的偏移量。在平面上,这很容易。假设我需要的偏移量是从位置 3,0,0 向下移动 2,然后向右移动 2
输出将是:
0,0,0 (starting position)
0,-3,0 (move down 3)
2,-3,0 (then move right 2)
不同的起始位置也是如此,假设 5,5,1:
5,5,1 (starting position)
5,2,1 (move down 3)
7,2,1 (then move right 2)
当飞机不再在这个平面网格上时,问题就来了。
我能够计算平面方程和给定 3 点的法向量。但是现在,根据这个等式,我该怎么做才能创建这个XYZ位置数据集呢?
我知道我可以在给定两个值的情况下解决 XYZ。假设我知道 x=1 和 y=1,我可以求解 Z。但是向下移动 2 不再只是 y-2。我相信我需要在 x 和 y 轴上找到一个线性方程来增加位置并平行于这个新平面的 x 和 y 移动,然后求解 Z。我不知道如何做到这一点。
另一个问题是我需要计算这个平面相对于基平面的角度、倾斜度和旋转度。
例如:
P1=0,0,0 and P2=1,1,0 the tilt=0deg angle=0deg rotation=45deg.
P1=0,0,0 and P2=0,1,1 the tilt=0deg angle=45deg rotation=0deg.
P1=0,0,0 and P2=1,0,1 the tilt=45deg angle=0deg rotation=0deg.
P1=0,0,0 and P2=1,1,1 the tilt=0deg angle=45deg rotation=45deg.
我在这两个问题上搜索了几个小时,我总是在飞机的方程上停下来。正确操作 x,y 以平行于平面,然后利用该信息找到这些角度。这是很多需要解决的几何形状,我找不到有关如何计算此点列表的任何进一步信息,更不用说计算与基平面的 3 个角度了。
我会对此提供任何帮助或见解。只是简单的旧数学或对C++的引用非常适合阐明我在这里面临的这个问题。
谢谢马 特
你可以把你的平面想象成由一个点和一对正交基向量定义(这只意味着两个长度为 1, 90 度的向量(。 最基本的平面可以定义为:
p0 = (0, 0, 0) #Origin point
vx = (1, 0, 0) #X basis vector
vy = (0, 1, 0) #Y basis vector
要查找在 X 方向偏移dx
在 Y 方向偏移dy
的点 p1
,请使用以下公式:
p1 = p0 + dx * vx + dy * vy
如果您的偏移量沿着给定的轴(听起来像是这样(,则此公式将始终有效。 如果向量已经旋转,这仍然是正确的 - 这就是你将要使用的属性。
因此,要找到沿旋转平面偏移的点:
- 采用默认的基向量(上面的
vx
和vy
(。
旋转它们 - ,直到它们定义所需的平面(您可能也需要也可能不需要旋转原点,具体取决于问题的定义方式(。
- 应用公式,得到你的答案。
现在当你做轮换时有一些怪癖(顺序很重要!(,但这是基本的想法,应该足以让你走上正确的轨道。 祝你好运!
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 如何将元素添加到向量的字符串位置
- 如何选择在 csv 文件中输出的位置
- 无法打开 fstream C++文件,即使它与 .cpp 位于同一位置
- 如何在特定位置追加 json 文件
- 将OpenCV旋转和平移矢量转换为XYZ旋转和XYZ位置
- 在给定平面上创建 XYZ 位置的数据集