任务2中方法Calculating Bearings的编写
问题: 求给定两个点和初始方向,求转向角度。
(1)
最开始考虑通过建立两个向量来求夹角。应用向量夹角的公式来计算余弦值。
测试的时候发现,如果出现(0,0)的点,就存在空向量了,那么夹角无论如何都是0。
如果要排除0向量,需要加的限制条件太多,编写难度比较大。
(2)
查阅资料得知Math.atan2()方法(来自菜鸟教程)
可以通过这个函数来计算角度。
将targetY - currentY, targetX – currentX (注意此处的x,y已经调换)作为新的坐标,计算这个坐标在坐标系中和x轴的夹角。可以推知这个角刚好与是原来从y轴转到目标点的转向角度,用这个角度减去当前角度就是需要的值了。只不过可能会出现负值,加上360即可
convexHull函数的编写
这个函数求凸包,我写的程序思想很简单,就是遍历所有的点,找出和当前点转向角最小的,作为下一个点,直到返回最初点。
大体实现后测试用例通不过。
检查后添加:当点数小于3时直接返回。
还是通不过测试用例。
后来尝试在输入的pionts集合上删除已有的点来防止重复(后来发现没必要,已有的点肯定是角度较大的,不会进入结果集合),结果是程序直接出错了。当时编写时觉得可能是不能删除元素,删除了里面就乱了。(猜测的,后来上课知道了删除的话要用迭代器,我实现时用的是for循环)。
最后发现是因为存在共线的点,然后就选取了第一次遇到的点。
添加共线的判断,把转向角最小的那组存起来,再选出距离当前点最远的,就是要的目标点。
FriendshipGraph类的测试类编写
第一次写这种测试类的代码,没什么经验,主要是模仿P2中的代码和习题课的测试代码:划分等价类,测试边界等等。
大致测试了添加同名人物,添加自己到自己的边,测试单向边情况下的距离计算等情况。
脱离Eclipse进行build
这里我尝试使用ant去进行build,但是在网上查看教程后发现build.xml的编写挺复杂的,所以暂时没有脱离Eclipse去进行代码的测试。