Algorithm 从中心点缩放向量?
我试图弄清楚我是否有一些点,比如说一个正方形:Algorithm 从中心点缩放向量?,algorithm,geometry,graphics,Algorithm,Geometry,Graphics,我试图弄清楚我是否有一些点,比如说一个正方形: * * * * 假设我知道这个广场的中心。 我想要一个公式,可以使它的大小是它的两倍,但从中心开始 * * * * * * * * 因此,新形状是多边形中心的两倍大。它必须适用于任何形状,而不仅仅是正方形 我更多地是在寻找它背后的理论,而不是实现。如果你想要两倍大的形状,将坐标的距离缩放到距离中心更远的sqrt
* *
* *
假设我知道这个广场的中心。
我想要一个公式,可以使它的大小是它的两倍,但从中心开始
* *
* *
* *
* *
因此,新形状是多边形中心的两倍大。它必须适用于任何形状,而不仅仅是正方形
我更多地是在寻找它背后的理论,而不是实现。如果你想要两倍大的形状,将坐标的距离缩放到距离中心更远的
sqrt(2)
倍
换句话说,假设你的点在(x,y)
,中心是(xcent,ycent)
。你的新观点应该是
(xcent + sqrt(2)*(x - xcent), ycent + sqrt(2)*(y - ycent))
这将缩放与新“原点”(xcent,ycent)的距离,使面积加倍。(因为
sqrt(2)*sqrt(2)==2)
如果您知道多边形中要按scale
缩放的圆心cp
和点v
,那么:
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
这种平移比例平移模式可以在任何维度的向量上执行。我不确定是否有一种干净的方法可以对所有类型的对象执行此操作。对于相对简单的点,您应该能够找到“中心”作为各个点的所有X和Y值的平均值。要使大小加倍,可以找到向量从中心到点的长度和角度。将向量的长度加倍,并保持相同的角度以获得新点
编辑:当然,“两倍大小”有多种解释(例如,周长加倍与面积加倍),这些解释会改变上面使用的乘数,但基本算法基本上保持不变。要执行您想要的操作,您需要执行三个操作:平移正方形,使其质心与坐标系原点重合,缩放生成的正方形,将其向后平移。short=(v-cp)*scale+cp