android中的交叉数算法

时间:2016-06-05 17:03:20

标签: android algorithm

我正在为Android制作类似小行星的游戏。我正在阅读“安卓游戏编程”。我正在实施交叉数算法。应用程序已完成并且可以正常运行,但我不明白这部分代码:

if (((cp2.currentPoint.y > cp1.currentPoint.y) !=
    (cp2.currentPoint2.y > cp1.currentPoint.y)) &&
    (cp1.currentPoint.x < (cp2.currentPoint2.x - cp2.currentPoint2.x) *
    (cp1.currentPoint.y - cp2.currentPoint.y) / (cp2.currentPoint2.y - cp2.currentPoint.y) + cp2.currentPoint.x))

cp1.currentPoint是第一个对象的第一个顶点(因此它是一个点),cp2.currentPoint是第二个对象的第一个顶点,cp2.currentPoint2是第二个点。这两点构成了我们的路线。

这部分我不明白:

(cp2.currentPoint2.x - cp2.currentPoint2.x)

结果总是为0,为什么我要这样做?

2 个答案:

答案 0 :(得分:0)

如你所说,它总是为零,你不需要它。也许其他一些价值观可能存在但却被遗忘了。所以只需要把它拿出去清理你的代码。

答案 1 :(得分:0)

我读了这本书。作者(约翰·霍顿(John Horton)”在第331页写道:“好吧,现在,我们可以依靠数学家设计和完善的巧妙算法,而不仅仅是我自己。”我认为,那本书中与数学相关的代码非常糟糕,John不会自欺欺人(您的代码可以重写:

if (((cp2.currentPoint.y > cp1.currentPoint.y) !=
   (cp2.currentPoint2.y > cp1.currentPoint.y)) 
   &&
   ((cp1.currentPoint.x < cp2.currentPoint.x)||
    (cp1.currentPoint.x < cp2.currentPoint.x)))

'if'语句的第一行是检查 点的y位置在所形成的线的高度内 两点。其他两行确保虚构的来源 ray始终位于要测试的行的左侧。

此外,约翰·霍顿(John Horton)还在为一本好书《开始Android游戏》撒谎                      Mario Zechner讲,这本书大约需要600页                      构建一个简单的复古Snake游戏-彻底说谎!我建议您阅读Mario Zechner写的书。