Vector 从三维平面上的三维点检索二维坐标

Vector 从三维平面上的三维点检索二维坐标,vector,3d,geometry,2d,plane,Vector,3d,Geometry,2d,Plane,我有一个点,一个点(x,y,z),位于由ax+by+cz+d=0定义的平面上。我试图找出(x',y')相对于平面的位置,其中起点为(x0,y0,z0),x'-轴由(1,0)定义,y'-轴由(0,1)定义 我的主要目标是让鼠标点击一个曲面,并知道特定曲面上的二维坐标。我成功地将光线相交到一个平面上,非常简单 作为旁注,我使用的是DirectX 9——我对矩阵/向量数学的熟悉程度受到通过D3DX库提供给我的API的限制 我的一个想法是使用其中一个轴向量之间的夹角,找到距离原点的距离,然后使用简单的三

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

我的主要目标是让鼠标点击一个曲面,并知道特定曲面上的二维坐标。我成功地将光线相交到一个平面上,非常简单

作为旁注,我使用的是DirectX 9——我对矩阵/向量数学的熟悉程度受到通过D3DX库提供给我的API的限制


我的一个想法是使用其中一个轴向量之间的夹角,找到距离原点的距离,然后使用简单的三角计算出x/y。但我不确定这是否真的是一个理想的解决方案,或者它是否真的能解决眼前的问题。

因为你在那个平面上有一个二维图像,你显然想匹配它的坐标系。为此,确定图片的单位向量。也就是说,对于任何x>0,取图片位置(x,0)的3d坐标B,并从中减去图片原点(0,0)的3d坐标A。结果向量B− A将描述图像的正x方向。对y方向执行相同的操作。然后规范化这两个向量。这意味着将它们除以长度sqrt(x²+y²+z²),但D3Dx有一个函数用于此。让我们调用得到的3d向量X和Y。要计算任意3d点p的X和Y坐标,只需从p中减去原点A,即计算向量p− A.然后计算结果与单位向量X和Y之间的点积。这将给出两个数字:所需的坐标。这是因为点积可用于计算正交投影

将此转换为,它应该类似于以下内容。因为我从未使用过它,所以可能会有错误

D3DXVECTOR3*p;//输入点
D3DX矢量3 a、b、c、ab、ac、ap;//辅助向量
浮动x,y;//输出坐标
imagePosTo3D(&a,0,0);//a=图像的来源
imagePosTo3D(&b,1,0);//b=正x轴上的任何位置,可能是一个角
imagePosTo3D(&c,0,1);//c=正y轴上的任何位置,可能是一个角
D3DXVEC3子域(&ab,&b,&a);//ab=b-a
D3DXVEC3子域(&ac,&c,&a);//ac=c-a
D3DXVEC3规范化(&ab,&ab);//ab=ab/| ab|
D3DXVEC3规范化(&ac,&ac);//ac=ac/| ac|
//以上必须为图像执行一次,以下代码为每个p
D3Dxvec3子区(和ap、p和a);//ap=p-a
x=D3DXVec3Dot(&ab,&ap);//x=ab∙美联社
y=D3DXVec3Dot(&ac,&ap);//y=ac∙美联社

轴的定义不清楚,因为这些轴使用二维坐标。您必须以某种方式将这些轴与您的3d环境关联起来,或者指定您不关心这些轴相对于其周围环境的方向。@MvG我认为我的目标的上下文阐明了我试图实现的目标以及我的轴的相关性。如果我清楚,我本来不会问的……而且由于你的评论也没有澄清,我恐怕我也帮不了你。@MvG对不起,我想你可能错过了。想象三维平面上的二维图像。当我点击屏幕上的一个像素时,我想知道2D图像的x,y坐标。我在平面上有3D坐标(我已经投射出光线并在平面上进行了相交)-我正试图从与我相交的3D平面上获得图像的2D坐标。正如我所提到的,我的数学技能与你期望的不太一样。。。你能提供更多的细节/例子吗?