这是用于使用Python的计算机科学任务,是否有人知道我将在哪里开始创建一个算法来创建一个在屏幕上滚动的方形或框?而且我确实意味着滚动而不是滑动。它不一定必须使用python,我只需要一个关于坐标如何工作的一般概念和一般算法。
答案 0 :(得分:2)
如果一个单位正方形开始时,一侧放在x轴上,右下角放在(xs,0)处,那么在顺时针转动四分之一后,它将再次将一侧放在x轴上,并且右下角现在位于(xs + 1,0)。在它转动之前,标记左下角a;左上角,b;和右上角,c。当方形转动时,角a和c沿着单位圆的弧移动。拐角b以半径d = sqrt(2)移动。
这导致以下方法:从0到pi / 2(即90°)的步进角t,使得
•xa = xs - cos t
•ya = sin t
•xb = xs - d * cos(t + pi / 4)
•yb = d * sin(t + pi / 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并将xs加1。请注意,不是擦除整个方块然后绘制新的方块,而是可以尝试擦除一条旧线并依次为四条线绘制一条新线。
答案 1 :(得分:0)
我会首先考虑从一侧到另一侧的一个角上旋转的盒子,然后按顺序组合这些步骤。也就是说,如果你有一个像
这样的盒子A ---- B
| |
C ---- D
向右滚动,然后首先整个事物围绕D转向
C - A
| |
| |
| |
| |
D - B
该步骤是围绕原点D的所有点的直接顺时针旋转角度θ在0和90度之间。我会把这个问题告诉问问者和/或维基百科;)。
一旦你想出了这一步,旋转的下一部分是相同的,除了你现在绕着B转而不是D.这会带你到
D ---- C
| |
B ---- A
所以在高水平,我会在时间t计算角落的位置,首先找出最近的“平坦”配置,然后弄清楚哪个角落在前面,然后围绕前角旋转点根据自广场处于平坦状态以来已经过了多长时间。
作为奖励提示,divmod在python中是一个很好的函数,用于将时间戳分解为一对(我上一步,我进入该步骤有多远)。
答案 2 :(得分:0)
您可以通过使用pybox2d,pymunk或其他物理引擎为您完成所有计算,完全打破分配的精神。然后你可以让很多箱子四处滚动并互相反弹:D