
Cshoal:在终端里模拟被猎食的鱼群
来源标题:Show HN: Cshoal – A school of fish, hunted by predators, in your terminal
开发者 mcthomas 发布 Cshoal,在终端中用盲文字符渲染约 2000 条沙丁鱼组成的鱼群,并由最多 8 只捕食者追猎。鱼群与捕食者的运动和行为互动均依据 readme 引用的已发表研究,代码由 Claude 编写。用户可通过命令行选项指定鲨鱼、鲸、海豚等捕食者,或关闭捕食者只看鱼群。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
你的终端里有一群鱼,被几只捕食者追逐。大量借鉴了 cbirds 的 --3d 选项。
依赖
- 一个 C99 编译器和 make
- 任何支持 24 位色的 UTF-8 终端模拟器(如果 COLORTERM 为 truecolor),否则 256 色
- 任何支持盲文字符的字体
安装 git clone https://github.com/mcthomas/cshoal cd cshoal make sudo make install
用法 cshoal:你的终端里的一群鱼,被几只捕食者追逐。 用法:cshoal [选项] --predators LIST 只出现这些捕食者,用逗号分隔: shark, whale, dolphins, marlin, thresher, spinner --no-predators 只有鱼群,没有捕食者 -h, --help 打印此帮助 -V, --version 打印版本
行为与交互 屏幕上
- 2,000 条鱼,每条都是 20 厘米的沙丁鱼,跟随其最近的七个邻居(Reynolds 1987;Ballerini 2008)
- 最多同时出现三种捕食者和八只动物
- 捕食者从屏幕外进入和离开,从不穿过镜头
鱼
- 鱼群是一个深度为宽度三分之二的透镜状结构(Gerlotto 2006),巡航速度略低于每秒 4 个身长(Hara 1987)
- 对齐程度随速度增加(Gautrais 2012;Tunström 2013)
- 一条鱼发现捕食者后会在 0.2 秒内达到约每秒 2 米(Bartashevich 2024),并转向偏离捕食者路径约 30 度,将鱼群从其周围分开(Domenici 和 Batty 1997;Pitcher 和 Wyche 1983)
- 警报以每秒 5 到 7 米的速度传播(Marras 2012;Rieucau 2016);大多数鱼转向,约十二分之一的速度加倍(Herbert-Read 2015)
- 受惊的鱼群会收缩、对齐并下潜(Rieucau 2016)
- 受惊的鱼在转向时闪出银色(Pertzelan 2023)
铜鲨
- 以约每秒 1.5 米的速度在鱼群周围和下方盘旋(Porter 2020;Webb 和 Keyes 1982)
- 大约每 20 秒以每秒 4.5 米的速度冲过鱼群(Brunnschweiler 2005),带走 1 或 2 条鱼
- 撕咬持续 0.75 到 1.7 秒(Tricas 和 McCosker 1984,白鲨);约一半的转向会翻滚(Kajiura 2003)
座头鲸
- 从远处和下方以每秒 1.5 到 2 米的速度接近(Gough 2019),倾斜可达 50 度,转向速度最多每秒 16 度(Nemeth 2025)
- 以约每秒 4 米的速度突进,直到鱼群边缘都闭着嘴,延迟鱼的逃逸(Cade 2020;Simon 2012)
- 下颚张开约 50 度;喉部扩张到其围度的两倍(Cade 2016;Arnold 2005)
- 嘴在 1.2 秒时达到最大张开度,保持每次突进随机抽取的时长(平均 2.1 秒),平均张开 4.8 秒(Cade 2016)
- 捕获率受嘴张开程度限制
- 突进前呼出一团气泡(Hain 1982)
- 大约每 50 秒突进一次
长吻真海豚
- 驱赶鱼群:以每秒 3 米的速度在距鱼群边缘 2.5 米处环绕,其中一半在下方(Benoit-Bird 和 Au 2009;Neumann 和 Orams 2003;Vaughn-Hirshorn 2013)
- 以 2 或 3 只为一波攻击,间隔 0.4 秒,从不同方向以每秒 5 米的速度攻击,然后暂停约 7 秒(Thiebault 2016,来自 72 个饵球的攻击记录)
- 每次经过带走 1 到 5 条鱼(Würsig 和 Würsig 1980)
- 在摄食转向中翻滚(Maresh 2004);游泳运动学来自 Fish 2003;身体测量来自 Ngqulana 2017
- 偶尔鱼群下方的一只会释放一串气泡,上方的鱼会逃散(Neumann 和 Orams 2003)
条纹枪鱼
- 以鱼群的速度保持在约 5 米外,一次一只地攻击(Hansen 2022;Pacher 2024)
- 下一个攻击者的条纹在攻击前 10 秒或更久就会变亮(Burns 2024)
- 80% 的情况下从侧面或后方攻击,速度为每秒 3.35 米(Bartashevich 2024)
- 三分之一的攻击使用吻部,主要用于轻触单条鱼;20% 的攻击能捕到鱼(Hansen 2020)
- 尾部摆动和鳍姿取自旗鱼(Marras 2015)
远洋长尾鲨(Oliver 2013)
- 以约每秒 1.1 米的速度盘旋,在鱼群边缘突进并刹车
- 吻部下倾 34 度,在 0.39 秒内将尾巴甩过头顶;尾尖产生一小串气泡
- 三分之一的拍击命中,击晕 2 到 7 条鱼,然后一条一条地吃掉
旋转鲨
- 大约每 25 秒以 75 度和每秒 6 米的速度从鱼群中心升起,旋转 3 次(Compagno 1984;Brunnschweiler 2005)
交互
- 鲸鱼冲散鱼群后,鲨鱼会更快地冲撞,并避开鲸鱼
- 有海豚在场时,鲨鱼一半的冲撞发生在海豚攻击后 2 秒内,正如沙丁鱼大迁徙中 48% 的情况(Thiebault 2016)
- 被击晕的鱼游动紊乱,忽略邻居,很快被吃掉,通常被等待的枪鱼吃掉
- 被向上驱赶的鱼会释放一些气泡,在鲱鱼中有记录(Nøttestad 1998),但在沙丁鱼中尚未记录
与文献的差异
- 这六个物种并不共享同一分布范围:南非、下加利福尼亚、菲律宾
- 鲸鱼是半尺寸(33 条鱼长,而非 55),过滤 20 秒而非 45 秒,最多带走鱼群的 10%,而非 33% 到 50%
- 突进速度约为每秒 4 米(Cade 2020);Cade 2016 给出座头鲸捕食鱼类时为每秒 2.5 米
- 鲸鱼张口保持时间的分布及其 6 秒上限是假设的;只测量了均值和标准差
- 6 只海豚和 3 条枪鱼,而真实群体为 15 只以上和 12 到 40 条;枪鱼在 5 米外等待,而非 9 米
- 未测量:真鲨在饵球处、旋转鲨摄食、长尾鲨突进速度、击晕持续时间
- 没有水面:海豚不呼吸,鱼群也不会被推向水面
- 银色闪光标记受惊的鱼,而非跟随太阳角度
- 环绕鱼群的捕食者从镜头一侧经过鱼群下方
- 鱼对七个邻居等权重,并通过转向保持间距;真实鱼类偏爱前方的邻居并调整速度
来源 模型 Reynolds 1987, Flocks, Herds, and Schools: A Distributed Behavioral Model, SIGGRAPH
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。