如何在Pygame中缩放多边形?

2024-06-25 23:54:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个多边形

 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似乎没有缩放多边形的方法 不改变他们的观点,我该怎么办 这样做?多边形可以在任何给定时间自动翻转并且 因此,改变观点并不是一个好的解决办法,因为它会导致 多边形翻转后再次增长。你知道吗


Tags: 方法时间redthis多边形screenpygamedraw
1条回答
网友
1楼 · 发布于 2024-06-25 23:54:22

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

我有

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]

我用originso 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)

在您的示例中,您还可以只重新缩放AB

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)

相关问题 更多 >