当前位置: 首页 > 知识库问答 >
问题:

根据情况改变形象

戚宏浚
2023-03-14

我正在做一个课程项目飞行雷达模拟器。

情况是,当两架飞机危险地接近时,两架飞机的图像都发生了变化,而当它们处于安全距离时,它们又发生了变化。

问题是,大多数时候,只有一个图像被改成红色,我不知道问题出在哪里。

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);
    }
}

共有1个答案

白浩气
2023-03-14

你的算法不健全。考虑下面这个有3个平面的简单例子,其中平面1和3很接近,但是平面2离这两个都很远。您的循环执行以下操作:

- Check 1 & 2.  Not close, mark both blue
- Check 1 & 3.  Close - mark both red
- Check 2 & 3.  Not close, mark both blue

现在,在结尾处,平面2&3将被标记为蓝色,平面1将被标记为红色,尽管平面3应该被标记为红色。这是因为您的算法是严格迭代的,并且不坚持红色标记。这里有一个潜在的解决方案:

private void checkConflicts(ArrayList<Flight> flightsInArea) {
  HashSet<Integer> redFlights = new HashSet<Integer>();

  // Check for red flights
  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) {
        redFlights.add(i);
        redFlights.add(j);
      }
    }
  }

  // Mark flights
  for (int i = 0; i < flightsInArea.size(); i++) {
    flightsInArea.get(i).establishImage(redFlights.contains(i));
  }
}
 类似资料:
  • 嗨,所有人, 我在不同的科目上有学生的分数。 表 #Maths 包含名为 a,b 和 c 的学生的数学分数。#Science和#English类似。 现在我想要的输出是,如果学生在两个科目上超过75分,他将被评为“优秀”。如果他的一门课超过75分,另一门课超过60分,那么他的成绩就是“及格”,如果没有一门课超过75分,而有一门课不到50分,那么他的成绩就是“不及格”。 请为结果提供解决方案? 谢啦

  • 我正在Groovy中创建一个DSL来进行Httpendpoint测试,我希望它是自然语言ish,并且我有一个带有“with”方法的对象。当我链接命令时,我的方法被正确调用,但如果在变量脚本上调用“with”方法,则编译会失败,因为使用了现有的Groovy“with(Closure)”。DSL脚本文件是通过GroovyShell读取和执行的。 这很有效: 但事实并非如此: 被调用的对象是用Java编

  • 虽然我的问题主题似乎是许多PDF操作包和工具都支持的特性,但我需要明确指出,我不想旋转PDF。 我有一个PDF,它显示了一个纵向(A4),尺寸为WxH 297x210(A4旋转)。 现在,我需要实现的是,这个PDF有横向方向,同时保留尺寸。 我不确定这需要我做什么。 如果我使用Adobe Illustrator将文档格式更改到所需的位置,我还需要旋转内容。如果我将此页面放入设计糟糕的PDF中,此页

  • 我有一个基于REST的java web应用程序,使用Java8,MyBatis 3.4.5部署在Wildfly application Server上。在这个应用程序中,我有一个DB jar模块,它管理从/到应用程序/DB的所有查询、连接、对象。我所有其他必须与DB交互的Java代码(控制器、方法、类)都使用这个DB模块。 作为标准的MyBatis实现,我在DB模块中有这些包 my/app/oj/

  • 我正在给Kafka写一个msg,然后在另一端消费。在里面做一些过程,并把它写回另一个Kafka主题。 我想知道哪个消息响应是哪个请求... 当前决定捕获来自消费者侧的偏移id然后在响应中写入和读取响应有效载荷并决定相同。 对于这种方法,我们需要阅读每条消息。根据消费者配置条件,我们还有其他方法可以使用吗?

  • 本文向大家介绍mysql不重启的情况下修改参数变量,包括了mysql不重启的情况下修改参数变量的使用技巧和注意事项,需要的朋友参考一下 通常来说,更新mysql配置my.cnf需要重启mysql才能生效,但是有些时候mysql在线上,不一定允许你重启,这时候应该怎么办呢? 看一个例子: mysql> show variables like 'log_slave_updates'; +-------