Math 如何创建任意共面三维曲线的二维绘图

Math 如何创建任意共面三维曲线的二维绘图,math,plot,3d,projection,curve,Math,Plot,3d,Projection,Curve,我有一组点,它们构成(理论上)共面曲线。我的问题是,平面是任意的,每次我收集数据(这些点是从相机收集的)时,它都可以在两个平面之间移动。我想知道你们是否能帮我想办法: 找到与这些点共面的平面最近的平面 在此平面上投影点,使我得到一条二维曲线 我相信我知道如何做到第二点,这实际上主要是我正在努力解决的第一点,但我也不介意第二点上的帮助 非常感谢 在数据中找到3个点A、B、C 它们不能在同一条线上,并且应尽可能彼此远离,以提高精度 构造U,V基向量 U = B-A V = C-A 正常化

我有一组点,它们构成(理论上)共面曲线。我的问题是,平面是任意的,每次我收集数据(这些点是从相机收集的)时,它都可以在两个平面之间移动。我想知道你们是否能帮我想办法:

  • 找到与这些点共面的平面最近的平面
  • 在此平面上投影点,使我得到一条二维曲线
  • 我相信我知道如何做到第二点,这实际上主要是我正在努力解决的第一点,但我也不介意第二点上的帮助

    非常感谢

  • 在数据中找到3个点
    A、B、C

    它们不能在同一条线上,并且应尽可能彼此远离,以提高精度

  • 构造
    U,V
    基向量

     U = B-A
     V = C-A
    
    正常化

     U /= |U|
     V /= |V|
    
    使
    U,V
    垂直

     W = cross(U,V) // this will be near zero if A,B,C are on single line
     U = cross(V,W)
    
  • 将数据转换为
    U,V
    平面

    对于数据计算中的任意点
    p=(x,y,z)

     x' = dot(U,P)
     y' = dot(V,P)
    
    如果您还需要反向转换:

     P = x'*U + y'*V
    
    如果您想要/拥有一个原点
    A
    ,则转换为:

     x' = dot(U,P-A)
     y' = dot(V,P-A)
     P = A + x'*U + y'*V
    
    这将在二维坐标中将
    A
    映射到
    (0,0)

  • 如果您不知道向量数学,请查看此处:


    在底部,您将找到向量运算的方程式。希望这有助于……

    查找。你真的应该接受@Spektre answer这不会“找到最接近这些点共面的平面”,它会找到通过这三个点的平面。如果所有的点实际上是共面的,那么这些都是相同的平面,但如果数据有一些噪声,就不会了。@RoryDaulton我知道,但仅仅为了渲染集合,这就足够了。。。如果你想避免噪音问题,你可以平均更多这样的平面,或者用最优化方法拟合平面。。。