C#XNA - 计算矢量方向的下一个点

时间:2011-06-01 14:58:45

标签: c# vector xna

假设我有两点 A &我的3D空间 B

enter image description here

现在我想开始在 B 的方向上计算从 A B 的点数,我想继续计算远离B的计算同一行。

怎么做?

我实际上在做的是飞机上的子弹。

2 个答案:

答案 0 :(得分:3)

如果我理解你的问题,你应该先通过计算得到方向向量

dir = B - A

然后你可以继续旅行

C = B + dir

否则,请澄清您的问题,例如“从A到B计算点数”的含义,因为在数学上A和B之间有无限的点数。


编辑: 如果要跟踪项目符号路径,可以选择两种方法:

1)你将它实现为 hitscan 武器,就像许多FPS中所做的那样;任何射击的子弹都会立即击中目标。这可以通过Ray.Intersects执行光线跟踪来实现,并且可能是最简单且计算量最小的方法。当然,它也不是很现实。

2)你使子弹成为你世界中的一个物理实体,并通过当前位置矢量和运动/速度矢量的“正常”组合在你的Update()呼叫期间移动它,与任何可击中的人进行手动碰撞检测表面和物体。这样做的好处是,您可以实现适当的物理特性,如行程时间,跌落,摩擦等,但是,以强大的方式实施这些物理数据也更加难以实现。如果你想这样做,我建议使用预先制作的物理API(如Bullet,但我不确定是否有适用于XNA的版本),或者至少对该主题进行广泛的Google研究,所以你可以避免快速移动物体碰撞检测的许多陷阱。

答案 1 :(得分:0)

尝试在3D中实现2D技术,我计算以下一次

position = start;
dx = destination.X - start.X;
dy = destination.Y - start.Y;
dz = destination.Z - start.Z;

distance = (float)Math.Sqrt( dx * dx + dy * dy + dz * dz );
scale = 2f / distance;

然后我继续计算

position.X += dx * scale;
position.Y += dy * scale;
position.Z += dz * scale;

但结果仍然是3D Space不起作用,我只得到2维的结果,第三轴没有改变