Как масштабировать полигон в Pygame? - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть многоугольник,

 X = 100
 Y = 100
 A = 20
 B = 20
 pygame.draw.polygon(screen,red,[(B+X,A+Y),(-B+X,A+Y),(X,Y)])#(X,Y,Z)

как мне масштабировать его от начальной точки (X, Y)?

this ->
  X(0,0)
 /\
/  \
----Z(2,-2)
Y(-2,-2)
should become this -->
 X(0,0)
/\
--Z(1,-1)
Y(-1,-1)

Но Похоже, в Pygame нет метода масштабирования полигонов без изменения их точек , как бы мне поступить так? Многоугольник может перевернуться в любой момент времени , и поэтому изменение точек не является хорошим решением, поскольку оно приводит к повторному росту многоугольника после переворачивания.

1 Ответ

1 голос
/ 07 апреля 2019

Может быть, используя матрицу, это можно сделать лучше, но я использую обычные методы

У меня есть

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...