如何检测重叠的圆圈并相应地填充颜色?

2024-04-18

我使用 3 个数组(用于 x、y 和半径大小)创建了 5 个具有随机 x 和 y 坐标和半径的圆。但是,我需要圆圈根据它们是否与另一个圆圈重叠来动态改变颜色。因此,如果 5 个圆圈之一根本不重叠,则应将其涂成黑色。重叠的圆圈应为青色。如果两个圆的中心点之间的距离小于它们的半径之和,则认为两个圆重叠。

这是我到目前为止为圆圈类写的内容。 以下代码将成功在小程序窗口中绘制 5 个圆圈,并且成功计算距离,但问题出在着色上。颜色填充似乎存在逻辑错误,我在这里没有看到问题。有什么建议么?太感谢了。

public class Circles extends Applet {

public void paint(Graphics page)
{
    Random locator = new Random();
    int [] xpt = new int [5];
    int [] ypt = new int [5];
    int [] rad = new int [5];

    setPreferredSize (new Dimension(300, 300));
    for (int i = 0; i < xpt.length; i++){

        xpt[i] = locator.nextInt(100); //need to set a number or it goes into millions, cannot set it in Random()
        ypt[i] = locator.nextInt(100);
        rad[i] = locator.nextInt(100);
        System.out.println("The #" + i +  " x-point: " + xpt[i] + " y-point: " + ypt[i] + " radius: " + rad[i]);  //for debugging purposes

        for (int j = 0; j < xpt.length; j++){
            double xpoint1 = xpt[i]+rad[i];
            double ypoint1 = ypt[i]+rad[i];
            double xpoint2 = xpt[j]+rad[j];
            double ypoint2 = ypt[j]+rad[j];
            double radius1 = rad[i];
            double radius2 = rad[j];
            double theDistance = distance(xpoint1,ypoint1,xpoint2,ypoint2); 
            System.out.println("Comparing " + i + " to " + j); //for debugging and logic checking
            if (i==j)
                ;
            else if (theDistance <= (radius1+radius2))
            {
                page.setColor(Color.cyan);
                page.fillOval(xpt[i], ypt[i], rad[i], rad[i]);
                //page.fillOval(xpt[j], ypt[j], rad[j], rad[j]);
                System.out.println("Overlap occurred. Colored " + i + " and " + j + " cyan.");
                System.out.println("Center points: ("+ xpoint1 +", "+ ypoint1 +") and ("+ xpoint2 + ", "+ ypoint2 + ").");
            }
            else  
            {
                page.setColor(Color.black);
                page.fillOval(xpt[i], ypt[i], rad[i], rad[i]);
                //page.fillOval(xpt[j], ypt[j], rad[j], rad[j]);
                System.out.println("No overlap. Made " + i + " and " + j + " black.");
            }
        }
    }
}

public static double distance(
        double x1, double y1, double x2, double y2) {
    return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));

}
}

xpoint、ypoint 等线并没有按照您的想法进行。

如果要确定两个圆是否重叠,则需要确定圆心之间的距离是否大于或小于它们的半径之和。

So:

function circlesCollide(x1, y1, r1, x2, y2, r2){
    return (distance(x1, y1, x2, y2) <= (r1 + r2));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测重叠的圆圈并相应地填充颜色? 的相关文章

随机推荐

  • asp.net core 5.0 RequestSizeLimit 不起作用

    我正在使用 ASP net core 5 0 看起来RequestSizeLimit不管用 我有以下控制器 HttpPost addfile RequestSizeLimit 5 242 880 5MB public IActionResu
  • RAY Python 框架内存不足

    我用 ray 创建了一个简单的远程函数 它占用的内存很少 然而 运行一小段时间后 内存稳步增加 并且出现 RayOutOfMemoryError 异常 下面的代码是这个问题的一个非常简单的例子 result transformed nump
  • Django Admin:将多个管理类注册到同一模型

    是否可以将多个管理类注册到同一模型 我想让 PostAdmin 和 MyPostAdmin 都注册到 Post 模型 现在我正在尝试将代理模型与 MyPost 一起使用 但它在管理面板中为我提供了两个不同的模型 并且具有各自的功能 管理员
  • Firebase 通过函数写入 Firestore 时出错:“7 PERMISSION_DENIED:缺少或权限不足”

    我正在尝试编写一个简单的 Firebase 函数 使用 TypeScript 将记录添加到 Firestore 代码的精简版本是 import as admin from firebase admin import as functions
  • php/mysql:自定义站点搜索

    首先 我无法使用 sphinx 因为我使用共享托管 我不喜欢谷歌解决方案 即 自定义搜索有这些愚蠢的广告 而且网站搜索不是免费的 我想自己创建搜索机制 我有页面表 我想通过关键字搜索页面内容 在结果页面上我想显示与所需关键字匹配的部分文本
  • 将 Laravel 项目文件保存在 public_html 中是否不安全?

    我在共享主机上的 public html 即下一级 中有 3 个不同的 laravel 项目 我更改了每个域 子域文档根路径以指向相应的项目 公共文件夹 即 public html project1 public 此外 我将 Options
  • 什么时候适合使用分号?

    我知道 JavaScript 以及 TypeScript 在很多情况下支持省略分号 尽管如此 我想添加分号以使其明确 如建议的那样TypeScript 深入探究 https basarat gitbooks io typescript co
  • LINQ to Entities 无法识别方法“System.String ToString(Int32)”

    您好 我正在使用 linq 查询 该查询抛出错误 LINQ to Entities does not recognize the method System String ToString Int32 method 并且此方法无法转换为存储
  • Queryable.OfType 如何工作?

    重要的问题不是 Queryable OfType 是什么 do 它是 我在那里看到的代码如何实现这一点 反思 Queryable OfType 我看到 经过一些清理后 public static IQueryable
  • FluentValidation LogOnFailure 覆盖

    在我的验证器类中 我有一些规则 我需要将一些验证错误记录到数据库中 这是我的验证器 RuleFor u gt u LastName Cascade CascadeMode StopOnFirstFailure NotEmpty WithMe
  • 在 AngularJS 中使用 typescript 检查 HTML 中的插值/绑定

    我知道 TypeScript 可以检测 ts 文件的编译错误 然而 如何在 AngularJS 视图 模板中获得这些好处呢 例如 如果我有这样的代码 div home property1 div 我定义了一个 HomeController
  • 如何在由 create-react-app 创建的应用程序中使用 jsx 文件(无需运行“npm runject”)?

    目前我只能使用 js 文件 如果我尝试使用 jsx 这将导致错误 问题是这样的 我通常使用代码格式化程序 而在js文件中编写jsx和格式化 会导致代码完全乱序 还会导致语法错误 我是 React 新手 所以我不知道如何配置使用 jsx 文件
  • 使用 RSPEC 进行测试时突然出现莫名其妙的活动记录连接超时

    这是一个我几乎一无所知的领域 所以提前道歉 我有一套超过 800 个 rspec 测试 当运行整个集合或只是特定的测试文件时 在其中几个之后 例如 20 个左右 尽管它从来不是完全相同的数字 突然且莫名其妙地 每个测试都开始失败并出现相同的
  • MySQL JSON 数据类型是否会影响数据检索的性能?

    假设我有一个名为的 MySQL JSON 数据类型custom properties对于媒体表 存储在 json 数据中的示例custom properties列可以是 company id 1 uploaded by Name docum
  • Mosquitto 1.4.2 Websocket 支持

    我正在尝试利用 Mosquittos 最近的更新来支持代理中的 websocket 我正在运行 Mosquitto v1 4 2 并将以下几行添加到 mosquitto 配置文件 mosquitto conf 中 listener 1000
  • 如何在 C# WPF 中让主窗口等待新打开的窗口关闭?

    我是 WPF 和 C 的新手 请耐心等待 我有一个主窗口 它打开一个新窗口 现在这个新窗口是一个提示是否覆盖文件的提示 主窗口访问新窗口中的一个公共变量来检查提示的结果 但我无法让主窗口处理等到新窗口关闭 Window1 Win new W
  • 没有 pom.xml 的 Jenkins 的加特林插件

    有没有人尝试过使用加特林插件 https wiki jenkins ci org display JENKINS Gatling Plugin对于詹金斯 但没有maven 我没有 Maven 项目 但我使用终端 bash 脚本 中的 Gad
  • 将事件传递/转发到 Qt 中的子对象

    我正在开发 Qt 应用程序 但在将鼠标事件获取到我想要的位置时遇到问题 这是我所拥有的高级视图 每个级别上还发生其他事情 这些事情决定了视图和场景的需求 App Window QMainWindow View QGraphicsView G
  • Gradle 使用不同的资源和类进行多次战争

    我有一个Java Web项目 我使用Gradle来构建项目 项目结构如下 我想使用 Gradle 构建 2 个 war main war 和 api war wars 结构如下 我已经尝试了很多次来构建这两个战争 但是当 main war
  • 如何检测重叠的圆圈并相应地填充颜色?

    我使用 3 个数组 用于 x y 和半径大小 创建了 5 个具有随机 x 和 y 坐标和半径的圆 但是 我需要圆圈根据它们是否与另一个圆圈重叠来动态改变颜色 因此 如果 5 个圆圈之一根本不重叠 则应将其涂成黑色 重叠的圆圈应为青色 如果两