죄송합니다.이 질문은 약간 난해하지만, 제 머리에서 벗어날 수는 없습니다!
아케이드 게임 DoDonPachi (및 다른 많은 오래된 게임)에서 사용되는 페이드 알고리즘을보고 있습니다.
파이썬 픽셀을 작성하여 몇 픽셀을 골라 페이드 기간 동안 추적했습니다. 다음은 대표적인 결과 샘플입니다. 각 그룹의 첫 번째 행은 시작 색상 값이고 이후의 각 행은 현재 프레임의 색상 값과 이전 프레임의 색상 값의 차이입니다.
Starting Value: (132, 66, 189)
Frame 1: [9, 9, 8]
Frame 2: [8, 8, 8]
Frame 3: [8, 8, 8]
Frame 4: [8, 8, 9]
Frame 5: [9, 9, 8]
Frame 6: [8, 8, 8]
Frame 7: [8, 8, 8]
Frame 8: [8, 8, 9]
Frame 9: [9, 0, 8]
Frame 10: [8, 0, 8]
Frame 11: [8, 0, 8]
Frame 12: [8, 0, 9]
Frame 13: [9, 0, 8]
Frame 14: [8, 0, 8]
Frame 15: [8, 0, 8]
Frame 16: [8, 0, 9]
Frame 17: [0, 0, 8]
Frame 18: [0, 0, 8]
Frame 19: [0, 0, 8]
Frame 20: [0, 0, 9]
Frame 21: [0, 0, 8]
Frame 22: [0, 0, 8]
Frame 23: [0, 0, 8]
Frame 24: [0, 0, 0]
Frame 25: [0, 0, 0]
Frame 26: [0, 0, 0]
Frame 27: [0, 0, 0]
Frame 28: [0, 0, 0]
Frame 29: [0, 0, 0]
Starting Value: (132, 0, 0)
Frame 1: [9, 0, 0]
Frame 2: [8, 0, 0]
Frame 3: [8, 0, 0]
Frame 4: [8, 0, 0]
Frame 5: [9, 0, 0]
Frame 6: [8, 0, 0]
Frame 7: [8, 0, 0]
Frame 8: [8, 0, 0]
Frame 9: [9, 0, 0]
Frame 10: [8, 0, 0]
Frame 11: [8, 0, 0]
Frame 12: [8, 0, 0]
Frame 13: [9, 0, 0]
Frame 14: [8, 0, 0]
Frame 15: [8, 0, 0]
Frame 16: [8, 0, 0]
Frame 17: [0, 0, 0]
Frame 18: [0, 0, 0]
Frame 19: [0, 0, 0]
Frame 20: [0, 0, 0]
Frame 21: [0, 0, 0]
Frame 22: [0, 0, 0]
Frame 23: [0, 0, 0]
Frame 24: [0, 0, 0]
Frame 25: [0, 0, 0]
Frame 26: [0, 0, 0]
Frame 27: [0, 0, 0]
Frame 28: [0, 0, 0]
Frame 29: [0, 0, 0]
Starting Value: (165, 156, 222)
Frame 1: [9, 8, 8]
Frame 2: [8, 8, 8]
Frame 3: [8, 8, 8]
Frame 4: [8, 9, 9]
Frame 5: [9, 8, 8]
Frame 6: [8, 8, 8]
Frame 7: [8, 8, 8]
Frame 8: [8, 9, 9]
Frame 9: [9, 8, 8]
Frame 10: [8, 8, 8]
Frame 11: [8, 8, 8]
Frame 12: [8, 9, 9]
Frame 13: [9, 8, 8]
Frame 14: [8, 8, 8]
Frame 15: [8, 8, 8]
Frame 16: [8, 9, 9]
Frame 17: [9, 8, 8]
Frame 18: [8, 8, 8]
Frame 19: [8, 8, 8]
Frame 20: [8, 0, 9]
Frame 21: [0, 0, 8]
Frame 22: [0, 0, 8]
Frame 23: [0, 0, 8]
Frame 24: [0, 0, 9]
Frame 25: [0, 0, 8]
Frame 26: [0, 0, 8]
Frame 27: [0, 0, 8]
Frame 28: [0, 0, 0]
Frame 29: [0, 0, 0]
Starting Value: (156, 90, 206)
Frame 1: [8, 8, 8]
Frame 2: [8, 8, 9]
Frame 3: [8, 8, 8]
Frame 4: [9, 9, 8]
Frame 5: [8, 8, 8]
Frame 6: [8, 8, 9]
Frame 7: [8, 8, 8]
Frame 8: [9, 9, 8]
Frame 9: [8, 8, 8]
Frame 10: [8, 8, 9]
Frame 11: [8, 8, 8]
Frame 12: [9, 0, 8]
Frame 13: [8, 0, 8]
Frame 14: [8, 0, 9]
Frame 15: [8, 0, 8]
Frame 16: [9, 0, 8]
Frame 17: [8, 0, 8]
Frame 18: [8, 0, 9]
Frame 19: [8, 0, 8]
Frame 20: [0, 0, 8]
Frame 21: [0, 0, 8]
Frame 22: [0, 0, 9]
Frame 23: [0, 0, 8]
Frame 24: [0, 0, 8]
Frame 25: [0, 0, 8]
Frame 26: [0, 0, 0]
Frame 27: [0, 0, 0]
Frame 28: [0, 0, 0]
Frame 29: [0, 0, 0]
보시다시피 각 프레임의 각 색상 구성 요소에서 8 또는 9를 뺍니다. 또한 시작 색차 값이 각 색상 구성 요소마다 다르더라도 9는 항상 8 이후에 3 개의 프레임으로 나타납니다. 또한 각 색상 구성 요소는 임의의 나머지가 아닌 8 또는 9의 차이로 0 (즉, 검은 색)에 도달합니다. 이것은 8,8,8,9의 뺄셈 값 사이클이 절대로 깨지지 않음을 의미합니다! (이 알고리즘은 아마도 페이드의 마지막 프레임이 다른 프레임처럼 매끄 럽도록하기 위해 작성되었을 것입니다.)
자, 이것은 당황합니다. 내 계산에 따르면 프로세스를 반대로하면 즉 8,8,8,9주기를 취해 합산하여 29 프레임에서 가능한 모든 조합을 찾으려면 52 개의 고유 숫자 만 얻습니다. 그러나 이와 같이 각 색상 구성 요소는이 세트의 멤버입니다. 즉,이 페이드 알고리즘에 대해 색상을 구체적으로 선택했거나 (아마도) 페이드 알고리즘이 게임의 색상 팔레트를 중심으로 설계되었음을 의미합니다. 그러나 지구상에서 8,8,8,9를 취하고주기를 적절하게 이동하고 팔레트의 각 색상 구성 요소에서 숫자를 계속 빼면 모든 단일 색상에 대해 0에 도달한다는 것을 어떻게 알 수 있었습니까? ! 내가 놓친 수학적 트릭이 있어야합니다. 무엇입니까?