gpt4 book ai didi

vector - 从 3D 平面上的 3D 点检索 2D 坐标

转载 作者:行者123 更新时间:2023-12-04 04:56:25 27 4
gpt4 key购买 nike

我有一个点 a point (x, y, z) 位于由 ax+by+cz+d=0 定义的平面上。我试图找出 (x', y') 相对于平面的位置,它的起点为 (x0, y0, z0) 并且 x' 轴由 (1,0) 和y' 轴由 (0,1) 定义。

我的主要目标是让鼠标在表面上单击,并了解特定表面上的 2D 坐标。我已经设法非常简单地将射线与平面相交。

附带说明一下,我使用的是 DirectX 9 - 我对矩阵/向量数学的熟悉程度受到通过 D3DX 库提供给我的 API 的限制。

我的一个想法是使用其中一个轴向量之间的角度并找到与原点的距离,然后使用简单的三角函数计算出 x/y。但我不确定这是否真的是一个理想的解决方案 - 或者它是否真的可以解决手头的问题。

最佳答案

由于您在该平面上有一个 2D 图像,您显然想要匹配它的坐标系。为此,请确定图片的单位向量。也就是说,对于任何 x>0,取图片位置 (x,0) 的 3d 坐标 B,并从中减去原点 (0) 的 3d 坐标 A ,0) 的图片。生成的矢量 B − A 将描述图像的正 x 方向。对 y 方向做同样的事情。然后标准化这两个向量。这意味着将它们除以它们的长度,sqrt(x²+y²+z²),但是 D3Dx 有一个函数 D3DXVec3Normalize为了这。我们将生成的 3d 向量称为 XY。要计算任何 3D 点 pxy 坐标,只需从 中减去原点 A p,即计算向量 p − A。然后计算结果与单位向量 XY 之间的点积。这将为您提供两个数字:所需的坐标。这是因为点积可用于计算正交投影。

将其翻译成 D3Dx , 它应该看起来像下面这样。由于我从未使用过,因此可能会出现错误。

D3DXVECTOR3 *p;                  // input point
D3DXVECTOR3 a, b, c, ab, ac, ap; // helper vectors
FLOAT x, y; // output coordinates
imagePosTo3D(&a, 0, 0); // a = origin of image
imagePosTo3D(&b, 1, 0); // b = anywhere on positive x axis, perhaps a corner
imagePosTo3D(&c, 0, 1); // c = anywhere on positive y axis, perhaps a corner
D3DXVec3Subtract(&ab, &b, &a); // ab = b - a
D3DXVec3Subtract(&ac, &c, &a); // ac = c - a
D3DXVec3Normalize(&ab, &ab); // ab = ab / |ab|
D3DXVec3Normalize(&ac, &ac); // ac = ac / |ac|
// the above has to be done once for the image, the code below for every p
D3DXVec3Subtract(&ap, p, &a); // ap = p - a
x = D3DXVec3Dot(&ab, &ap); // x = ab∙ap
y = D3DXVec3Dot(&ac, &ap); // y = ac∙ap

关于vector - 从 3D 平面上的 3D 点检索 2D 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16699259/

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