求解三次方程以找到曲线上距某点最近的点

2024-02-27

Ok,

我有一个射弹,其位置定义为:

a.x = initialX + initialDX * time;

a.y = initialY + initialDY * time + 0.5 * gravtiy * time^2;

我希望能够预测该射弹将与我的环境中的哪些障碍物发生碰撞。我打算检查距离A曲线上距离该点最近的点P.

我想在这一点上A曲线的切线将垂直于向量AP,并且曲线的切线在A只是速度V此时的射弹。

AP dot V = 0

ap.x = initialX + initialDX * time - p.x;

ap.y = initialY + initialDY * time + gravity * time^2 - p.y;

v.x = initialDX;

v.y = initialDY + gravity * time;

=>

AP dot V =

( 0.5 * gravity^2 ) * t^3 +

( 1.5 * gravity * initialDY  ) * t^2 +

( initialDX^2 + initialDY^2 + gravity * ( initialY - p.y ) ) * t +

( initialDX * ( initialX - p.x ) + initialDY * ( initialY - p.y ) )

从这里我可以看出这是一个三次函数。我花了一些时间在网上研究,发现有一个通用方程似乎适用于某些值来寻找根。

这是我试图实施的过程。http://www.sosmath.com/algebra/factor/fac11/fac11.html http://www.sosmath.com/algebra/factor/fac11/fac11.html

a = 0.5 * gravity^2;

b = 1.5 * gravity * initialDY;

c = initialDX^2 + initialDY^2 + gravity * ( initialY - p.y );

d = initialDX * ( initialX - p.x ) + initialDY * ( initialY - p.y );

A = ( c - ( b * b ) / ( 3 * a ) ) / a;

B = -( d + ( 2 * b * b * b ) / ( 27 * a * a ) - ( b * c ) / ( 3 * a ) ) / a;

workingC = -Math.pow( A, 3 ) / 27;

u = ( -B + Math.sqrt( B * B - 4 * workingC ) ) / 2; // Quadratic formula

s = Math.pow( u + B, 1 / 3 );

t = Math.pow( u, 1 / 3 );

y = s - t;

x = y - b / ( 3 * a );

当我将 x 插回到曲线的原始方程中时,这应该给我A。这似乎对于某些值来说效果很好,但是当 p.y 高于某个值时,我没有正数可以在二次方程中取平方根。

我对数学没有足够的了解,无法理解为什么会发生这种情况,或者我可以采取什么措施来解决这个问题。

对此的任何帮助将不胜感激。

UPDATE:

我已经调整了我的算法来处理复杂的根,但是我仍然遇到麻烦。 如果判别式为负,我现在要做的就是:

a = 0.5 * gravity^2;

b = 1.5 * gravity * initialDY;

c = initialDX^2 + initialDY^2 + gravity * ( initialY - p.y );

d = initialDX * ( initialX - p.x ) + initialDY * ( initialY - p.y );

A = ( c - ( b * b ) / ( 3 * a ) ) / a;

B = -( d + ( 2 * b * b * b ) / ( 27 * a * a ) - ( b * c ) / ( 3 * a ) ) / a;

workingC = -Math.pow( A, 3 ) / 27;

discriminant = B * B - 4 * workingC;

then if discriminant < 0;

uc = new ComplexNumber( -B / 2, Math.sqrt( -discriminant ) / 2 ); 

tc = uc.cubeRoot( ); 

uc.a += B;

sc = uc.cubeRoot( ); 

yc = sc - tc; 

yc.a -= b / ( 3 * a ); 

x = -d / ( yc.a * yc.a + yc.b * yc.b ); 

由于某种原因,这仍然没有给我预期的结果。这里有什么明显错误的地方吗?


实数多项式可以有复数根,如果根不是实数,它们会以共轭对的形式出现。

这意味着三次方始终至少有一个实根。

现在,如果您使用您的方法获得复数根,您可以尝试获得共轭,乘除三次常数,取倒数以获得实根。

因此,如果您必须取 -ve 数的平方根,那么它与将其模数的平方根乘以虚数“i”相同。

因此,如果将根表示为 (m,n) 表示复数 m + i名词那么另一个根是 m - in = (m, -n) 并且 m 和 n 是实数。

三次方可写为 P(x) = (x^2 - 2m + (m^2 + n^2))(x-r)。

因此,如果 P(x) = x^3 - a_1 *x^2 + a_2*x - a_3,则我们有 r = a_3/(m^2 + n^2) (a_3 是根的乘积,其中是 r(m^2+n^2))

获得 r 的更简单方法是使用公式 r = a_1 - 2m(a_1 是根之和,即 r+2m)。

查看:http://en.wikipedia.org/wiki/Complex_number http://en.wikipedia.org/wiki/Complex_number

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

求解三次方程以找到曲线上距某点最近的点 的相关文章

  • ggplot中的控制点边框厚度

    使用ggplot时 我可以设置shape到 21 25 以获得具有内部独立设置的形状 fill 和边界 col 颜色 如下所示 df lt data frame id runif 12 x 1 12 y runif 12 ggplot df
  • 将系数名称转换为 R 中的公式

    当使用包含因子的公式时 拟合模型将系数命名为 XY 其中 X 是因子的名称 Y 是因子的特定级别 我希望能够根据这些系数的名称创建一个公式 原因 如果我将套索拟合到稀疏设计矩阵 如下所示 我想创建一个仅包含非零系数项的新公式对象 requi
  • 在公式中显示字符串,而不是在 lm fit 中显示为变量

    我无法解决当lm sformula 执行后 它不显示分配给的字符串sformula 我有一种感觉 这是 R 处理函数参数的通用方式 而不是特定于线性回归 下面通过例子来说明这个问题 示例 1 有不受欢迎的 output lm formula
  • Excel 公式优化

    我不是 Excel 专家 经过一些研究 我想出了这个公式来查看不同时间的两组相同数据 然后 它会显示最新数据列表中但不在旧列表中的新条目 这是我的公式 IF ROWS L 4 L8 lt SUMPRODUCT ISNA MATCH E 1
  • Angular - 单击时使用动态 ID 专注于输入

    有很多类似的问题 但我还没有找到真正的重复问题来回答我的问题 如果我错过了一些东西 我深表歉意 我有一个包含多个输入 按钮的页面 重复相同的组件 并且需要在单击按钮时关注正确的输入 我尝试过 elementRef nativeElement
  • 错误:获取临时地址 [-fpermissive]

    我已经研究了这个问题几个小时 但毫无结果 基本上我有 struct rectangle int x y w h rectangle player RegionCoordinates Region Coord rectangle temp t
  • 多边形中的点

    我正在尝试解决一些 SPOJ 问题https www spoj pl problems FSHEEP https www spoj pl problems FSHEEP 我们必须找出点是否在多边形内部 正如我们所看到的 它不是凸多边形 问题
  • 将字符串解析为公式的库,适用于 Windows Phone 7

    是否有任何 NET 库可以将字符串解析为公式 IE 如果用户输入 2 5 2 图书馆就能计算出结果吗 编辑 最好是能够与 Windows Phone 7 一起使用而无需太多摆弄的东西会很好 NCalc http ncalc codeplex
  • QPainterPath 与直线的交点(通过 x 求 QPainterPath y)

    我有 QPainterPath 我需要通过 x 找到 QPainterPath 的 y 坐标 我在 QPainterPath 中找到了 intersected 方法 因此 我创建了新的 QPainterPath 它是具有 x 坐标的从路径边
  • 使用 LINQ 按距离过滤点 XY

    我有一个 XY 点列表 我想按给定距离对它们进行分组 假设它们之间距离为 x 的所有点都应分组在不同的列表中 基本上 如果我有 A 0 0 B 0 1 C 0 2 我想对 maxDistance 为 1 的所有点进行分组 以获得 A B C
  • 如何将字符串公式变成“真正的”公式?

    I have 0 4 A1在单元格中 作为字符串 如何将这个 字符串公式 转换为真正的公式并在另一个单元格中计算其值 Evaluate可能适合 http www mrexcel com forum showthread php t 6206
  • Hibernate:使用公式进行多对一

    我希望有人能帮我找到答案 我正在使用旧数据库 无法更改任何预先存在的表 因为其他应用程序依赖于它们 我有三个主要的现有表 A B C A 有一个引用 B 的列 多对一关系 问题是它应该与 C 而不是 B 有关系 所以我创建了一个 1 映射
  • 如何通过 glm.mids 使用构造公式

    处理大量变量并使用构造公式来处理它们 通过paste0 使用传递给函数的变量 我偶然发现了一个我无法弄清楚的问题 错误 用一个玩具示例最简单地解释 library mice imp2 mice nhanes So both these mo
  • 优化 Excel 公式 - SUMPRODUCT 与 SUMIFS/COUNTIFS

    根据一些网站的说法 SUMIFS 和 COUNTIFS 比 SUMPRODUCT 更快 例如 http exceluser com blog 483 excels sumifs or sumproduct which is faster h
  • 故事板的多个入口点

    我需要在启动时在 AppDelegate 中做出一系列决定 根据这些决定的结果 我需要转到故事板的特定部分 所以我的问题是 在不使用任何导航或选项卡控制器的情况下 我如何转到故事板的特定部分 OR 唯一受支持的选项是否具有多个故事板 对于每
  • 为什么 java.awt.Point 提供了设置和获取双精度数的方法,但将 x 和 y 存储为 int?

    正如您在 Oracle 文档中看到的java awt Point http docs oracle com javase 6 docs api java awt Point html x 和 y 存储为int 然而 getX and get
  • 为什么 pygame 上两个移动物体之间的碰撞不起作用?

    我正在用 pygame 做一个蛇游戏 游戏中有两条蛇 我想检测蛇头何时与另一条蛇身体碰撞 对两者都执行此操作 以及当两个头碰撞时的特殊情况 我目前正在做蛇头和另一条蛇身体之间的碰撞 如果其中一条蛇被冻结而另一条蛇在移动 则碰撞效果很好 但如
  • 如何生成圆形分布中的随机点

    我想知道如何生成出现在圆形分布中的随机数 我能够在矩形分布中生成随机点 以便这些点在 0 我将如何继续生成圆内的点 以便 x 500 2 y 500 2 import random import math radius of the cir
  • WPF 路径冲突检测?

    I have two hexagon shapes
  • SQLite3 数据库中的派生字段

    各位晚上好 今天想问一个关于SQLite3中的派生字段 也称为计算字段 的问题 利用存储在我的数据库中的两个值 重量 和 距离 我知道可以利用它们来执行计算 以利用需要这两个值的公式返回我想要的值 但是我想知道是否有一种方法可以通过 SQL

随机推荐

  • 将 BPMN 2.0 XML 导入 MS Visio 2010 或从 MS Visio 2010 导出 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想将 BPMN 图表从 Visio 2010 Premium 导出为 BPMN 2 0 XML 格式
  • 从 noflo 开始,从 nodejs 运行它

    我运行了一个简单的 noflo 示例来自诺弗洛 但我没有弄清楚 noflo 应该如何与节点和其他代码一起工作 起初我有这个 fbp 文件 In the graph we first need to define the nodes and
  • 非关联浮点加法示例

    我正在写一篇关于浮点数的文章 我在 Javascript 控制台中放入了一些简单的测试来尝试 我正在寻找非交换加法的示例 即 x y z z x y 如果您有一些有效的 x y z 值 谢谢 没有这样的例子 因为按照 IEEE 754 的定
  • 为什么在此示例中并行版本比顺序版本慢?

    在过去的几天里 我学习了一些关于并行性的知识 并且遇到了this http msdn microsoft com en us library dd460703 aspx例子 我将它与顺序 for 循环并排放置 如下所示 private st
  • Jenkins 作业窗口批量执行比 cmd.exe 中执行慢 20 倍

    我刚刚在 Windows 2012 Server o 上安装了 Jenkins 2 46 2 它作为系统服务运行 我创建了一个执行 Windows 批处理 bat 脚本来构建代码项目的作业 此批处理会执行 2 个 mingw32 make
  • 如何按数字对文件进行排序?

    我正在处理目录中的一些文件 需要对文件进行数字排序 我发现了一些关于排序的例子 特别是使用lambda模式 在wiki python org http wiki python org moin HowTo Sorting 我把它放在一起 i
  • 为什么 html5 视频循环每次迭代都会创建请求

    I have 禁用缓存勾选已删除 但每次视频循环迭代仍发出请求 仅在 chrome 上 What Initiator Otherchrome 检查器网络部分的意思是什么 第一次从主机加载视频 但之后所有请求都从主机加载Other 每次迭代视
  • SAPUI5图标存储在哪里?

    我有一个基于 SAPUI5 的应用程序 在其中使用 SAP 站点下图标的 url 设置按钮图标https sapui5 hana ondemand com iconExplorer html https sapui5 hana ondema
  • 将父元素替换为其内容

    我正在尝试做与这个问题类似 相同的事情 如何在JavaScript中仅删除父元素而不删除其子元素 https stackoverflow com questions 170004 how to remove only the parent
  • React router dom:路由和路由器根本不工作

    我对反应相当陌生 并尝试使用react router dom进行重定向 我按照文档做了所有事情 但我的代码似乎不起作用 我收到一条关于找不到元素的错误 我不明白是什么原因造成的 另外 我现在只是尝试使用地址栏访问该页面 而不是使用任何按钮或
  • Jquery datepicker beforeShowDay 初始化后

    当我在初始化后设置 beforeShowDay 时 它不起作用 dater datepicker dater datepicker beforeShowDay renderCalendarCallback 当我第一次更改并在 ShowDay
  • Laravel 从公共目录中删除目录

    如何从公用文件夹中删除目录 现在我尝试这个 Storage deleteDirectory directory 但这看起来在存储文件夹中 您可以使用Illuminate Filesystem Filesystem为了这 Laravel 提供
  • 消除作为模板参数传递的重载成员函数指针的歧义

    我正在尝试重新创建观察者模式我可以完美地将参数转发给观察者的给定成员函数 如果我尝试传递一个地址成员函数其中有多次覆盖 它无法根据参数推导出正确的成员函数 include
  • python的跨平台usb模块?

    我有兴趣在 python 中使用 USB 设备进行一些跨平台工作 关于可以执行此类操作的模块有任何提示或建议吗 我浏览了 SF 和 googlecode 但运气不佳 thanks ct PyUSB http pyusb berlios de
  • QPainterPath 与直线的交点(通过 x 求 QPainterPath y)

    我有 QPainterPath 我需要通过 x 找到 QPainterPath 的 y 坐标 我在 QPainterPath 中找到了 intersected 方法 因此 我创建了新的 QPainterPath 它是具有 x 坐标的从路径边
  • 如何使用java获取weka中的最近邻居

    我一直在尝试使用与 weka 机器学习库一起使用的 Ibk 最近邻算法 我知道如何对实例进行分类 但我想实现协同过滤功能 因此我需要实际获取最接近感兴趣对象的实际对象列表 在 weka 中我实际上该如何使用它的 java API 来做到这一
  • 在Erlang中如何获取客户端的ip和端口?

    在下面的代码中 服务器正在侦听端口 2345 接受客户端的连接后 它返回 ok Socket start gt ok Listen gen tcp listen 2345 binary packet 4 reuseaddr true act
  • 如何在继续之前等待经过dispatch_async?

    我正在执行一系列的dispatch async 我只想在它们全部完成后更新UI 问题是dispatch async 中的方法在单独的线程中调用某些内容 因此它会在数据完全加载之前返回 并且在加载所有内容之前调用dispatch group
  • PHP-正则表达式检查字符串是否有中文字符

    我有字符串 str我想检查它的内容是否有汉字 true false str 赕就可消垻 只有当所有方块都被消垻时才可以过关 你能帮我么 谢谢 阿德里安 您可以使用 unicode 字符类http www regular expression
  • 求解三次方程以找到曲线上距某点最近的点

    Ok 我有一个射弹 其位置定义为 a x initialX initialDX time a y initialY initialDY time 0 5 gravtiy time 2 我希望能够预测该射弹将与我的环境中的哪些障碍物发生碰撞