平均3D路径

时间:2011-09-17 05:37:12

标签: r math graphics 3d average

我有两条3D路径,如果有这样的话,我想“平均”它们。

我在采样时有时间戳的xyz对:

    ms   x   y   z
    3   0.1 0.2 0.6
    12  0.1 0.2 1.3
    23  2.1 4.2 0.3
    55  0.1 6.2 0.3

关于路径的事实:

  • 它们都在相同的xyz点开始和结束。
  • 我有完成路径所需的总持续时间以及单个顶点
  • 它们具有不同的长度(即不同数量的xyz对)。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:3)

一个简单的方法如下......

首先构建一个给定当前时间interp(t, T, waypoints)的函数t,总路径持续时间T和路径waypoints返回当前位置。这可以使用线性插值或更复杂的方法来完成,以避免速度或加速度不连续。

一旦你有interp,平均路径就可以定义为(例如在python中)

def avg(t, T1, waypoints1, T2, waypoints2):
    T = (T1 + T2) / 2
    return middlePoint(interp(t*T1/T, T1, waypoints1),
                       interp(t*T2/T, T2, waypoints2))

平均路径的持续时间将是两个持续时间的平均T = (T1 + T2) / 2

更改此方法以制作加权平均路径也很容易。

答案 1 :(得分:3)

在R中,假定它位于名为“dat”的数据帧中,该系列中连续点之间的距离  将是:

 with(dat, sqrt(diff(x)^2 +diff(y)^2 +diff(z)^2) )
#[1] 0.700000 4.582576 2.828427

有几个平均值我可以想到间隔的平均距离,每单位时间的平均行进距离。取决于你想要什么。这给出了三个区间的平均速度:

 with(dat, sqrt(diff(x)^2 +diff(y)^2 +diff(z)^2) /diff(ms) )
#[1] 0.07777778 0.41659779 0.08838835

答案 2 :(得分:2)

肯定有这样的事情。对于路径A上的每个点,找到与路径B上的当前点相对应的点,然后找到这些相应的顶点之间的中点。然后,您将获得两者之间的路径,即两条路径的“平均值”。如果你有一个不匹配的地方,你没有采样相同的两条路径,那么对于路径A上的一个内部点(即,不是终点),找到两个最接近的采样点,在路径上采用类似的时间采样B,找到三点将产生的三角形的中点。

既然你已经通过采样对你的路径进行了抹黑,那么这个“平均值”只会是一个近似值,而不是一个“真实”的平均值,就像通过求解两个可微分参数函数之间的平均函数一样。 r(t) = <x(t), y(t), z(t)>

答案 3 :(得分:1)

扩展@ 6502的回答。

如果您希望检索构成平均路径的点列表,可以在各个输入点的实例处对avg函数进行采样。 (拉伸到平均长度)

def avg2(T1, waypoints1, T2, waypoints2):
    # Collect the times we want to sample at
    T = (T1 + T2) / 2
    times = []
    times.extend(t*T/T1 for (t,x,y) in waypoints1)  # Shift the time towards
    times.extend(t*T/T2 for (t,x,y) in waypoints2)  #   the average
    times.sort()

    result = []
    last_t = None
    for t in times:
        # Check if we have two points in close succession
        if last_t is not None and last_t + 1.0e-6 >= t:
            continue
        last_t = t

        # Sample the average path at this instance
        x, y = avg(t, T1, waypoints1, T2, waypoints2)
        yield t, x, y