Java 2D:将点 P 移动到靠近另一个点一定距离?

2023-12-25

将 Point2D.Double x 距离移近另一个 Point2D.Double 的最佳方法是什么?

编辑:尝试编辑,但因维护而停机。不,这不是作业

我需要将飞机 (A) 移向跑道末端 (C) 并将其指向正确的方向(角度 a)。

替代文本http://img246.imageshack.us/img246/9707/planec.png http://img246.imageshack.us/img246/9707/planec.png

这是我到目前为止所拥有的,但看起来很混乱,做这样的事情的通常方法是什么?

    //coordinate = plane coordinate (Point2D.Double)
    //Distance = max distance the plane can travel in this frame

    Triangle triangle = new Triangle(coordinate, new Coordinate(coordinate.x, landingCoordinate.y),  landingCoordinate);

    double angle = 0;

    //Above to the left
    if (coordinate.x <= landingCoordinate.x && coordinate.y <= landingCoordinate.y)
    {
        angle = triangle.getAngleC();
        coordinate.rotate(angle, distance);
        angle = (Math.PI-angle);
    }
    //Above to the right
    else if (coordinate.x >= landingCoordinate.x && coordinate.y <= landingCoordinate.y)
    {
        angle = triangle.getAngleC();
        coordinate.rotate(Math.PI-angle, distance);
        angle = (Math.PI*1.5-angle);
    }

    plane.setAngle(angle);

三角形类可以在以下位置找到http://pastebin.com/RtCB2kSZ http://pastebin.com/RtCB2kSZ

请记住,飞机可以处于跑道点周围的任何位置


您可以将两个轴上的差异最小化一个百分比(这取决于您想要移动点的程度)。

例如:

Point2D.Double p1, p2;
//p1 and p2 inits

// you don't use abs value and use the still point as the first one of the subtraction
double deltaX = p2.getX() - p1.getX();
double deltaY = p2.getY() - p1.getY();

// now you know how much far they are
double coeff = 0.5; //this coefficient can be tweaked to decice how much near the two points will be after the update.. 0.5 = 50% of the previous distance

p1.setLocation(p1.getX() + coeff*deltaX, p1.getY() + coeff*deltaY);

所以你搬家了p1一半走向p2。好的事情要避免abs也就是说,如果您选择哪个点将被移动,哪个点将保持静止,您可以避免 if 测试并仅使用原始系数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 2D:将点 P 移动到靠近另一个点一定距离? 的相关文章

  • 带有 Android 支持库 v7 的 Maven Android 插件

    我使用 maven android plugin 构建我的 android 应用程序 它依赖于 android 支持库 v4 和 v7 由于我没有找到如何从developer android com下载整个sdk 因此我无法使用maven
  • Android 中的列表(特别是 RecyclerView 和 CardView)如何工作

    请原谅我问这个问题 但我是 Android 开发新手 尽管我正在尝试了解developer android com 网站上的基础知识 但大多数示例 即使他们说它们是为 Android Studio 构建的 尚未设置为使用 Gradle 因此
  • Oracle Java 教程 - 回答问题时可能出现错误

    我是 Java 新手 正在阅读 Oracle 教程 每个部分之后都有问题和答案 我不明白一个答案中的一句话 见下面的粗体线 来源是https docs oracle com javase tutorial java javaOO QandE
  • 当路径的点超出视野时,Android Canvas 不会绘制路径

    我在绘制路径时遇到了 Android Canvas 的一些问题 我的情况是 我有一个相对布局工作 如地图视图 不使用 google api 或类似的东西 我必须在该视图上绘制一条路径 canvas drawPath polyPath bor
  • Base36 编码字符串?

    我一直在网上查找 但找不到解决此问题的方法 在 Python Ruby 或 Java 中 如何对以下字符串进行 Base 36 编码 nOrG9Eh0uyeilM8Nnu5pTywj3935kW 5 Ruby 以 36 为基数 s unpa
  • (Java) App Engine 中的静态文件无法访问

    The 示例文档 http code google com appengine docs java gettingstarted staticfiles html表示您只需将文件放在 war 或子目录 中 并且应该可以从主机访问它们 只要它
  • Reactive Spring 不支持 HttpServletRequest 作为 REST 端点中的参数?

    我创建了一个 RestController 如下所示 RestController public class GreetingController RequestMapping value greetings method RequestM
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • Android 中 localTime 和 localDate 的替代类有哪些? [复制]

    这个问题在这里已经有答案了 我想使用从 android API 获得的长值 该值将日期返回为长值 表示为自纪元以来的毫秒数 我需要使用像 isBefore plusDays isAfter 这样的方法 Cursor managedCurso
  • 为自定义驱动程序创建 GraphicsDevice

    我正在开发一个在嵌入式系统中使用 Java 的项目 我有用于屏幕和触摸输入的驱动程序 以及用于文本输入的虚拟键盘 我的屏幕驱动程序有一个Graphics2D您可以绘制的对象和repaint Rectangle 更新方法 类似地 触摸驱动器能
  • 在 MongoDB 和 Apache Solr 之间同步数据的简单方法

    我最近开始使用 MongoDB 和 Apache Solr 我使用 MongoDB 作为数据存储 并且希望 Apache Solr 为我的数据创建索引 以实现应用程序中的搜索功能 经过一些研究 我发现 基本上有两种方法可以在 MongoDB
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 添加到列表时有没有办法避免循环?

    我想知道这样的代码 List
  • Java:如何确定文件所在的驱动器类型?

    Java 是否有一种独立于平台的方法来检测文件所在的驱动器类型 基本上我有兴趣区分 硬盘 可移动驱动器 如 USB 记忆棒 和网络共享 JNI JNA 解决方案不会有帮助 可以假设 Java 7 您可以使用 Java 执行 cmd fsut
  • 使用Java绘制维恩图

    我正在尝试根据给定的布尔方程绘制维恩图 例如 a AND b AND c我想在 Android 手机上执行此操作 因此我需要找到一种使用 Java 来执行此操作的方法 我找到了一个完美的小部件 它可以完成我在这方面寻找的一切布尔代数计算器
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • 如何让 Emma 或 Cobertura 与 Maven 一起报告其他模块中源代码的覆盖率?

    我有一个带有 Java 代码的多模块 Maven 设置 我的单元测试在其中一个模块中测试多个模块中的代码 当然 这些模块具有相互依赖性 并且在测试执行之前根据需要编译所有相关模块中的代码 那么 如何获得整个代码库覆盖率的报告 注意 我不是问
  • 如何处理 StaleElementReferenceException

    我正在为鼠标悬停工作 我想通过使用 for 循环单击每个链接来测试所有链接的工作条件 在我的程序中 迭代进行一次 而对于下一次迭代 它不起作用并显示 StaleElementReferenceException 如果需要 请修改代码 pub
  • Hadoop NoSuchMethodError apache.commons.cli

    我在用着hadoop 2 7 2我用 IntelliJ 做了一个 MapReduce 工作 在我的工作中 我正在使用apache commons cli 1 3 1我把库放在罐子里 当我在 Hadoop 集群上使用 MapReduceJob
  • Java 的 PriorityQueue 与最小堆有何不同?

    他们为什么命名PriorityQueue如果你不能插入优先级 它看起来与堆非常相似 有什么区别吗 如果没有区别那为什么叫它PriorityQueue而不是堆 默认的PriorityQueue是用Min Heap实现的 即栈顶元素是堆中最小的

随机推荐

  • 使用 foreach 循环更新 std::list 中的每个值 C++

    我有一个std list在 C 中 我正在尝试使用for Type t list 更新每个对象的值的操作 所以我有一个名为球的列表 每个球都有一个位置 我的 for 循环代码是 for OpenGLView AssetInstance ba
  • 服务器使用 gmail smtp 发送电子邮件获取警报

    我做了类似的事情this https stackoverflow com questions 712392 send email using gmail smtp server from php page使我的网络应用程序通过 gmail
  • 尝试使用私有框架 IOSurface 进行屏幕捕获似乎不再适用于 iOS 9

    我正在为客户开发一个现有的 非应用程序商店 应用程序 该应用程序使用 IOSurface 私有框架在后台进行屏幕捕获 这里有一些关于 SO 的线程概述了该技术 以及几个开源示例项目 同样 这是客户端使用的内部应用程序 它不适用于应用程序商店
  • 如何清除我的漂浮物?

  • /bin/sh 的 .bashrc 是否有替代方案?

    我需要一个在启动时运行的脚本 bin sh 如同 bashrc for bin bash 有什么办法可以做到这一点吗 EDIT 我都尝试过 etc profile and profile 我写echo hello world 到两个文件 这
  • 重新创建 Win32 标头是个好主意吗?

    我发现自己最近针对 Win32 编写了更多的 C C 代码 并且来自 C 背景的我对完全一致的 干净代码 产生了痴迷 因此从漂亮的 System 命名空间回到了构成 Win32 API 头文件的 defines 的混杂有点文化冲击 在阅读了
  • std::mutex 锁在覆盖 new 运算符时挂起

    我们有一个与我们的产品之一一起使用的内部内存管理器 内存管理器覆盖new and delete运算符 并且在单线程应用程序中运行良好 然而 我现在的任务是让它也适用于多线程应用程序 据我了解 以下伪代码应该可以工作 但即使使用try loc
  • 在 MYSQL / PHP 中设置最大执行时间

    我有一个 XML 文档 其中包含大约 48 000 个子文档 50MB 我运行一个 INSERT MYSQL 查询 为每个子项创建新条目 问题是由于它的大小 需要花费很多时间 执行后我收到这个 Fatal error Maximum exe
  • 如何将十六进制字符串转换为双精度型?

    我从 BLE 获取 0x0000 到 0x01c2 范围内的十六进制值到我的手机 aString 为了将其绘制在图表中 我必须将其转换为double 我已经尝试过这个方法 https stackoverflow com a 10708508
  • 在 bash 中查找并删除 .txt 文件 [重复]

    这个问题在这里已经有答案了 最近 我的外部硬盘驱动器上存有我的照片 大多数都在 DVD 上 但是 因为某些分区被破坏了 幸运的是 我能够使用 PhotoRec 另一个 Unix 分区实用程序 和 PDisk 将所有内容重新组合在一起 Pho
  • 在 Dart 中监听 JS CustomEvent

    我知道我的问题并不新鲜 但我在这里和互联网上找到的所有解决方案都不起作用 或者 我正在做一些完全错误的事情 我需要在 Dart 和 JS 之间创建通信 并且我很想使用事件 因为这个想法看起来很简洁 所以 我尝试了这个教程 https dar
  • SQL Server 2008 CTE 递归

    我正在尝试使用 SQL Server 2008 的 CTE 来执行我认为是困难的递归 我似乎无法理解这个问题 在下面的示例中 您可以假设固定深度为 3 不会低于该深度 在现实生活中 深度 更深 但仍然是固定的 在这个例子中我试图简化它一些
  • Scala 集合转发器和代理的用例

    Scala 的集合库包含转发器IterableForwarder http www scala lang org api current scala collection generic IterableForwarder html Tra
  • 从python查找Windows上程序的安装目录

    python 程序需要找到 openoffice org 的安装位置 该软件安装在 Windows XP 计算机上 做这个的最好方式是什么 您可以使用 winregWindows 上的模块 首先找到注册表中的路径 例如启动regedit e
  • Docker Compose 主机名命令不起作用

    我无法获取 Docker Composehostname https docs docker com compose compose file domainname hostname ipc mac address privileged r
  • Android 中的错误 -- 无法找到以下项的检测信息:ComponentInfo

    例如 我有一个应用程序将调用联系人并且必须选择其中一个联系人 但它并没有完全按照我想要的方式做 它向我显示错误Unable to find instrumentation info for ComponentInfo com sample
  • QSplitter 在 QWidget 和 QTabWidget 之间变得无法区分

    我将 QWidget 和 QTabWidget 放在一个水平拆分器中并排放置 并且分离器失去了形状 只有将鼠标悬停在分离器上才能知道有分离器 如何让它可见 Thanks 由于 QSplitterHandle 大多数人认为是 分割器 是从 Q
  • VS 2010 Tools 的 gacutil.exe 在哪里安装程序集?

    我使用 Visual Studio 2010 命令提示符的 gacutil exe 来安装程序集 我希望将程序集添加到C WINDOWS assemblies 但它被添加到C WINDOWS Microsoft NET assembly G
  • 如何在 IntelliJ 中运行同一个应用程序两次?

    我正在使用 IntelliJ 开发我的客户端 服务器应用程序 并且刚刚发现了Compounds 基本上我可以同时运行我的客户端和服务器 并且每次我想测试时它都可以节省我无用的操作 但是 我想用 2 个客户端和 1 个服务器来测试我的应用程序
  • Java 2D:将点 P 移动到靠近另一个点一定距离?

    将 Point2D Double x 距离移近另一个 Point2D Double 的最佳方法是什么 编辑 尝试编辑 但因维护而停机 不 这不是作业 我需要将飞机 A 移向跑道末端 C 并将其指向正确的方向 角度 a 替代文本http im