返回资讯中心
外部精选
软件工程
#开发者实时流

Cshoal:在终端里模拟被猎食的鱼群

来源标题:Show HN: Cshoal – A school of fish, hunted by predators, in your terminal

开发者 mcthomas 发布 Cshoal,在终端中用盲文字符渲染约 2000 条沙丁鱼组成的鱼群,并由最多 8 只捕食者追猎。鱼群与捕食者的运动和行为互动均依据 readme 引用的已发表研究,代码由 Claude 编写。用户可通过命令行选项指定鲨鱼、鲸、海豚等捕食者,或关闭捕食者只看鱼群。

Hacker News 最新Bondi_Blue2026/11/15 · 今天27 分钟阅读

以下正文由 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 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →