下面的问题我工作的是我最喜欢的一个过去的时代:游戏开发。
问题:我们在三维空间。我试图确定,在所说的空间中,两个向量之间的一条线是否穿过一个圆;后者包括:中心向量、半径、偏航和俯仰。
为了确定这一点,我的目标是把圆转换成一个平面,这个平面可以是无限大的,也可以只有圆的所有边的直径。
如果两个向量之间的直线真的通过了那个平面,我就只剩下一个简单的任务,确定交点是否在圆的半径内,在这种情况下,我可以返回true或false。
已经起作用的是:我已经建立了我的圈子,总体框架就在那里。圆圈在3D空间中的出现/呈现完全符合指定的,太好了!
已经尝试过的:复制一些github gist代码,并试图让它们为我的目的工作。我工作过,至少有时是这样。不幸的是,由于代码是如何编写的,我不知道它在做什么,只是取消了所有这些。对这个主题也做了很多研究。但由于我不太懂人们在谈论直线/平面交叉口时所说的语言,我本可以在没有认出答案的情况下阅读答案。
问题:我被困在交叉路口。不知道该去哪里,也不知道它在逻辑上是如何运作的!那么,我该从这里走到哪里,如何理解这一切呢?
注意:我确实将这个问题标记为“java”,但我并不寻找填鸭式代码。这是一个合乎逻辑的问题,我正在努力克服。如果解释得足够好,我将使代码的工作与试错!
1条答案
按热度按时间g52tjvyc1#
假设你的圆是xy平面上的一个圆,其中心在(0,0,0),半径为1。你怎么解决这个问题?当z等于0时,您将检查x和y的值。如果直线通过圆,x的平方加y的平方将小于1(半径的平方)。
换句话说,您可以将三维坐标转换为更简单的参照系。所以我认为你需要学习三维坐标的变换,这其实并不难。您需要旋转三维空间,直到中心向量只有一个z分量,并且偏航和俯仰为零。然后偏移坐标,使圆心位于(0,0,0)。然后对该行应用相同的变换。你最后可以按半径缩放,但老实说,这并不重要,因为圆的数学很简单。