我正在研究班级项目,这是一个飞行雷达模拟器。根据情况更改图片
情况是,当两架飞机危险地关闭两个航班的图像变化,当他们在安全的距离,他们再次改变。
的问题是,大多数时间只有一个图像被改变为红色,我不知道哪里出了问题可能是。
这是我用来检查接近度条件的方法,很简单,只检查它们之间的距离。
private void checkConflicts(ArrayList<Flight> flightsInArea) {
for (int i = 0; i < flightsInArea.size(); i++) {
for (int j = i + 1; j < flightsInArea.size(); j++) {
Coordinate currentFlight1 = flightsInArea.get(i).getCurrentPosition();
Coordinate currentFlight2 = flightsInArea.get(j).getCurrentPosition();
double cathetusX = Math.pow((currentFlight1.getPositionX() - currentFlight2.getPositionX()), 2);
double cathetusY = Math.pow((currentFlight1.getPositionY() - currentFlight2.getPositionY()), 2);
double distance = Math.sqrt(cathetusX + cathetusY);
if (distance < 100) {
flightsInArea.get(i).establishImage(true);
flightsInArea.get(j).establishImage(true);
} else {
flightsInArea.get(i).establishImage(false);
flightsInArea.get(j).establishImage(false);
}
}
}
}
这是该方法的使用,以建立新的形象。
public void establishImage(boolean conflict) {
try {
if (conflict) {
image = ImageIO.read(this.getClass().getResource("red_plane.png"));
} else {
image = ImageIO.read(this.getClass().getResource("blue_plane.png"));
}
}
catch (IOException ex) {
Logger.getLogger(Vuelo.class.getName()).log(Level.SEVERE, null, ex);
}
}
不会解决你的问题,但你不应该每次检查时都从桌面读取图像。启动程序时应将图像读入内存。 – camickr
谢谢,我会按照你的意见。 – sandiego
[“飞机使用稍微修改版本的极坐标进行导航,”](http://en.wikipedia.org/wiki/Polar_coordinate_system#Position_and_navigation)见[这里](http://stackoverflow.com/a/12607586)/230513)。 – trashgod