补充信息:
我正在使用一个正方形内部作为竞技场。在开始时,正方形会以随机位置和旋转角度生成,并且我无法访问任何正方形的属性。
然后我有一个在正方形内部移动的对象,我正在为其构建人工智能,我希望这个对象可以“学习”竞技场的墙壁在哪里。每次物体撞到一堵墙时,我都会得到一个碰触返回值,所以我知道它是否被撞击了。我使用这个来映射物体撞到墙的全局位置并保存它...在同一堵墙上撞3次后,我想要通过数学方法沿着这些点“画一条直线”,这条直线将代表竞技场的墙-有了这个,我就可以告诉我的对象不要靠近这些坐标。
为什么是3个点呢?如果物体撞到墙的一侧,然后又撞到墙的另一侧,那么我将从一侧绘制一条线到另一侧,从而给出错误的有关墙位置的数据。
如果Java看到三个(或更多)点在一条直线上,它就知道物体撞到了同一堵墙(不管是上面还是下面)。
继续:
我正试图通过给定的坐标数据映射出线条。基本上,我有一个保存X和Y坐标的数组,并且我希望能够数学上检测它们是否组成一条直线(或多或少地)。 (这些坐标是正方形的边框)
例如,数组可能像这样:
[x0][y0] - 1,1
[x1][y1] - 2,2
[x2][y2] - 5,5
这将呈现正方形一侧的对角线,如下所示:
但有时我可能会混合使用正方形的某一侧的一组坐标和另一侧的一组坐标(而且不一定是90度的角度!)。因此,我希望能够运行整个数组,并检测哪些坐标构成一条线(或正方形的边框),如下图所示:
因此,现在我有一个二维数组:
private double wallLocations[][] = new double[10][10];
还有一个无法完成任务的while循环。我真的不知道从哪里开始解决:
for(int r = 0; r < wallIndex; r++){
for(int c = 0; c < wallIndex; c++){
int index = 0;
if(wallLocations[r][index] == wallLocations[r][c] && wallLocations[r][index + 1] == wallLocations[r][c] &&
wallLocations[r][index + 2] == wallLocations[r][c]){
System.out.println("***** Wall Here! *****");
index++;
}
}
}
---- 更新 ----
这里有一个更好的例子,它和我想要的内容有关。红点代表所接收到的坐标,当3个或更多的点排成一条线时就会检测到一条直线(如果只有2个点,则会检测到任何和所有点)...你注意到这开始看起来像是一个正方形的边界了吗?