我在Java中编写了一个简单的GJK算法实现(凸形碰撞),它涉及到3D矢量的大量简单计算。在性能与可读性方面,最好将点存储为double [3]并且有一大堆静态方法来处理它们(加,减,点,交叉,否定等)或者使用带有方法的类包含在?
中双精度数组的问题在于,如果使用专门的方法,则需要进行简单的减法(例如)多个循环,或者如果它们被硬编码,则代码变得非常长.Point对象使代码更具可读性,但是我认为这不是一个微不足道的性能开销值得吗?
答案 0 :(得分:6)
我的建议:使用您所花费的最少的工作使其工作,然后再进行优化。可能会发现应用程序中的瓶颈完全不同,碰撞检测的改进只是一个小问题。
例如,假设您发现应用程序花费10%的时间进行冲突检测,并且50%的时间用于磁盘读取。如果你可以使用缓存将磁盘读数减少一半,那么你的执行速度提高了25%,这是你完全消除冲突检测时间所能达到的最佳值的两倍。
正如Donald Knuth所说:“过早优化是所有邪恶的根源。”
答案 1 :(得分:0)
如果您需要执行操作,搜索或编辑数据的其他功能,我会使用该对象。也许你的基类可以是一个数组。
答案 2 :(得分:0)
答案 3 :(得分:0)
制作课程总是更好,这种方式不仅可以提高可读性,而且还可以实现可扩展性,您可以随时扩展课程的意义。在我理解oops的魔力之前,我也会感觉一样,但现在我真的知道它可以为我的项目创造什么差异。你可以从oops中获得很多建议。
答案 4 :(得分:0)
我认为
Point point = new Point(x, y, z);
更像是一个点而不是
double[] point = {x, y, z};
所以,去上课吧!