如何在Pygame中缩放多边形?

时间:2019-04-07 01:42:18

标签: python pygame

我有一个多边形

 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 个答案:

答案 0 :(得分:1)

也许使用矩阵可以做得更好,但我使用常规方法

我有

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)