私は、フライトレーダーシミュレーターであるクラスプロジェクトに取り組んでいます。
2 つの飛行機が危険なほど接近すると、両方のフライトのイメージが変化し、安全な距離にあると、再びイメージが変化するという状況です。
問題は、ほとんどの場合、これらの画像の 1 つだけが赤に変更され、どこに問題があるのか わからないことです。
これは私が近さの状態を確認するために使用している方法で、非常に単純で、それらの間の距離のみを確認しています。
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);
}
}