Может быть, используя матрицу, это можно сделать лучше, но я использую обычные методы
У меня есть
X = 100
Y = 100
A = 20
B = 20
и точки
x = (X,Y)
y = (X+B,Y+A)
z = (X-B,Y+A)
print(x,y,z)
(100, 100) (120, 120) (80, 120)
начало координат - точка x
origin = x[0], x[1]
Я перемещаю все точки, используя origin
, поэтому oringi (
x ) will be
(0,0) `
x1 = x[0]-origin[0], x[1]-origin[1]
y1 = y[0]-origin[0], y[1]-origin[1]
z1 = z[0]-origin[0], z[1]-origin[1]
print(x1,y1,z1)
(0, 0) (20, 20) (-20, 20)
Как я вижу, вам нужна шкала 1/2
scale = 1/2
x1 = x1[0]*scale, x1[1]*scale
y1 = y1[0]*scale, y1[1]*scale
z1 = z1[0]*scale, z1[1]*scale
print(x1,y1,z1)
(0.0, 0.0) (10.0, 10.0) (-10.0, 10.0)
Наконец-то я переместил все назад
x = x1[0]+origin[0], x1[1]+origin[1]
y = y1[0]+origin[0], y1[1]+origin[1]
z = z1[0]+origin[0], z1[1]+origin[1]
print(x,y,z)
(100.0, 100.0) (110.0, 110.0) (90.0, 110.0)
И это новый многоугольник
(100.0, 100.0) (110.0, 110.0) (90.0, 110.0)
В вашем примере вы также можете только изменить масштаб A
B
scale = 1/2
X = 100
Y = 100
A = 20 * scale
B = 20 * scale
И
(B+X,A+Y),(-B+X,A+Y),(X,Y)
дает одинаковые значения
(110.0, 110.0), (90.0, 110.0), (100, 100)