这是一个使用Python的计算机科学作业,有人知道我从哪里开始创建一个算法来创建一个在屏幕上滚动的正方形或方框吗?我的意思确实是滚动,而不是滑动。它不一定要使用python,我只需要一个关于坐标如何工作的大致想法和一个通用算法。
如果一个单位正方形一开始一侧靠在x轴上,右下角位于(xs,0),那么顺时针旋转四分之一圈后,它将再次使一侧靠在x轴上,而右下角现在位于(xs+1,0)。在它转弯之前,将左下角标记为a;左上角,b;右上角c。角a和c随着正方形的转动而沿着单位圆的圆弧移动。角点b的移动半径为d=sqrt(2)。
这导致了以下方法:将角度t从0步进到pi/2(即90°),使
•xa=xs-cos t
·ya=sin t
•xb=xs-d*cos(t+pi/4)
?yb=d*sin(t+p1/4)
.xc=xs+sin t
•yc=cos t
在每个时间步长,通过绘制背景色的线来擦除旧的正方形,从方程中计算新的(xa,ya,xb,yb,xc,yc),用从(xs,0)到(xa、yb)到(xc、yc)到(xd、yd)到到(xs、0)的线来绘制新的正方形,然后延迟适当的量。每次t达到pi/2时,将t设置回0,并将1添加到xs。请注意,与其擦除整个正方形然后绘制新的正方形,不如尝试擦除一条旧线,然后为四边依次绘制一条新线。
我会首先考虑盒子在一个角落从一边转到另一边,然后按顺序组合这些步骤。也就是说,如果你有一个像这样的盒子
A ---- B
| |
C ---- D
向右滚动,然后首先整个事情围绕D旋转,直到你有
C - A
| |
| |
| |
| |
D - B
该步骤是将所有点围绕原点D直接顺时针旋转0度和90度之间的角度θ。我将把这个问题留给提问者和/或维基百科;)。
一旦你确定了这一步,下一步的旋转是一样的,只是现在你是围绕B而不是D旋转。这就把你带到了
D ---- C
| |
B ---- A
因此,在较高的水平上,我会通过首先计算出最新的"平面"配置,然后计算出哪个角在前面,然后根据正方形处于平面状态后经过的时间,围绕前角旋转点来计算时间t时角的位置。
作为一个额外的提示,divmod在python中是一个很好的函数,可以将时间戳分解为一对(我在走哪一步,我要走多远)。
您也可以使用pybox2d、pymunk或其他物理引擎为您进行所有计算,从而彻底打破任务的精神。然后你可能会有很多盒子滚动并相互反弹:D