计算圆中的每个笛卡尔点

2024-03-17

我有一个数组: int[][] lawn = new int[980][1280];

它存储草坪中叶片的高度值。

在我的模拟中,我有一个机器人在草坪上行走并切割刀片。

我的机器人呈圆形,直径为 (rDiameter)。 坐标系是用 Double 完成的,我的草坪是用 Integer 完成的。

我开发了两种允许机器人修剪草坪的“算法”,但我不满意,因为我的算法的精度不够高,而且性能也不够高。

我的问题是,除了我已经想到的想法之外,还有其他方法可以做到这一点吗?

或者我是否需要改变我的草坪的实施以获得更好的结果?

如果我不够清楚,请随时询问。

这是我的两个算法的代码(k代表机器人),centerPosition返回我的机器人的中心(所以是圆的中心)

approach with square
    int bottomLeftCornerX = (int) (k.getCenterPosition().getX() - simulParams.getKDiameter() / 2);
    int bottomLeftCornerY = (int) (k.getCenterPosition().getY() - simulParams.getKDiameter() / 2);

    for (int i = bottomLeftCornerX; i < bottomLeftCornerX + simulParams.getKDiameter(); i++) {
        for (int j = bottomLeftCornerY; j < bottomLeftCornerY + simulParams.getKDiameter(); j++) {
            ((LawnArea) lawn.getBladeHeight()).cutBladeInArea(j, i);
        }
    }

这是采用圆方法的方法(基本上是维基百科中存在的圆会议公式......):

for (int r = 0; r < simulParams.getKDiameter() / 2; r++) {

        for (double t = 0; t < 2 * Math.PI; t = t + 0.1) {
            Point2D p = circumference(k.getCenterPosition().getX(), k.getCenterPosition().getY(), t, r);
            int intX = (int) Math.ceil(p.getX());
            int intY = (int) Math.ceil(p.getY());
                ((LawnArea) lawn.getBladeHeight()).cutBladeInArea(intY, intX);
            }
        }
    }

第一种方法(基于边界框)是一个好的开始。但现在您只需要添加一个条件来检查边界框内的每个点是否也在圆内。

就像是:

for each (point p inside bounding-box) {
    if (p inside circle centred at k) {
        cutBlade(p);
    }
}

您可以通过注意在边界框的每一行(或列)中,需要切割的刀片组都是邻居来改进这一点。如果您计算此范围的端点,则不需要任何条件。

就像是:

for each (x inside bounding-box) {
    calculate y_first;
    calculate y_last;
    for (y = y_first; y < y_last; y++) {
        cutBlade(x,y);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算圆中的每个笛卡尔点 的相关文章

随机推荐

  • next.js 和 mongodb atlas - 收到“配置限制的连接百分比已超过 80”警报

    我在 MongoDB Atlas 上看到了很多关于此警报的帖子和文章 配置限制的连接百分比已超过 80 但不知道如何在我的 Next js 应用程序中解决它 我在处理程序函数之外创建数据库连接 我使用了中间件withDatabase js
  • 在phonegap中打开软键盘时,showkeyboard/hidekeyboard事件不会在ios 7上触发

    我有一段非常简单的代码 只是为了尝试在软键盘打开时发出警报 我只是想证明这是显示键盘打开的可行方法 document addEventListener deviceready function app deviceReady documen
  • 用于 RSSI 距离近似的卡尔曼滤波器

    我目前正在开发一个项目 该项目利用 RSSI 信号来确定用户与三个信标之间的距离 虽然我有粗略的三角测量公式 但我正在努力使一些东西更加准确 通过我所有的研究 我发现了卡尔曼滤波器 从我读到的有关它们的内容来看 它们似乎正是我想要使用的 然
  • Android 手机通话流

    Android 是否可以在发送电话数据之前对其进行实时操作 例如 通过创建一个缓冲区来记录语音然后发送 或者它是否不可访问 并且必须始终是 实时 抱歉 没有 Android 应用程序不支持通过电话与音频流交互的方式
  • Javascript:更改复选框上的标签背景颜色

    我试图根据复选框的选中 未选中状态更改表单中每个复选框中标签的背景颜色 到目前为止 我最初更改了它 但当我取消选中时它不会变回来 http jsfiddle net 7wnCL 4 http jsfiddle net 7wnCL 4 jav
  • 同步和异步通信到底如何工作

    我试图理解术语同步和异步通信 但我有点困惑 我试着深入研究一下this https stackoverflow com questions 1596589 why are asynchronous processes not called
  • Java 脚本无法在 html 电子邮件模板中运行

    我有一个场景 我需要使用 c 发送电子邮件 这可以使用 SMTP 轻松完成 但挑战是将 Web 服务合并到 html 邮件中 因此我在邮件正文中使用了 java 脚本来访问 Web 服务发出按钮点击声 作为一个 html 网页 它工作得很好
  • 以编程方式更改过期的 Oracle 数据库密码?

    在我工作的地方 一些数据库会从生产环境复制到测试环境 但 DBA 在复制后立即将 新 测试数据库上的所有密码设置为过期 以便不知道生产密码 因此 如果我运行 sqlplus 并使用特定用户名连接到测试数据库 它会立即提示我输入新密码 有没有
  • 使用 RDCOMClient 通过 R 中的 Outlook 发送电子邮件附件

    我正在运行每日分析 生成一个我想通过我的 Outlook 电子邮件发送的文件 我使用的代码在这里 并且工作得很好 但它的附件部分从来没有工作过 library RDCOMClient OutApp lt COMCreate Outlook
  • 增加 Windows 上的堆栈大小 (GCC)

    有没有办法在使用 GCC 编译 链接时增加 Windows 应用程序的堆栈大小 IIRC 在 GCC 中 您可以向 ld 提供 stack bytes 参数 E g gcc Wl stack 16777216 o file exe file
  • Grails 外部配置。无法访问外部变量。总是[:]

    我无法让 文件夹 外部变量工作 我总是得到 我正在 Windows 下使用 Grails 进行开发 这就是为什么外部配置文件看起来像 file C path to file 我在另一个项目中使用外部配置没有问题 与下面显示的方式相同 我有这
  • 基于数组项获取集合给出“FAILED_PRECONDITION:查询需要索引”[重复]

    这个问题在这里已经有答案了 我试图获取所有具有 数学 标签的问题 但它没有成功 而是转移到失败的监听器 db collection questionCollection orderBy questionID Query Direction
  • 如何从 SQuirreL SQL 调用带有 OUT 参数的 DB2 存储过程?

    我真的很喜欢 SQuirreL SQL 作为 SQL 查询工具 但我一直无法让它调用我们的 AS 400 DB2 数据库中的存储过程 我总是收到错误 设置或注册的参数值的数量与参数的数量不匹配 我已经仔细检查了参数的数量 但没有运气 这是我
  • BufferedReader 在 read() 处阻塞

    我试图创建一个简单的聊天程序 带有 服务器 和客户端 现在我的问题是程序在从服务器读取消息到客户端时阻塞 反之亦然 此示例解决了从客户端到服务器的消息问题 我在服务器端的示例 private Reader input private Wri
  • 使用 tomcat7 maven 插件中的“运行”目标的 Eclipse maven 运行配置不尊重默认上下文路径

    我正在本地开发一个 Web 服务 使用 maven 构建并部署到 tomcat 我正在使用 Maven 插件在本地运行 使用mvn tomcat run作为我的运行配置 现在 我的服务正在使用默认项目名称作为上下文路径进行部署 http l
  • 如果我在脚本仍在执行文件 I/O 操作时突然关闭脚本,会发生什么情况?

    这是我的问题 我正在编写一个脚本来检查我的网站是否运行正常 基本思想是每隔 5 分钟左右获取服务器响应时间和类似的东西 并且脚本每次检查后都会记录信息服务器状态 我知道在检查 写入日志的过程中关闭脚本是没有好处的 但我很好奇如果有很多服务器
  • SQLite 错误:无法删除WhereListIterator`1:它没有 PK

    我尝试在 Visual Studio 2012 中使用 SQLite C 从数据库中删除记录 每当我尝试删除记录时 都会收到以下错误 SQLite 错误 无法删除WhereListIterator 1 它没有 PK 我想使用两种不同的方法删
  • 使用本地 Python 脚本启动本地 PHP 脚本

    我正在编写的 Python 程序需要在 Python 进程之外启动本地 PHP 脚本 该程序还需要将参数传递给 PHP 脚本 到目前为止 这似乎启动了脚本 os system path to script here param param
  • 将 POJO 保存到 Jackrabbit JCR 中的最佳方法是什么?

    在 Jackrabbit 中 我经历了两种将 POJO 保存到存储库节点中以存储在 Jackrabbit JCR 中的方法 写我自己的层 和 使用 Apache Graffito 事实证明 编写我自己的代码既耗时又费力 必须编写并运行大量丑
  • 计算圆中的每个笛卡尔点

    我有一个数组 int lawn new int 980 1280 它存储草坪中叶片的高度值 在我的模拟中 我有一个机器人在草坪上行走并切割刀片 我的机器人呈圆形 直径为 rDiameter 坐标系是用 Double 完成的 我的草坪是用 I