Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 从中心点缩放向量?_Algorithm_Geometry_Graphics - Fatal编程技术网

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