- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
数据是空间中的路径。我有 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
我最终会错过一些录制 Activity 。 (这是已知的并被接受为正确的)并且数据流将以不同的时间间隔继续:
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) 更新 1 三三次插值不应适用于此,因为我没有在 3D 空间中使用网格。我正在研究轨迹。我找到了Tricubic Interpolation implementation在 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
之间的所有点和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
有任何关系吗?和p(1) = p3
?它们可以是您选择的任何东西吗?
可以重写为 p'(0) = 0.5*((p(3)-p(0)) + (p(0)-p(-1))
正确的?我不清楚为什么要这样做。甚至为什么可以做到
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) 的歧义,因为我也不知道方程来自哪里。
接下来的内容非常简单,那就是方程组
最佳答案
由于您的数据很可能只是一些平滑曲线采样点,我将使用如下三次插值多项式:
曲线属性使其穿过所有控制点 ( t={-1,0,+1,+2}
),并且内部控制点处的方向(一阶导数)是展位侧面的平均值以平滑连接(类似于 贝塞尔曲线 三次方) )。
算法是这样的:
在缺失点之前得到 2 点,在缺失点之后得到 2 点
我们称它们为p0,p1,p2,p3
理想情况下,它们应该是时间等距的......并按时间排序。
计算每个轴的 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));
设置参数t=<0,1>
与缺失时间对应的值
所以如果你选择点 p0,p1,p2,p3
与时俱进t0,t1,t2,t3
那么缺失的时间tm
对应参数:
t = (tm-t1)/(t2-t1);
计算缺失点。
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
如果通过推导类似的方程或拟合还不够,您可以使用更高阶的多项式。另请看一下这个:
[Edit1]构造自己的多项式
您评论的答案在Impact of cubic and catmull splines on image的[edit2]中这也在上面的先前链接中链接。要以类似的方式制作 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
之间的所有点和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
和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
-------------------------------------------------------------------
现在使用t=+1
和t=-1
并计算a3,a4
。您可以设置关节点导数以满足您的特定需求(不仅仅是左右导数的平均值),但形成像您这样的连续曲线是最好的(根据我的经验)。
关于java - 在已知缺失时间间隔之间插入 3D 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44956168/
将此矩阵视为一个内存。 p00 p01 p02 p03 p04 p05 p06.... p0n
一般,您如何确定如何根据已知模式迭代数组? 具体,这是我想要迭代的模式,返回一个数组数组:(每个数字都是原始数组的索引值:[0, 1, 2, 3] ) 0 0,1 0,1,2 0,1,2,3 1 1,
问题: 我正在编写一个 C++ 程序,我想在其中从 TCP/IP 套接字读取数据流。数据由几个不同长度和数据类型的数据包组成,但是,它们都是以十六进制格式接收的。在此图中可以看到数据包的长度及其数据类
使用 VC12(在 Visual Studio 2013 RTM 中)[1] 编译此程序会导致崩溃(在所有构建配置中),而实际上它不应该: #include void foo(std::string
我有一个 Snakemake 规则,适用于数据存档并本质上解压其中的数据。文件包含我在规则开始之前知道的不同数量的文件,因此我想利用它并执行类似的操作 rule unpack: input:
有这样的 list 吗? 我对 iOS 开发比较陌生,我认为研究最知名的编译器错误或陷阱列表会很棒。 编辑: 今天我花了太多时间来理解这样的代码发生了什么: 在 *.h @interface I :
如何选择已知 div 中的最后一个子元素,其中该子元素是未知元素。即:元素可以是段落或无序列表。 大多数情况下结构是: Text 但在其他情况下,结构将是: Text More Text
我想绘制以下内容: x = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'] y = [10, 20, 1, 8, 7, 2, 3, 7, 11] 作为条形图
关于未知列表的排序问题,人们已经知道很多了。但是,在堆栈机器中找到已知列表的最佳排序问题呢?也就是说,假设您有以下堆栈计算机: [4,1,3,2] [] [] 也就是说,有3个堆栈的空间,其中1个堆栈
正如主题中所写,我必须使用 mechanize 更改某些输入字段的值,但我没有它的名称只有 id:/让我们坚持这一点。 表单是这样的:
我只是回想起我的大学类(class),想知道这里是否有人在专业环境中使用过“Z 符号”。老实说,这是我一生中参加过的最无聊的类(class)。也许是因为老师,但当时我们真的都认为这是浪费时间。我可能错
我正在尝试编写一个函数来获取 Windows 等效的 HOME。我的 C 技能生疏了,所以请不要介意我的示例代码无法编译。我试图在 Windows Vista 和更新版本上使用 SHGetKnownF
我想找到一个正整数矩阵B,使得AB = BC,其中A和C是具有共同特征值的正整数矩阵。对于这种情况,存在解,但不唯一;我只需要一种解决方案。 有人知道 python 或 matlab 中可以执行此操作
如果您有两个二进制 blob,x 和 y。然后将它们散列在一起,假设使用 SHA-512。入侵者知道 y,这会使反转哈希变得容易多少? 是否有关于 y 有多大并且可以与 x 比较才成为问题的指南?这有
我正在使用Angular-Stripe-Checkout library创建像这样的 stripeToken example 。一些亮点如下所示。 与许多 Angular-stripe 库和示例一样,
我有一个带有 (e,n) 加密数据的公钥,必须通过 RSA 获取纯文本,并且所有这些都在 C 中! 首先我想知道如何找出我的 p 和 q 是什么?我知道它们必须是质数和 p<>q! 最佳答案 首先,因
表1(客户表) Id, CustomerId, IsKnownCustomer,phonemacaddress 1, 空 0 00:9a:34:cf:a4 2, 004024 1 00:6f:64:c
问题是找到第 n-th Catalan 数 mod m,其中 m 是 NOT prime , m = (10^14 + 7)。以下是我尝试过的方法列表:(max N = 10,000) 查表的动态编程
每当我打开我的应用程序时,我都想将我的应用程序连接到一个已知的 wifi 网络/ssid。即使手机当前通过 3G 或任何其他 wifi 网络连接。 仅使用 phonegap/html5 是否可行? 最
我正在做一个项目,我想为特定的用户组(具有管理员角色)实现实时通知,经过一些研究,我明白我需要 session 才能知道哪些用户已登录(默认情况下他们是匿名的)。 另外,我只需要向特定用户发送通知。
我是一名优秀的程序员,十分优秀!