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