【问题标题】:Scaling vectors from a center point?从中心点缩放向量?
【发布时间】:2010-05-06 18:14:37
【问题描述】:

我试图弄清楚我是否有一些点可以构成一个正方形:

 *     *



 *     *

假设我知道这个正方形的中心。 我想要一个公式,使它的大小是它的两倍,但从中心

 *               *

      *     *



      *     *

 *               *

因此,新形状的大小是多边形中心的两倍。它必须适用于任何形状,而不仅仅是正方形。

我更多的是寻找它背后的理论而不是实现。

【问题讨论】:

    标签: algorithm geometry graphics


    【解决方案1】:

    如果您知道多边形中的中心点cp 和一个点v,并希望按scale 进行缩放,那么:

    v2 = v - cp; // get a vector to v relative to the centerpoint
    v2_scaled = v2 * scale; // scale the cp-relative-vector
    v1_scaled = v2_scaled + cp; // translate the scaled vector back
    

    这种平移-缩放-平移模式可以在任何维度的向量上执行。

    【讨论】:

    • short = (v - cp)*scale + cp
    【解决方案2】:

    如果您想要两倍大的形状,请将坐标的距离缩放为距中心较远的sqrt(2) 倍。

    换句话说,假设您的点在(x, y),中心是(xcent, ycent)。你的新点应该在

    (xcent + sqrt(2)*(x - xcent),  ycent + sqrt(2)*(y - ycent))
    

    这将缩放与新“原点”(xcent, ycent) 的距离,使面积翻倍。 (因为sqrt(2)*sqrt(2) == 2)

    【讨论】:

      【解决方案3】:

      我不确定是否有一种干净的方法可以对所有类型的对象执行此操作。对于相对简单的,您应该能够找到“中心”作为各个点的所有 X 和 Y 值的平均值。要将大小加倍,您可以找到从中心到点的向量的长度和角度。将向量的长度加倍,并保持相同的角度得到新的点。

      编辑:当然,“两倍大小”有多种解释(例如,周长加倍与面积加倍)这些会改变上面使用的乘数,但基本算法将基本保持不变。

      【讨论】:

        【解决方案4】:

        要执行您想要的操作,您需要执行三个操作:平移正方形,使其质心与坐标系的原点重合,缩放生成的正方形,然后将其平移回来。

        【讨论】:

          猜你喜欢
          • 2013-03-29
          • 2018-02-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多