围绕平均点C++点的排列均匀缩放

问题描述:

我所试图做的事:围绕平均点C++点的排列均匀缩放

1.规模均匀地围绕一个点一个点的数组。 2.一个点必须是一组点的平均点。

下面的代码,似乎工作,但我不知道这是否是这样做的正确方法。

我知道,均匀缩放只需通过一些值乘以分,但这结垢0,0,0点,怎么办呢各地意思呢?

代码可以通过以下步骤进行细分:

  1. 获得积分的阵列的平均点,通过总结所有的位置,并通过多个点的划分。
  2. 比例是缩放值
  3. 然后我做矢量减法得到一个矢量指向点到平均点。
  4. 我正常化该矢量(I得到单位矢量)
  5. 然后,添加其归一化的向量到当前点乘以(1 - 比)* 0.5

这最后一点第五点从检查总来完全值的长度。我

所有的例子上来之前,使用矩阵数学,我真的不能够读出矩阵运算。

是否正确一致换算方法,如果你能指出什么我做错了它不是?

//Get center of a curve 
    //That is average of all points 


    MatMxN curveCenter = MatMxN::Zero(2, 1); //This is just 1 vector/point with x and y coordinates 

    for (int i = 0; i < n; i++) 
     curveCenter += points.col(i); 

    curveCenter /= n; 

    //Scaling value 
    float ratio = 1.3; 

    //Get vector pointing to center and move by ratio 
    for (int i = 0; i < n; i++) { 
     MatMxN vector = curveCenter - points.col(i); 
     MatMxN unit = vector.normalized(); 
     points.col(i) += unit*(1 - ratio)*0.5; //points.col(i) this is point in array 
    } 
+0

均匀缩放空间中的点是一个半线性变换。您只需要将相同比例因子的空间点的所有分量相乘即可。如果您还想将参考坐标系的原点居中在点云云的质心中,则沿坐标平均。这是因为半线性缩放的矢量度量(模数为例)后改变(比例因子):'points.col(I)* = ratio'是你所需要的。 –

+1

我认为你需要定义哪些点将成为缩放的中心。边框的中心?质量中心?边界框的左下角?其中一点? – Galik

+0

您的描述不清楚,所以没有人有工作了,如果你的方法实现的任何帮助。第2点:什么比例?你打算扩展什么?第3点:你在减去什么媒介? “价值的总长度”是什么意思?一般来说,统一缩放需要选择某种中心并相对于其调整其他点。你的描述并没有向我传达任何这样的信息。 – Peter

为了扩大使用特定的中心点点(除),执行以下步骤:从点

  1. 。减去中心通过缩放因子vector *= ratio
  2. MatMxN vector = points.col(i) - curveCenter;
  3. 乘法矢量
  4. 添加中心缩放矢量以获得新的点points.col(i) = vector + curveCenter

这种方法可以解决远程类似于你的公式。让我们称之为中心C,扩大规模P0点,缩放点P1和缩放因子s。在上述3个步骤可被写为:

v0 = P0 - C 
v1 = s * v0 
P1 = v1 + C 

=>

P1 = s * P0 + C * (1 - s) 

现在我们定义P1 = P0 + x一些x

P0 + x = s * P0 + C * (1 - s) 

=>

x = s * P0 + C * (1 - s) - P0 
    = C * (1 - s) - P0 * (1 - s) 
    = (C - P0) * (1 - s) 

所以你PDATE可以写成如下而是采用提到的3个步骤:

MatMxN vector = curveCenter - points.col(i); 
points.col(i) += vector * (1 - ratio); 

不过,我喜欢写在反向substractions,因为它是更接近原始的步骤,更容易理解的直觉:

MatMxN vector = points.col(i) - curveCenter; 
points.col(i) += vector * (ratio - 1); 

我不知道你在哪里找到的规范和*0.5想法。