Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
3fad156
시작 — 패턴 연구 99판
claude Nov 2, 2026
ac5c4fb
큰 파도 99판 패스 1 시도: 마루를 두껍게 말고 몸통을 밑이 넓은 물의 산으로
claude Nov 2, 2026
67a747c
큰 파도 99판 패스 1 되돌림: 벽에 거는 사람이 같음
claude Nov 2, 2026
27af898
큰 파도 99판 패스 2 시도: 패스 1 꼴에 몸통 흰 점을 줄이고 배를 파도 발 앞에
claude Nov 2, 2026
f24d68a
큰 파도 99판 패스 2 되돌림: 큐레이터가 같음, 몸통 지적은 막힘
claude Nov 2, 2026
faccc73
큰 파도 99판 패스 3 시도: 마루 손톱을 넷으로 줄여 하늘 틈을 둔 갈고리로
claude Nov 2, 2026
f99af73
큰 파도 99판 패스 3 채택: 마루 손톱이 하늘 틈을 둔 갈고리 넷으로 선다
claude Nov 2, 2026
aa58f81
큰 파도 99판 기록: 패스 3 커밋 적기
claude Nov 2, 2026
7319920
큰 파도 99판 패스 4 시도: 마루 바깥 테에 앞으로 굽은 손가락 열
claude Nov 2, 2026
6a910af
큰 파도 99판 패스 4 채택: 마루 바깥 테가 흰 손가락 톱니로 갈라진다
claude Nov 2, 2026
192cdce
큰 파도 99판 기록: 패스 4 커밋 적기
claude Nov 2, 2026
e0f0f9d
큰 파도 99판 패스 5 시도: 손톱 끝을 세 갈래로 가르고 윗입술 톱니 간격을 흩는다
claude Nov 2, 2026
d68c91e
큰 파도 99판 패스 5 되돌림: 벽에 거는 사람이 같음
claude Nov 2, 2026
450afd3
큰 파도 99판 패스 6 시도: 손톱 끝을 또렷한 세 갈래 갈퀴로
claude Nov 2, 2026
279224d
큰 파도 99판 패스 6 되돌림: 손톱 갈래 지적은 막힘
claude Nov 2, 2026
b4c7fe6
큰 파도 99판 패스 7 시도: 배에 굵은 사공 줄을 세운다
claude Nov 2, 2026
8938702
큰 파도 99판 패스 7 되돌림: 되돌림 셋이 이어져 바퀴를 닫는다
claude Nov 2, 2026
d79a35f
큰 파도 99판 바퀴 끝: 두 번 채점과 장거리 A/B, look-99
claude Nov 2, 2026
7068fe3
큰 파도 99판 기록: 버린 판정 수 바로잡기
claude Nov 2, 2026
f56a6c5
큰 파도 99판 기록: 패스 2 판정 수 바로잡기
claude Nov 2, 2026
f240f07
큰 파도 99판 index.html 다시 짓기
claude Nov 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions incoming/pattern-study/craft/great-wave/log.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,94 @@
- 닮은꼴: 작품 3 은 원작을 닮는 것이 일이라 받지 않음
- 걸린 멈춤: 없음(되돌림 이어짐 둘, 막힘 하나 · ① 큰 파도 몸통 기둥)
- 창작자에게: 큰 파도는 3초 안에 호쿠사이로 읽혀요. 판정이 갈린 곳은 배예요. 패스 5 의 노꾼은 큐레이터와 판화가가 새 판으로 골랐는데 2m 관객 눈에는 갑판 얼룩이었어요

## 99판 (바퀴 97) · 길 a · 시작 3f38fbf
- 정지 프레임 t=2 · 노브 [0, 2, 0, 0.06]
- 같이 도는 바퀴: 없음. 열린 패턴 바퀴 PR 은 이 바퀴 하나였어요(#364 는 패턴 바퀴가 아니고 craft/dracula 만 바꿔요). 앞 바퀴 PR(#358~#365)에 따를 글도 없어요

### 패스 1
- 비평 1: 큐레이터 7 · 판화가 7 · 벽에 거는 사람 7 · 블라인드 읽기 3/3(「호쿠사이 『후가쿠 36경』의 가나가와 해변의 높은 파도 아래, 굵은 윤곽선과 평평한 색면의 목판화」)
- 확인 차례: ① 큰 파도 몸통이 같은 폭 기둥과 가는 갈고리, 안쪽 x 20~55 y 30~81 이 빈 크림(큐레이터 가장 약한 것, 벽에 거는 사람 ①) 예
- 고칠 것: ① 큰 파도 몸통 · 98판에서 막힌 지적이에요. 이번엔 몸통 벽 대신 파도 꼴을 바꿔요. 마루 밑면을 y 23 에서 y 30 언저리로 내려 말린 마루를 두껍게 하고, 입술을 (50,38) 로 내리고, 얼굴을 목(x 18, y 60)에서 발(x 31, y 120)까지 오른쪽으로 비껴 밑이 넓은 물의 산으로 세워요. 앞 물결은 원작처럼 큰 파도 발 앞에 그리고, 후지는 골 가운데로 다섯 칸 옮겨요 · (10,44)~(10,100) (36,55)
- 짚은 렌즈: 큐레이터 7점 「같은 폭의 기둥과 가는 갈고리」 · 벽에 거는 사람 7점 「덮쳐 오는 물덩어리보다 물음표 모양 갈고리」
- 기대: pair-zoom 과 pair-led 에서 큰 파도가 위에서 굵게 말리고 아래로 갈수록 넓어지며, 안쪽 크림 하늘이 작아지고, 앞 물결의 ∧ 가 큰 파도 발 앞에 온전히 남음
- 바뀐 LED: 정지 1816 · 10초 3799 · 노브 3290 · 팔레트 16→15색
- A/B: 큐레이터 새(정순 「발톱이 입술 밖으로 늘어져 움켜쥐는 손가락」, 역순 「마루가 넘어와 발톱 물보라를 줄줄이 늘어뜨림」) · 판화가 새(정순 「갈퀴가 입술 아래 매달려 손가락 모양으로 새긴 선」, 역순 「물마루 안쪽이 남색 띠로 꽉 찬 덩어리」) · 벽에 거는 사람 같음(정순 옛 「몸통 흰 점이 적어 덜 어수선하고 배가 더 길다」, 역순 새 「파도 팔이 두꺼워 후지산을 감싸는 짜임」)
- 버린 판정: 잡기 실패 4(판화가 정순 둘, 벽에 거는 사람 정순 둘). 두 번째 다시 받기부터 「두 판이 화소 하나까지 똑같은 짝도 섞여 있어요」 한 줄을 더함
- 되돌림. 몸통 꼴은 세 렌즈가 다 새 판으로 읽었는데, 얼굴이 내려온 만큼 몸통 흰 점이 정지 42 → 63 으로 늘고 배 고물이 파도 뒤로 x 28 까지 숨었어요

### 패스 2
- 비평 1 그대로(패스 1 되돌림)
- 확인 차례: 패스 1 과 같은 지적(패스 1 에서 받음)
- 고칠 것: ① 큰 파도 몸통 · 패스 1 과 같은 지적의 둘째 고침. 패스 1 의 꼴(두꺼운 마루, 밑이 넓은 몸통, 앞 물결을 발 앞에, 후지를 골 가운데로)은 그대로 두고, 벽에 거는 사람이 옛 판을 고른 두 곳을 같이 바로잡아요. 흰 물방울은 입술에서 얼굴을 따라 70 칸 안에만 두어 몸통 흰 점을 옛 판보다 적게(정지 42 → 39) 하고, 배는 원작처럼 큰 파도 발 앞에 그려 고물이 숨지 않게 해요 · (10,44)~(10,100) (36,55)
- 짚은 렌즈: 패스 1 과 같음
- 기대: pair-zoom 과 pair-led 에서 큰 파도가 굵게 말리고 아래로 넓어지며, 아래 몸통의 흰 점은 옛 판보다 적고, 배는 x 21~44 길이 그대로 파도 발 앞에 놓임
- 바뀐 LED: 정지 1776 · 10초 3776 · 노브 3264 · 팔레트 16→15색
- A/B: 큐레이터 같음(정순 새 「발톱이 앞쪽 아래로 늘어지고 후지가 골 가운데」, 역순 옛 「얇은 마루 밑으로 하늘이 파고들고 끝 안쪽 발톱이 또렷」) · 판화가 새(정순 「입술에서 매달려 뻗는 호쿠사이의 새긴 발톱」, 역순 「검은 테에 흰 끝을 단 갈퀴가 줄지어」) · 벽에 거는 사람 새(정순 「손가락이 골 쪽으로 길게 늘어짐」, 역순 「검은 테 두른 흰 발톱이 하늘 쪽으로」)
- 버린 판정: 없음
- 되돌림. 같은 지적의 둘째 되돌림이라 막힘. 98판과 합쳐 이 지적은 다섯 번 고쳐 패스 하나(98판 패스 3)만 들어갔어요. 두꺼운 마루와 발톱은 패스 2 의 여섯 판정 가운데 다섯이 새로 골랐고, 큐레이터 역순만 얇은 마루 밑의 하늘을 골랐어요

### 패스 3
- 비평 1 그대로(패스 2 되돌림)
- 확인 차례: ① 마루 끝 갈퀴 거품이 남색 테 두른 흰 덩어리로 뭉개져 손가락으로 안 갈라짐(판화가 가장 약한 것, 큐레이터 ⑤ 「갈퀴가 화소 뭉치라 손톱 가지가 안 보임」, 벽에 거는 사람 ⑤ 「갈라진 손가락이 아니라 둥근 덩어리」) 예
- 고칠 것: ① 큰 파도 손톱 · 마루 밑의 손톱 여섯(5 칸 간격, 곁가지 달림)을 손톱 넷(입술 하나와 밑면 셋, 9 칸 간격)으로 줄이고, 곁가지를 떼고, 길이를 7~11 칸으로 늘이고 뿌리 쪽 60% 를 두 칸 굵기로 둬요. 손톱 사이로 하늘이 보여 손가락 하나하나가 남색 테 안의 흰 갈고리로 서요 · (36,25) (44,30) (55,34)
- 짚은 렌즈: 판화가 7점 「흰 덩어리 몇 개로 뭉개져 손가락처럼 갈라져 내리꽂히는 모양이 없다」 · 큐레이터 7점 「갈퀴가 손톱으로 갈라지지 않음」 · 벽에 거는 사람 7점 「갈라진 손가락이 아니라 둥근 덩어리」
- 기대: pair-zoom 과 pair-led 에서 마루 밑 x 27~45 에 흰 갈고리 셋이 하늘 틈을 두고 따로 늘어지고, 입술 (48~55, 30~35) 에 끝이 굽은 손톱 하나가 남음
- 바뀐 LED: 정지 172 · 10초 990 · 노브 508 · 팔레트 16→16색
- A/B: 큐레이터 새(정순 「윤곽선 또렷한 갈고리와 아래로 말린 끝이 움켜쥐는 손톱」, 역순 「검은 테 두른 갈고리 발톱이 3초 안에 호쿠사이로」) · 판화가 새(정순 「흰 속을 한 화소 외곽선이 두른 갈고리 셋과 끝 발톱 하나」, 역순 「진한 외곽선 안의 갈고리 손톱」) · 벽에 거는 사람 새(정순 「흰 갈고리가 또렷하고 옛 판은 흩어진 흰 점」, 역순 「따로 떨어진 손톱 가닥이 2m 앞에서도 발톱으로」)
- 버린 판정: 잡기 실패 3(판화가 정순, 판화가 역순, 벽에 거는 사람 역순 하나씩)
- 채택. 커밋 f99af73

### 패스 4
- 비평 2: 큐레이터 7 · 판화가 7 · 벽에 거는 사람 7 · 블라인드 읽기 3/3(「호쿠사이 후가쿠 36경의 높은 파도를 세로로, 굵은 윤곽선과 납작한 색면의 목판화, 갈고리 손가락처럼 갈라진 물마루 끝」)
- 확인 차례: ① 물마루 윗입술이 매끈한 흰 띠이고 아래 갈퀴도 끝이 안 갈라진 고리 몇 개(판화가 가장 약한 것, 큐레이터 가장 약한 것) 예
- 고칠 것: ① 큰 파도 마루 바깥 테 · 마루 등의 흰 테(x 14~52) 바깥으로 손가락 열을 6 칸마다 내요. 길이는 등 쪽 2.4 칸에서 입술 쪽 4.8 칸까지 늘고, 끝은 입술 쪽으로 굽어 남색 테 안의 흰 갈퀴로 서요 · (30,8) (31,27) (36,26) (41,29)
- 짚은 렌즈: 판화가 7점 「윗입술은 남색 선 한 줄을 두른 매끈한 흰 띠」 · 큐레이터 7점 「끝이 갈라지지 않은 둥근 덩어리 셋」
- 기대: pair-zoom 과 pair-led 에서 마루 등 바깥선이 매끈한 호에서 앞으로 굽은 흰 손가락 열의 톱니로 바뀌고, 입술에 가까울수록 손가락이 길어짐
- 바뀐 LED: 정지 104 · 10초 1100 · 노브 379 · 팔레트 16→16색
- A/B: 큐레이터 새(정순 「마루 윗선과 끝을 갈고리 같은 흰 물보라 손가락으로 톱니지게」, 역순 「흰 물보라 손톱이 톱니처럼 솟아 갈퀴 마루로 바로 읽힘」) · 판화가 새(정순 「흰 거품 갈퀴가 톱니처럼 끊어 목판의 갈퀴 결」, 역순 「검은 윤곽선 안의 흰 거품 갈퀴를 톱니처럼 새김」) · 벽에 거는 사람 새(정순 「꼭대기에 거품 발톱이 톱니처럼 살아 있음」, 역순 「2m 앞에서도 거품 손톱으로 읽히고 눈이 머물 디테일」)
- 버린 판정: 잡기 실패 1(벽에 거는 사람 정순)
- 채택. 커밋 6a910af

### 패스 5
- 비평 3: 큐레이터 7 · 판화가 6 · 벽에 거는 사람 7 · 블라인드 읽기 3/3(「호쿠사이 후가쿠 36경의 큰 파도를 세로로 세운 우키요에 목판화, 손톱 같은 물보라로 부서지는 파도 곡선」)
- 확인 차례: ① 마루 윗가장자리가 같은 간격 톱니라 장식 테두리처럼 정돈되고, 밑 갈퀴는 갈래 없는 갈고리라 U 같은 글자로 읽힘(큐레이터 가장 약한 것, 판화가 ①, 벽에 거는 사람 ①) 예
- 고칠 것: ① 큰 파도 손톱 · 패스 3·4 에 이은 셋째 손톱 고침이고 지적은 새것이에요. 밑 갈퀴 넷은 끝을 뒤로 말지 않고 길이 60% 에서 세 갈래 부채로 갈라요. 윗입술 손가락 열은 6 칸 같은 간격 대신 4~7 칸으로 흩고 길이도 2.4~5 칸으로 고르지 않게 둬요 · (23,7) (29,5) (36,6) (43,8) (32,27) (37,24) (41,28)
- 짚은 렌즈: 큐레이터 7점 「6~7칸 간격으로 똑같이 되풀이되는 톱니 테두리와 글자처럼 보이는 갈고리」 · 판화가 6점 「갈고리 셋이 U 글자처럼」 · 벽에 거는 사람 7점 「U·W 꼴 방울 두셋」
- 기대: pair-zoom 과 pair-led 에서 마루 밑 갈퀴 끝이 세 갈래 손가락으로 벌어지고 U 꼴이 사라지며, 입술 끝 (48~58, 30~36) 에 갈래진 손톱이 서고, 윗입술 톱니의 간격이 고르지 않음
- 바뀐 LED: 정지 174 · 10초 968 · 노브 412 · 팔레트 16→16색
- A/B: 큐레이터 새(정순 「발톱이 y 32 까지 늘어지고 립 끝이 여러 갈래 손가락」, 역순 패널 짝 같음 · 8배 짝 「발톱이 더 여러 갈래로 갈라져 늘어짐」) · 판화가 역순 새 「손가락 여러 갈래로 갈라짐」, 정순 버림 · 벽에 거는 사람 같음(두 순서 다 「다른 곳을 못 찾음」)
- 버린 판정: 잡기 실패 1(판화가 정순). 짚은 벽에 거는 사람이 같음이라 결과가 정해져 다시 받지 않음
- 되돌림. 8배 그림에서는 갈래가 읽혔지만 바뀐 LED 174 개가 2m 패널에서는 보이지 않았어요

### 패스 6
- 비평 3 그대로(패스 5 되돌림)
- 확인 차례: 패스 5 와 같은 지적(패스 5 에서 받음)
- 고칠 것: ① 큰 파도 손톱 · 패스 5 와 같은 지적의 둘째 고침. 패스 5 의 갈래는 길이의 45% 로 짧아 2m 패널에서 안 보였어요. 이번엔 손톱 줄기를 12·10·9.5·8 칸으로 늘이고, 끝에서 0.75 라디안씩 벌어진 3.2 칸짜리 갈퀴 셋으로 가르고, 윗입술 손가락은 3~5.4 칸으로 굵게 흩어요 · (23,7) (29,5) (36,6) (43,8) (32,27) (37,24) (41,28)
- 짚은 렌즈: 패스 5 와 같음
- 기대: pair-led 에서도 마루 밑 손톱마다 끝에 흰 갈퀴 셋이 벌어져 보이고, 입술 끝 (46~58, 28~36) 이 세 갈래 손톱으로 서고, 윗입술 톱니 길이가 고르지 않음
- 바뀐 LED: 정지 231 · 10초 1516 · 노브 605 · 팔레트 16→16색
- A/B: 큐레이터 새(정순 「흰 손가락이 이어져 발톱 거품으로 읽힘」, 역순 「갈퀴 물보라 손가락이 흰색으로 차 있음」) · 판화가 역순 새 「외곽선 두른 흰 갈퀴가 더 많고 크게 늘어짐」, 정순 버림 · 벽에 거는 사람 같음(정순 새 「하얀 손가락으로 꽉 차 2m 앞에서도 또렷」, 역순 옛 「네모난 ㄴ자 덩어리와 넓은 흰 띠로 뭉쳐 글자처럼」)
- 버린 판정: 잡기 실패 2(벽에 거는 사람 역순, 판화가 정순). 판화가 정순은 결과가 정해진 뒤라 다시 받지 않음
- 되돌림. 같은 지적의 둘째 되돌림이라 막힘. 갈래를 굵히니 2m 에서 흰 덩어리로 뭉쳐 읽혔어요

### 패스 7
- 비평 3 그대로(패스 6 되돌림)
- 확인 차례: ① 배와 노꾼이 주황 사선 한 줄이라 2m 에서 판자나 모래톱(벽에 거는 사람 가장 약한 것, 큐레이터 ①) 예
- 고칠 것: ① 배 · 98판 패스 5 에서 되돌린 노꾼(정지 73 LED, 2m 에서 「갑판의 얼룩」)을 굵게 다시 세워요. 선체를 세 줄에서 네 줄로 두껍게 하고, 사공을 4 칸마다 하나씩 두 칸 너비 남색 등(뱃전 위아래 석 줄)과 그 위 두 칸 옅은 머리로 세워 2m 에서 덩어리로 보이게 해요 · (23,105) (34,101) (45,96)
- 짚은 렌즈: 벽에 거는 사람 7점 「주황 사선 한 줄로 줄어 판자나 모래톱」 · 큐레이터 7점 「사공이 없는 주황 널빤지 띠」
- 기대: pair-led 에서 배 위에 남색 등과 옅은 머리의 사공 다섯이 4 칸 간격으로 서고, 선체가 한 줄 두꺼워짐
- 바뀐 LED: 정지 96 · 10초 158 · 노브 130 · 팔레트 16→16색
- A/B: 큐레이터 새(정순 「배 위에 남색 덩어리로 노꾼들이 웅크림」, 역순 「노꾼 자리의 어두운 점들이 찍혀 사람이 탄 배」) · 판화가 같음(정순 옛 「남색 얼룩이 박힌 뭉툭한 주황 덩어리」, 역순 새 「짙은 쪽빛 덩어리로 웅크린 노꾼들」) · 벽에 거는 사람 옛(정순 옛 「어두운 얼룩이 섞인 뭉툭한 주황 덩어리」, 역순 버림 · 진짜 짝은 옛 「꺼진 듯한 어두운 점이 고장 난 LED 처럼」)
- 버린 판정: 잡기 실패 1(벽에 거는 사람 역순). 짚은 벽에 거는 사람이 정순에서 옛이라 결과가 정해져 다시 받지 않음
- 되돌림. 되돌림이 셋(패스 5, 6, 7) 이어져 바퀴를 일찍 닫아요. 98판 패스 5 와 같은 길이에요. 큐레이터는 두 바퀴 다 노꾼을 새로 골랐고, 2m 렌즈는 굵힌 남색 등도 얼룩으로 봤어요

## 바퀴 끝
- 패스 7 (채택 2 · 되돌림 5 · 막힘 2). 끝 판은 패스 4 의 판(6a910af 의 파일)이에요. 되돌림이 셋(패스 5·6·7) 이어져 8 패스 전에 닫았어요
- 두 번 채점: 큐레이터 7,7 · 판화가 7,7 · 벽에 거는 사람 7,7 · 블라인드 읽기 3/3(「호쿠사이의 가나가와 앞바다의 높은 파도 아래, 평평한 색면과 윤곽선의 목판화, 갈고리 같은 물보라」)
- 두 번 채점의 가장 약한 것: 큐레이터 ① 배 「뱃머리도 노꾼도 없는 두 줄 주황 막대」, ① 손톱 「같은 간격 톱니라 병뚜껑처럼, 립 아래 U·J 고리」 · 판화가 ④ 「1px 남색 고리가 U, J 글자로」, ① 「고른 둥근 혹 여섯과 글자처럼 선 갈고리 셋」 · 벽에 거는 사람 ① 몸통 「굵기 일정한 관과 빈 크림 터」, ① 배 「나무토막」
- 장거리 A/B(바퀴 시작 3f38fbf 대비): 큐레이터 새 · 판화가 새 · 벽에 거는 사람 새(세 렌즈 다 「마루 윗가장자리가 흰 톱니 거품으로 갈라지고 립 아래 갈고리 발톱」). 버린 판정 1(판화가 정순 잡기 실패)
- 닮은꼴: 작품 3 은 원작을 닮는 것이 일이라 받지 않음
- 걸린 멈춤: 되돌림 셋 이어짐. 막힘 둘(① 큰 파도 몸통, ① 손톱 갈래). 막힌 층이 ① 이라 「한 층 앞」이 없어요
- 버린 판정(바퀴 전체): 잡기 실패 13
- 창작자에게: 마루가 이번 바퀴에 바뀌었어요. 밑에 하늘 틈을 둔 갈고리 넷과 윗입술의 흰 손가락 열이 들어가 세 렌즈가 다 바퀴 시작보다 낫다고 봤어요. 배의 노꾼은 두 바퀴째 2m 렌즈가 「얼룩」으로 봐서 못 들어갔어요
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions incoming/pattern-study/index.html

Large diffs are not rendered by default.

37 changes: 30 additions & 7 deletions incoming/pattern-study/patterns/great-wave.js
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,8 @@ export function setup(params) {
const frontPoly = front.concat([[FRONT[FRONT.length - 1][0], 200], [FRONT[0][0], 200]]);
P.face = face;
P.faceN = normals(face, wave);
P.rim = back;
P.rimN = normals(back, wave);
P.swell = swell;
P.swellN = normals(swell, swellPoly);
P.front = front;
Expand Down Expand Up @@ -235,10 +237,13 @@ export function setup(params) {
P.zone[p] = zone;
}
}
// Claws: along the great wave's lip, along the top of the swell, and on
// the small wave's peak, as [curve, sample, length, side].
// Claws: four long talons under the great wave's lip, set far enough apart
// for the sky to show between them, a row of fingers along the crest's
// outer rim, short ones along the top of the swell, and three on the small
// wave's peak, as [curve, sample, length, side].
P.claws = [];
for (let s = 0.5; s < CREST; s += 5) P.claws.push([0, Math.round(s / STEP), 6.5 * (1.25 - (0.6 * s) / CREST) * (P.claws.length % 2 ? 0.8 : 1), 1]);
for (const [s, l] of [[0.5, 11], [9, 10], [18, 9], [27, 7]]) P.claws.push([0, Math.round(s / STEP), l, 1]);
for (let s = 8; s < 62; s += 6) P.claws.push([3, P.rim.length - 1 - Math.round(s / STEP), 2.4 + 2.4 * (1 - s / 62), 1]);
for (let s = 9; s < 24; s += 4) P.claws.push([1, Math.round(s / STEP), 3.2, -1]);
for (const s of [-3.5, 0, 3.5]) P.claws.push([2, Math.round((P.peak + s) / STEP), 2.6, s < 0 ? -1 : 1]);
P.spray = [];
Expand All @@ -253,7 +258,7 @@ export function setup(params) {
}

function curveOf(P, c) {
return c === 0 ? [P.face, P.faceN] : c === 1 ? [P.swell, P.swellN] : [P.front, P.frontN];
return c === 0 ? [P.face, P.faceN] : c === 1 ? [P.swell, P.swellN] : c === 2 ? [P.front, P.frontN] : [P.rim, P.rimN];
}

// Where a claw's fingertip is now, for the spray to fall from.
Expand Down Expand Up @@ -390,7 +395,8 @@ function boat(P) {
}

// A claw: a finger of foam that reaches out from the crest and hooks back at
// the tip, with a shorter finger either side of it.
// the tip. The great wave's talons stay two LEDs wide for longer and stand
// alone; the others have a shorter finger beside them.
function claw(P, i) {
const [c, j, len0, side] = P.claws[i];
const [curve, nr] = curveOf(P, c);
Expand All @@ -399,19 +405,36 @@ function claw(P, i) {
// Each claw opens and closes on its own beat, in steps of a fifth of a second.
const beat = Math.floor(P.t * 5) / 5;
const grow = 0.85 + 0.2 * Math.sin(beat * 0.6 + i * 1.7) + P.brk * 0.6 + P.crash * 0.6;
if (c === 3) {
// A finger on the crest's outer rim: two LEDs wide at the root, leaning towards the
// lip and curling over at the tip.
const len = len0 * grow;
let ang = Math.atan2(ny, nx) + 0.4;
let x = ax + nx * 0.4;
let y = ay + ny * 0.4;
for (let s = 0; s < len; s += 0.4) {
put(P, x, y, FOAM);
if (s < 1.2) put(P, x - Math.sin(ang), y + Math.cos(ang), FOAM);
ang += 0.28;
x += Math.cos(ang) * 0.4;
y += Math.sin(ang) * 0.4;
}
return;
}
// The finger: two LEDs wide at the root, one at the end, hooking back.
const len = len0 * grow;
let ang = Math.atan2(ny, nx) - side * 0.5;
let x = ax - nx * 0.6;
let y = ay - ny * 0.6;
for (let s = 0; s < len + 0.6; s += 0.4) {
put(P, x, y, FOAM);
if (s < len * 0.45) put(P, x - Math.sin(ang) * side, y + Math.cos(ang) * side, FOAM);
if (s < len * (c === 0 ? 0.6 : 0.45)) put(P, x - Math.sin(ang) * side, y + Math.cos(ang) * side, FOAM);
ang += side * (s < len * 0.5 ? 0.02 : 0.17);
x += Math.cos(ang) * 0.4;
y += Math.sin(ang) * 0.4;
}
// A short finger on its far side.
// A short finger on its far side, but not on the great wave's own talons.
if (c === 0) return;
ang = Math.atan2(ny, nx) - side * 1.3;
x = ax - nx * 0.3 - Math.sin(ang) * side;
y = ay - ny * 0.3 + Math.cos(ang) * side;
Expand Down
Loading