在已知缺失时间间隔之间插入 3D 坐标

2024-01-01

数据是空间中的路径。我有 3D 位置数据 (x,y,z) 和记录位置点的时间。

x、y 和 z 坐标是物体在 3D 空间中移动的点位置。时间值是记录每个点的时间(从 0 开始)。

x     y    z    time(s)
0.1   2.2  3.3  0
2.4   2.4  4.2  0.3
4.5   2.5  1.8  0.6

我最终会错过一些录音活动。 (这是已知的并被接受为正确的)并且数据流将以不同的时间间隔继续:

x     y    z    time(s)
0.1   2.2  3.3  0
2.4   2.4  4.2  0.3
//missing x,y,z data point at time 0.6
//missing x,y,z data point at time 0.9
4.5   2.5  1.8  1.2
...
...

请注意,数据已简化。我的目标是在已知的缺失时间插入缺失的 3D 点。我研究了各种插值技术,但我不完全确定哪种插值方法适合我的问题。

1)有人能简洁地解释一下这是什么问题吗?我的数学非常生疏,我不知道如何正确描述它,这导致我研究可能不合适的插值技术。

2) Update 1由于我没有在 3D 空间中使用网格,因此三次三次插值不应适用于此。我正在研究轨迹。我找到了一个三三次插值实现 https://commons.apache.org/proper/commons-math/javadocs/api-3.4.1/org/apache/commons/math3/analysis/interpolation/TricubicInterpolator.html在 Apache math3 commons 中,但是我不确定这是否是我所需要的。如果你看一下它所采用的参数,它需要一个我不确定的 double[][][] fval 矩阵。

3) 如果不是最适合 Java,那么插值此数据的最佳工具是什么?

更新 2 - 有关 Spectre 解决方案的问题

在您的编辑中,您提供了有关“匹配关节点的一阶导数”的以下提示:

让我们定义我们的t=<-2,+2>并像这样对控制点进行采样(实际上并不重要,它如何影响系数幅度并包括-1,0,1将大大简化方程):

p(-2) = p0
p(-1) = p1
p( 0) = p2
p( 1) = p3

现在假设我们要对区间上的所有点进行插值t=<0,1>所以之间的所有点p2 and p3。我们想要连续的分段曲线,因此关节点的一阶导数应该匹配。我们在左侧多了一个控制点,因此二阶导数也可以在那里匹配:

p'(0) = 0.5*((p3-p2)+(p2-p1)) = 0.5*(p3-p1)
p'(1) = 0.5*((p4-p3)+(p3-p2)) = 0.5*(p4-p2)
p''(0)= 0.5*(((p2-p1)-(p1-p0))+((p4-p3)-(p3-p2)))
      = 0.5*((p2-2*p1+p0)+(p4-2*p3+p2))
      = 0.5*(p0+p4)-p1+p2-p3

希望我在第二次推导中没有犯任何愚蠢的错误。现在只需替换p(t)已知控制点并形成方程组并计算a0,a1,a2,a3,a4代数地从p0,p1,p2,p3,p4.

1)你的意思是joint points?

2)去哪里

p'(0) = 0.5*((p3-p2)+(p2-p1)) = 0.5*(p3-p1)
p'(1) = 0.5*((p4-p3)+(p3-p2)) = 0.5*(p4-p2)

来自?它们有什么关系吗p(0) = p2 and p(1) = p3?它们可以是您选择的任何东西吗?

它可以重写为p'(0) = 0.5*((p(3)-p(0)) + (p(0)-p(-1))正确的?我不清楚为什么要这样做。甚至为什么会这样can be done

2b)类似的问题

p''(0)= 0.5*(((p2-p1)-(p1-p0))+((p4-p3)-(p3-p2)))
      = 0.5*((p2-2*p1+p0)+(p4-2*p3+p2))
      = 0.5*(p0+p4)-p1+p2-p3

但我假设澄清问题 2) 将减轻我对 2b) 的歧义,因为我也不知道方程来自哪里。

接下来的内容非常简单,那就是方程组


由于您的数据很可能只是一些平滑曲线采样点,我将使用三次插值多项式,如下所示:

  • C#/Unity3D 中的分段线性整数曲线插值 https://stackoverflow.com/a/22806242/2521214

曲线属性使得它经过所有控制点(t={-1,0,+1,+2}),内部控制点的方向(一阶导数)是展位侧面的平均值以平滑连接(类似于Bezier立方)。

算法是这样的:

  1. 失分前得 2 分,失分后得 2 分

    让我们打电话给他们p0,p1,p2,p3理想情况下,它们应该是时间等距的……并按时间排序。

  2. 计算每个轴的 4 个系数

    d1=0.5*(p2.x-p0.x);
    d2=0.5*(p3.x-p1.x);
    ax0=p1.x;
    ax1=d1;
    ax2=(3.0*(p2.x-p1.x))-(2.0*d1)-d2;
    ax3=d1+d2+(2.0*(-p2.x+p1.x));
    
    d1=0.5*(p2.y-p0.y);
    d2=0.5*(p3.y-p1.y);
    ay0=p1.y;
    ay1=d1;
    ay2=(3.0*(p2.y-p1.y))-(2.0*d1)-d2;
    ay3=d1+d2+(2.0*(-p2.y+p1.y));
    
    d1=0.5*(p2.z-p0.z);
    d2=0.5*(p3.z-p1.z);
    az0=p1.z;
    az1=d1;
    az2=(3.0*(p2.z-p1.z))-(2.0*d1)-d2;
    az3=d1+d2+(2.0*(-p2.z+p1.z));
    
  3. 设置参数t=<0,1>对应于缺失时间的值

    所以如果你选择积分p0,p1,p2,p3与时代t0,t1,t2,t3那么缺失的时间tm对应参数:

    t = (tm-t1)/(t2-t1);
    
  4. 计算缺失点。

    x=ax0+ax1*t+ax2*t*t+ax3*t*t*t
    y=ay0+ay1*t+ay2*t*t+ay3*t*t*t
    z=az0+az1*t+az2*t*t+az3*t*t*t
    

如果通过推导类似的方程或拟合还不够,您可以使用更高阶的多项式。另请看一下这个:

  • 如何产生多点线性插补? https://stackoverflow.com/a/30438865/2521214

[Edit1]构造自己的多项式

您的评论的答案在[edit2] of 三次样条和 Catmull 样条对图像的影响 https://stackoverflow.com/a/23627081/2521214这也在上面的先前链接中链接。以类似的方式制作 4 次插值多项式,您将有 5 个点(p0,p1,p2,p3,p4)和方程:

p(t)= a0 + a1*t + a2*t*t + a3*t*t*t + a4*t*t*t*t
p'(t) =    a1 + 2*a2*t + 3*a3*t*t + 4*a4*t*t*t
p''(t) =        2*a2   + 6*a3*t   +12*a4*t*t

让我们定义我们的t=<-2,+2>并像这样对控制点进行采样(实际上并不重要,它如何影响系数幅度并包括-1,0,1将大大简化方程):

p(-2) = p0
p(-1) = p1
p( 0) = p2
p( 1) = p3
p( 2) = p4

现在假设我们要对区间上的所有点进行插值t=<0,1>所以之间的所有点p2 and p3。我们想要连续的分段曲线,因此关节点的一阶导数应该匹配。我们在左侧多了一个控制点,因此二阶导数也可以在那里匹配:

p'(0) = 0.5*((p3-p2)+(p2-p1)) = 0.5*(p3-p1)
p'(1) = 0.5*((p4-p3)+(p3-p2)) = 0.5*(p4-p2)
p''(0)= 0.5*(((p2-p1)-(p1-p0))+((p4-p3)-(p3-p2)))
      = 0.5*((p2-2*p1+p0)+(p4-2*p3+p2))
      = 0.5*(p0+p4)-p1+p2-p3

希望我在第二次推导中没有犯任何愚蠢的错误。现在只需替换p(t)已知控制点并形成方程组并计算a0,a1,a2,a3,a4代数地从p0,p1,p2,p3,p4。提示使用t=0,t=+1 and t=-1所以你会得到这些的线性方程。例如:

p( 0) = p2 = a0 + a1*0 + a2*0*0 + a3*0*0*0 + a4*0*0*0*0
        p2 = a0

如你看到的a0计算起来非常简单,可以用于推导:

p'(0) = 0.5*(p3-p1)          = a1 + 2*a2*0 + 3*a3*0*0 + 4*a4*0*0*0
p''(0)= 0.5*(p0+p4)-p1+p2-p3 =      2*a2   + 6*a3*0   +12*a4*0*0
-------------------------------------------------------------------
        0.5*(p3-p1)          = a1  
        0.5*(p0+p4)-p1+p2-p3 =      2*a2
-------------------------------------------------------------------
        0.5*(p3-p1)                 = a1  
        0.25*(p0+p4)-0.5*(p1+p2-p3) = a2
-------------------------------------------------------------------

Now use t=+1 and t=-1并计算a3,a4。您可以设置关节点导数以满足您的特定需求(不仅仅是左右导数的平均值),但形成像您这样的连续曲线是最好的(根据我的经验)。

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

在已知缺失时间间隔之间插入 3D 坐标 的相关文章

  • 使用 WebDriver 单击新打开的选项卡中的链接

    有人可以在这种情况下帮助我吗 场景是 有一个网页 我仅在新选项卡中打开所有指定的链接 现在我尝试单击新打开的选项卡中的任何一个链接 在下面尝试过 但它仅单击主 第一个选项卡中的一个链接 而不是在新选项卡中 new Actions drive
  • Oracle Java 教程 - 回答问题时可能出现错误

    我是 Java 新手 正在阅读 Oracle 教程 每个部分之后都有问题和答案 我不明白一个答案中的一句话 见下面的粗体线 来源是https docs oracle com javase tutorial java javaOO QandE
  • 如何使用 JAVA 代码以编程方式捕获线程转储?

    我想通过 java 代码生成线程转储 我尝试使用 ThreadMXBean 为此 但我没有以正确的格式获得线程转储 因为我们正在使用jstack命令 请任何人提供一些帮助 他们是否有其他方式获取线程转储 使用任何其他 API 我想要的线程转
  • HAProxy SSL终止+客户端证书验证+curl/java客户端

    我希望使用我自己的自签名证书在 HAProxy 上进行 SSL 终止 并使用我创建的客户端证书验证客户端访问 我通过以下方式创建服务器 也是 CA 证书 openssl genrsa out ca key 1024 openssl req
  • 将SQL数据引入jquery availabletag

    我正在尝试制作自动完成文本框 但如何将 SQL 数据包含到 jquery 可用标记并循环它 我无法根据以下代码执行该功能 任何帮助 将不胜感激 谢谢 这是我的预期输出 预期结果演示 http jsfiddle net VvETA 71 jq
  • 删除优先级队列的尾部元素

    如何删除优先级队列的尾部元素 我正在尝试使用优先级队列实现波束搜索 一旦优先级队列已满 我想删除最后一个元素 优先级最低的元素 Thanks 没有简单的方法 将元素从原始元素复制到新元素 最后一个除外 PriorityQueue remov
  • 从 MS Access 中提取 OLE 对象(Word 文档)

    我有一个 Microsoft Access 数据库 其中包含一个包含 Microsoft Word 文档的 OLE 对象字段 我试图找到代码来检索保存在 OLE 对象中的文件 以便用户可以从我的 JavaFx 应用程序中的按钮下载它 但没有
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • 在 Struts 2 中传递 URL 参数而不使用查询字符串

    我想使用类似的 URL host ActionName 123 abc 而不是像这样传递查询字符串 host ActionName parm1 123 parm2 abc 我怎样才能在 Struts 2 中做到这一点 我按照下面的方法做了
  • 您建议使用哪种压缩(GZIP 是最流行的)servlet 过滤器?

    我正在寻找一个用于大容量网络应用程序的 GZIP servlet 过滤器 我不想使用容器特定的选项 要求 能够压缩响应负载 XML Faster 已在大批量应用的生产中得到验证 应适当设置适当内容编码 跨容器移植 可选择解压缩请求 谢谢 我
  • 如何在java Spring Boot中实现通用服务类?

    我有许多具有重复代码的服务 我想知道如何实现通用服务 以便我的所有服务都可以扩展它 服务接口示例 重复代码 Service public interface IUserService List
  • 为什么Iterator接口没有add方法

    In IteratorSun 添加了remove 方法来删 除集合中最后访问的元素 为什么没有add方法来向集合中添加新元素 它可能对集合或迭代器产生什么样的副作用 好的 我们开始吧 设计常见问题解答中明确给出了答案 为什么不提供 Iter
  • 如何删除日期对象的亚秒部分

    当 SQL 数据类型为时间戳时 java util Date 存储为 2010 09 03 15 33 22 246 如何在存储记录之前将亚秒设置为零 例如 在本例中为 246 最简单的方法是这样的 long time date getTi
  • 如何停止执行的 Jar 文件

    这感觉像是一个愚蠢的问题 但我似乎无法弄清楚 当我在 Windows 上运行 jar 文件时 它不会出现在任务管理器进程中 我怎样才能终止它 我已经尝试过 TASKKILL 但它对我也不起作用 On Linux ps ef grep jav
  • Play.application() 的替代方案是什么

    我是 Play 框架的新手 我想读取conf文件夹中的一个文件 所以我用了Play application classloader getResources Data json nextElement getFile 但我知道 play P
  • 避免 Java 中的重复导入:继承导入?

    有没有办法 继承 导入 Example 常见枚举 public enum Constant ONE TWO THREE 使用此枚举的基类 public class Base protected void register Constant
  • 我可以限制分布式应用程序发出的请求吗?

    我的应用程序发出 Web 服务请求 提供商处理的请求有最大速率 因此我需要限制它们 当应用程序在单个服务器上运行时 我曾经在应用程序级别执行此操作 一个对象跟踪到目前为止已发出的请求数量 并在当前请求超出允许的最大负载时等待 现在 我们正在
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • Java 的 PriorityQueue 与最小堆有何不同?

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

    我正在使用 JFreeChart 使用折线图绘制两个数据系列 XYSeries 复杂的因素是 其中一个数据系列的 y 值通常远高于第二个数据系列的 y 值 假设第一个系列的 y 值约为数百万数量级 而第二个数据系列的 y 值约为数百万数量级

随机推荐

  • 从 .tar.gz 将模块安装到 Anaconda

    当我想将模块安装到 Anaconda 时 我运行conda install 然而 现在我有一个 tar gz文件并想要安装它 怎么做 有多种方法可以实现此目的 我在这里描述一种方法 即使您的默认方法也应该相对简单python变量不是 ana
  • 更新应用商店错误 - 找不到启动故事板

    我的应用程序已在应用程序商店中发布 6 个月 我现在尝试发布更新 但在验证应用程序时遇到错误 找不到启动故事板 确保为 Info plist 中的键 UILaunchStoryboardName 指定不带文件扩展名的启动故事板文件名 我所做
  • 如何优化 TradingView Pine 脚本中的参数? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想优化 TradingView Pine 回测中的指标参数 这对于其他工具来说是可能的 但是当我在
  • 使用 ggplot 在 R 中绘制多个大型时间序列时出现问题

    我有一个包含 16 个独立时间序列的大型数据集 我想将它们绘制在 3x7 网格中 顶行是每个以 IN 结尾的时间序列 底行是每个以 OUT 结尾的时间序列 在中间行中 我将重复对应于每个 IN OUT 对的以 RN 结尾的两个时间序列中的每
  • PDOStatement 包含什么以及 fetch/fetchAll 有什么用?

    我无法理解 1 PDOStatement 对象内部有什么以及 2 为什么我需要 fetch 或 fetchAll 方法 我的数据库 一个名为 动物 的简单表 有 3 列 id 名称 物种 My code try pdo new PDO ds
  • Clang 格式换行符

    我正在寻找一个clang format设置以防止工具删除换行符 例如 我有我的ColumnLimit设置为 120 这是我重新格式化一些示例代码时发生的情况 Before include
  • 根据另一个数组的内容对 C 数组进行排序

    我正在尝试对数组进行排序A其元素是索引 索引引用另一个数组B其值将决定顺序A 所以 我想排序A这样B A i 在增加 例如 A 0 1 4 5 7 B 5 3 8 2 2 7 1 6 3 9 Sorted A将会 A 7 4 1 0 5 这
  • 如何修复Python缩进

    我有一些 Python 代码的缩进不一致 大量制表符和空格的混合使情况变得更糟 甚至空格缩进也没有保留 该代码按预期工作 但难以维护 我怎样才能修复缩进 比如HTML 整洁 https en wikipedia org wiki HTML
  • 如何在echarts中添加渐变颜色?

    I made a echart line graph https stackblitz com edit angular aqghec file src 2Fapp 2Fapp component ts Now I want to add
  • 自定义 UItableView 在 ios8 上无法正确显示

    我做了一个定制UITableViewCell当我显示它时 我得到了这个结果 我在 iPhone 5 上运行 xcode 6 和 iOS 8 beta 1 https i stack imgur com 9Oswn png https i s
  • 只读时无法使用文本框获取文本?

    我有一个文本框
  • CSS Line-Through 未被删除

    我有一些代码可以在 TR 上为已删除的行添加一条直通线 但这意味着我的 操作 列 只有 按钮会受到影响 这是因为按钮之间存在单独的空间 这些空间最终也会被贯穿 在浏览了 W3Schools 后 我很困惑为什么这个例子不起作用 table t
  • 如何设置 tkinter textvariable 在单独的线程上运行?

    尝试使用 main 函数变量更新在线程上运行的 tkinter textvariable 我实现了一个基于线程的解决方案 因此 tkinter 主循环后面的代码可以运行 https stackoverflow com a 1835036 1
  • 如何使用功能状态生成随机数?

    我正在努力弄清楚如何将 State 的函数表示与 Scala 的 Random 类合并以生成随机整数 我正在从书上学习Scala 中的函数式编程 所以大部分代码都是从那里获取的 以下是 State 类的样子 直接来自书中 case clas
  • 使用 NSIS 安装程序向注册表项授予权限的有效方法是什么?

    我正在尝试使用访问控制插件 http nsis sourceforge net AccessControl plug in在 NSIS 中设置注册表项的权限 它不起作用 安装程序运行后 所有用户组没有完全控制权 我在下面创建了一个示例 这里
  • Eclipse:有没有办法在组织导入中强制导入来解决歧义?

    我在 android 项目上使用 Eclipse 我更新到 Lion 问题开始出现 尝试了几个小时 没有结果 问题是这样的 我有几十个文件com stuff morestuff在我的项目中 我想 ctrl shift O 我的项目 这样每个
  • VS2010单元测试“待处理”且测试无法完成

    我正在使用 VS2010 Windows 7 每次我尝试运行单元测试时 它都会保持 待处理 状态并且测试无法完成 我试着遵循这个msdn说明 http msdn microsoft com en us library ms182532 28
  • Netflix 如何在不刷新页面且无需 JavaScript 的情况下提交评分?

    我正在尝试为我的网站做一些类似 Netflix 的 5 星级评级系统的事情 我注意到 Netflix 即使禁用了 JavaScript 仍然会在不刷新页面的情况下提交评级 这是显而易见的 因为当您手动重新加载页面时 您可以看到新的评级 但是
  • React-navigation 在调试模式下工作正常,但在发布模式下不行

    几周以来我遇到了一个问题 我在我的react native应用程序中使用react navigation 当我在调试模式下在我的设备上测试时 我在屏幕之间正确导航 但是当我构建签名的apk时 导航不再工作 我尝试了一切 但没有任何效果 我正
  • 在已知缺失时间间隔之间插入 3D 坐标

    数据是空间中的路径 我有 3D 位置数据 x y z 和记录位置点的时间 x y 和 z 坐标是物体在 3D 空间中移动的点位置 时间值是记录每个点的时间 从 0 开始 x y z time s 0 1 2 2 3 3 0 2 4 2 4