- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个点 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 向量称为 X 和 Y。要计算任何 3D 点 p 的 x 和 y 坐标,只需从 中减去原点 A p,即计算向量 p − A。然后计算结果与单位向量 X 和 Y 之间的点积。这将为您提供两个数字:所需的坐标。这是因为点积可用于计算正交投影。
将其翻译成 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/
我正在尝试编写一个程序来列出网络上所有设备的 IP 地址。其主要组成部分之一是能够 ping 设备。这个程序必须在 Linux、Windows 和 Mac 上运行,所以我选择了 Boost 库。 我设
如果我使用 Google 的 Jquery 加载脚本链接,那么如果用户的缓存中已经有该文件,那么当页面加载时,用户计算机是否仍会以任何方式与 Google 联系? 例子: 最佳答案 根据浏览器的缓存
我想在我的 ruby 代码中 ping 一个站点,发现 net-ping 是一个很好的库来执行此操作。不幸的是,当我尝试 gem install net-ping 时出现以下错误: C:>gem
我有一个表(test_matches),其中记录了几场比赛的结果,按日期排序。 GHFT = 目标主队全职。GAFT = 全职客场进球队。 CREATE TABLE `test_matches` (
我正在使用 phing对于一个项目的一些自动构建过程,我想知道:我怎样才能通过电子邮件获得完整的日志? 当我通过命令行启动 phing 时,会显示构建日志;我想要它: 通过电子邮件发送, 给几个收件人
尝试根据 GF 和 GA 创建一个新列“Results”。想知道如何通过定义函数和条件语句来做到这一点。以下是我对一行的初步尝试,但无法弄清楚如何将其应用于所有行,非常感谢您的帮助! 日期地点对手GF
我是一名优秀的程序员,十分优秀!