如何将相对于特定点的点缩放为原点而不是原点(0,0)?

时间:2018-03-06 15:49:23

标签: python matplotlib image-processing draw

我有缩放因子sf=[0.5,0.75,0.85,1,1.25,1.5,1.75,2],我想通过相对于e=[70, 140](图片中的红点)缩放来计算点center_point=[89, 121](蓝线)的坐标在python中。

scaled_point_x = e[0] * sf[0]
scaled_point_y = e[1] * sf[0]
ee=[scaled_point_x,scaled_point_y]  # yellow color line in the figure

添加中心点的坐标以转换为红点(中心点)后,我得到黑线,这是不正确的

new=[scaled_point_x+center_point[0],scaled_point_y+center_point[1]]

enter image description here

我该如何解决这个问题?哪一部分我做错了?

2 个答案:

答案 0 :(得分:2)

这是一个数学问题,而不是一个编程问题。 要将点e相对于中心点fcp因子缩放,

new_e = f*(e-cp)+cp

即。您缩放点和中心点之间的差异向量,然后将其转换回中心。

答案 1 :(得分:1)

这类问题可能在计算机图形学书的第2章中得到解决。

试试这个,

  1. 将center_point转换为origin,即从点
  2. 中减去centre_point
  3. 缩放点,即乘以sf
  4. 将center_point翻译为原始位置,即将center_point添加到点
  5. 这里有一些python

    scaled_pts = []
    for s in sf:
        tr_pointx, tr_pointy = e[0]-center_point[0], e[1]-center_point[1]
        sc_pointx, sc_pointy = tr_pointx * s, tr_pointy * s
        scaled_pt = [sc_pointx + center_point[0], sc_pointy + center_point[1]]
        # draw the pt  
        scaled_pts.append(scaled_pt)