2012-11-30 3 views
0

이것은 파이썬을 사용하는 컴퓨터 과학 과제를위한 것입니다. 화면을 가로 지르는 정사각형이나 상자를 만들 알고리즘을 만드는 위치를 알 수 있습니까? 그리고 나는 실제로 슬라이드를 의미하지 슬라이드가 아닙니다. 반드시 파이썬을 사용할 필요는 없습니다. 좌표가 어떻게 작동하는지 일반적인 알고리즘에 대한 일반적인 아이디어가 필요합니다.화면을 가로 지르는 정사각형을 만듭니다.

답변

2

x 축에 한쪽면이 있고 (xs, 0)에 오른쪽 아래 모서리가있는 경우 단위 사각형이 시작되고 시계 방향으로 1/4 회전하면 다시 x 축에 한쪽이 놓입니다 , 오른쪽 아래 모서리가 (xs + 1, 0)에있게됩니다. 뒤집기 전에 왼쪽 하단 모서리에 라벨을 붙이십시오. 왼쪽 위 b. 및 오른쪽 상단 c. 코너 a 및 c는 사각형이 바뀌면서 단위 원호를 따라 이동합니다. 코너 b는 반경 d = sqrt (2)로 움직입니다.

이 다음의 방법에 이르게 : 단계 각도 t을 0에서 파이로/2 (예 : 90 °),
• XA = XS시키는 - 나중에 • t
애거 = 죄 t
• XB = XS - D * COS (t + PI/4)
• YB = D의 * 죄 (t + PI/4)
마다 스텝 XC = XS + 죄 t •
• YC = t

COS

, 방정식에서 new (xa, ya, xb, yb, xc, yc)를 계산하고, (xs, 0)에서 (xa, yb)까지 (xc, yc) ~ (xd, yd) ~ (xs, 0)을 취한 다음 적절한 양만큼 지연 시키십시오. 매번 t가 pi/2까지 올 때마다 t를 0으로 다시 설정하고 xs에 1을 더합니다. 새로운 사각형을 지우고 새로운 사각형을 지우는 대신 하나의 오래된 라인을 지우고 4 개의 라인을 차례로 하나씩 그려 볼 수 있습니다.

+0

일반적으로 이전 줄을 지우면서 오래된 줄을 지우는 대신 나쁜 줄을 배경으로 대체하는 것은 좋지 않습니다 컬러 또는 이미지.이는 임의의 배경을 그리기 위해 일반화하고, 앤티 엘리 어싱 및 합성에 의해 생성 된 인공물을 피하며, 복잡한 장면의 다시 그리기가 "더티 렉 (dirty rects)"을 추적함으로써 효율적으로 처리 될 수 있다는 것을 비롯하여 여러 가지 이유로 사실입니다. – mdgeorge

0

먼저 한면에서 한면으로 피벗 한 상자에 대해 생각한 다음 순서로 해당 단계를 결합하십시오. 당신이 오른쪽으로

A ---- B 
|  | 
C ---- D 

롤링과 같은 상자가있는 경우 즉, 먼저 D에 대한 모든 것을 선회하면 그 단계는 모든 점의 간단한 시계 방향으로 회전이다

 C - A 
     | | 
     | | 
     | | 
     | | 
     D - B 

있을 때까지입니다 0도에서 90도 사이의 각도 θ만큼 원점 D를 중심으로 회전합니다. 나는 asker 및/또는 wikipedia에 그것을 알아내는 것을 떠날 것이다;).

당신이 그 단계를 알아 낸 후, 회전의 다음 부분은 지금 당신이 그렇게 높은 수준에서

  D ---- C 
      |  | 
      B ---- A 

이 당신을 제공하는 대신 D.의 B 중심으로 회전하는 것을 제외하고, 동일, 나는 가장 최근의 "편평한"구성을 먼저 파악한 다음, 어떤 구석이 정면에 있는지 알아 내고, 그 후 얼마만큼의 시간이 경과했는지에 따라 앞면 모서리에 대해 포인트를 회전 시켜서 시간 t에서 모퉁이의 위치를 ​​계산할 것입니다. 광장은 평평한 상태에있었습니다.

보너스 힌트로, divmod는 타임 스탬프를 한 쌍으로 나누기위한 파이썬의 훌륭한 기능입니다 (어느 단계인지, 그 단계로 들어가는 방법).

0

pybox2d, pymunk 또는 다른 물리 엔진을 사용하여 모든 계산을 수행하여 과제의 정신을 완전히 깨뜨릴 수 있습니다. 그런 다음 많은 상자들이 돌아 다니면서 서로 튀어 오를 수 있습니다. D