我有一个多边形
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没有缩放多边形的方法 不改变他们的观点,那么我该怎么办 这样做吗? 多边形可以在任意给定时间翻转, 因此更改积分不是一个好的解决方案,因为它导致 翻转后的多边形再次生长。
答案 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)