돌림판
항목을 입력하고 휠을 돌리세요
입력창의 각 줄이 하나의 조각이 됩니다. 돌리기를 누르면 휠이 돌다가 천천히 멈추고, 화살표가 가리키는 조각이 당첨됩니다.
아무것도 업로드되지 않습니다. 입력한 항목은 브라우저 탭 안에만 존재하며 탭을 닫으면 사라집니다.
당첨자는 휠이 움직이기 전에 이미 정해집니다
이는 겉보기보다 훨씬 중요한 사실입니다.
가장 직관적인 방식은 휠에 무작위 힘을 가한 뒤 마찰로 서서히 멈추게 하고, 화살표 아래에 남은 항목을 읽는 것입니다. 하지만 그런 방식은 결과가 최종 각도의 반올림과 기기가 그려낸 애니메이션 프레임 수에 좌우됩니다 — 느린 폰과 빠른 데스크톱이 똑같이 공정하지는 않을 것입니다.
이 휠은 정반대로 작동합니다. 먼저 crypto.getRandomValues()로 당첨
항목을 뽑은 다음, 그 조각이 화살표 아래에 오도록 정확한 회전값을
계산해 애니메이션을 재생합니다. 회전은 연출일 뿐이며, 결과는 이미
정해져 있고 그 과정이 균등함을 증명할 수 있습니다.
그래서 조각이 몇 개든, 라벨이 얼마나 길든, 어떤 기기를 쓰든 모든 조각은 정확히 같은 확률을 가집니다.
당첨자 제거, 또는 휠을 그대로 유지
당첨자 제거를 켜면 돌릴 때마다 당첨된 항목이 휠에서 빠집니다. 반복해서 돌리면 1등, 2등, 3등 순서가 정해집니다. 여러 경품을 뽑거나 사람들 앞에서 발표 순서를 정할 때 적합합니다.
꺼두면 휠이 그대로 유지되어 같은 항목이 두 번 당첨될 수 있습니다 — “오늘 저녁 뭐 먹지” 같은 상황에 어울립니다.
항목을 반복해 휠에 가중치 주기
휠은 모든 조각에 같은 확률을 부여하므로, 특정 항목을 우대하는 방법은 조각 수를 늘리는 것입니다. 같은 항목을 두 번 적으면 확률이 두 배가 됩니다.
| 항목 | 조각 수 | 피자의 당첨 확률 |
|---|---|---|
| 피자, 스시, 타코 | 3 | 33% |
| 피자, 피자, 스시, 타코 | 4 | 50% |
| 피자 ×3, 스시, 타코 | 5 | 60% |
같은 라벨이 휠에 여러 번 나타나는 것은 정직한 방식입니다 — 지켜보는 사람 누구나 조각 수를 세어 가중치를 직접 확인할 수 있으며, 당신의 말만 믿을 필요가 없습니다. 이렇게 눈에 보이는 것이 휠의 핵심이며, 숨겨진 가중치는 그 의미를 없애버립니다.
조각으로 표현하기 어려운 세밀한 가중치가 필요하다면, 난수 생성기가
숫자:가중치 형식을 직접 받을 수 있습니다.
조각을 몇 개까지 읽을 수 있을까
항목이 늘어날수록 조각은 작아지고, 라벨은 반지름을 따라 그려지므로, 기술적 한계보다 훨씬 낮은 실질적인 한계가 있습니다.
- 12개까지 — 여유 있게 한눈에 라벨을 읽을 수 있음
- 12~20개 — 읽을 수는 있지만 긴 이름은 빽빽해지기 시작함
- 20~30개 — 짧은 라벨에만 실용적
- 30개 이상 — 휠은 여전히 작동하고 추첨도 여전히 공정하지만, 돌아가는 동안 아무도 읽을 수 없음
18자를 넘는 라벨은 조각 안에 들어가도록 말줄임표로 잘립니다. 목록이 너무 길어서 휠을 읽기 어렵다면, 이름 뽑기가 연출 없이 같은 역할을 해줍니다.
접근성과 애니메이션
이 휠은 prefers-reduced-motion 설정을 존중합니다. 시스템에서 동작
줄이기를 요청한 경우, 회전 애니메이션이 생략되고 당첨자가 즉시
표시됩니다. 결과는 어느 쪽이든 동일합니다 — 추첨 자체는 애니메이션에
전혀 의존하지 않기 때문입니다.
당첨자는 라이브 영역에도 안내되므로, 스크린 리더 사용자가 따로 찾지 않아도 결과를 바로 들을 수 있습니다.
돌림판이 쓰이는 곳
- 결정하기 — 점심 메뉴, 영화, 어떤 집안일을 할지
- 라이브 스트림과 교실 — 돌아가는 과정 자체가 목적이며 사람들이 지켜봄
- 경품 추첨 — 눈에 보이는 추첨은 숫자만 나타나는 것보다 관객에게 더 공정하게 느껴짐
- 아이스브레이커 — 다음 질문에 누가 답할지 정하기