风车模型与代码

news2024/11/20 6:13:30

这个模型使用NetLogo乌龟来重复绘制圆圈,定期转动,以便显示出类似万花筒或风车的效果。这是一个演示,展示了一组简单的代理规则如何产生复杂而美丽的图案。

内部工作原理非常简单。创建了许多乌龟,它们的笔都是放下的(无论它们走到哪里,都会留下痕迹)。在每个时刻,每只原始乌龟都会孵化出一只新的“绘画乌龟”,它的唯一工作就是画一个圆圈,然后立即死亡。在孵化之间,原始乌龟唯一要做的就是缓慢旋转。虽然模型内置了两种图案,但两种图案都遵循相同的规则,唯一的区别是PATTERN-2中一半的绘画乌龟逆时针画圆圈,而PATTERN-1中所有乌龟都顺时针画圆圈。

如何使用

NUM-TURTLES滑块实际上决定了万花筒的“臂”或“花瓣”的数量。首先将该滑块设置为所需值(10是可以的)。

接下来,将COLOR-SEP设置为某个值。 COLOR-SEP确定了乌龟(因此也是万花筒)将采用的颜色范围。值越高,范围越小。要获得一个漂亮的三色万花筒,将COLOR-SEP设置为25。COLOR-SEP与颜色范围之间的这种反比关系是因为COLOR-SEP充当一个常数,用来除以乌龟的颜色。

设置好NUM-TURTLES和COLOR-SEP后,按下SETUP按钮,准备好开始绘制模型。

然后,选择你想要的图案。每个图案都有自己的永久按钮来控制它。PATTERN-1让万花筒的“臂”都顺时针螺旋,而PATTERN-2让万花筒的“臂”顺时针和逆时针螺旋,产生了稍微复杂的设计。

最后,你可以改变这个模型展示的颜色分布。COLOR-SHIFT按钮将增加或减少乌龟使用的COLOR-SEP的值,这个值在内部保存为CURR-COLOR-SEP。因此滑块值本身并没有改变,但乌龟所查看的数字不断变化。这个数字会随机改变一小部分。INCREASE-COLOR?开关确定CURR-COLOR-SEP是增加(true)还是减少(false)。

你还有一个监视器CURR-COLOR-SEP,它会显示该变量的值,这样你就知道它已经被改变了,改变了多少。

代码

globals [ curr-color-sep ]   ; spread of the colors in the kaleidoscope

; INITIALIZATION PROCEDURES
to setup
  clear-all
  set-default-shape turtles "circle"
  ; the patterns assume evenly spaced turtles
  create-ordered-turtles num-turtles [ pen-down ]
  set curr-color-sep color-sep
  reset-ticks
end


; RUN-TIME PROCEDURES
; First Pattern
; Turn a bit right, hatch a turtle which draws a circle then dies
to pattern-1
  ask turtles [
    rt 1
    hatch 1 [
      set color 5.375 * ((count turtles - 1) / curr-color-sep) + 10
      right-circle
      die
    ]
  ]
  every 1 [ if color-shift? [ color-shift ] ]
  tick
end

; Second Pattern
; Half our turtles do Pattern 1; the other half do the same,
; except mirrored (they turn left circles)
to pattern-2
  ask turtles [
    ifelse (who mod 2) = 0 [
      rt 1
      hatch 1 [
        set color 5.375 * ((count turtles - 1) / curr-color-sep) + 10
        right-circle
        die
      ]
    ][
      lt 1
      hatch 1 [
        set color 5.375 * ((count turtles - 1) / curr-color-sep) + 10
        left-circle
        die
      ]
    ]
  ]
  every 1 [ if color-shift? [ color-shift ] ]
  tick
end

; Spin a circle, clockwise
to right-circle
  repeat 36 [
    fd 4
    rt 10
  ]
end

; Spin a circle, counterclockwise
to left-circle
  repeat 36 [
    fd 4
    lt 10
  ]
end

; Change curr-color-sep, to increase colors or decrease colors
; and cap the value at the bottom at 1 and at the top at 60
to color-shift
  ifelse increase-color? [
    set curr-color-sep curr-color-sep + random 3
    if curr-color-sep > 60 [ set curr-color-sep 60 ]
  ][
    set curr-color-sep curr-color-sep - random 3
    if curr-color-sep < 1 [ set curr-color-sep 1 ]
  ]
end


; Copyright 1998 Uri Wilensky.
; See Info tab for full copyright and license.

注意事项

首先,尝试玩耍并观察发生了什么。这个模型的目的是观看时能带来视觉上的愉悦。看看不同的NUM-TURTLES和COLOR-SEP值会产生什么样的效果,探索COLOR-SHIFT如何改变万花筒的外观。哪种效果对你来说最好呢?

这里需要注意的一件重要的事情是COUNT-TURTLES中的数字。它立即变得比NUM-TURTLES大得多,但很快就会定型成一个很大的数字。看看Procedures窗口。这里实际上有两个级别的乌龟命令。最初,在设置时,有NTURTLES数量的乌龟。一旦按下图案按钮之一,这些乌龟(组成了万花筒的“臂”)会重复孵化一个新的乌龟并转动一度。新孵化的乌龟开始绘制圆圈,完成后自毁。由于“臂”乌龟执行命令的速度比孵化的乌龟快得多,它们在一个圆圈的循环中会产生许多乌龟;然而,最终乌龟开始死亡。此时,出生的乌龟数量大致等于任何给定步骤中死亡的乌龟数量。

你还应该注意COLOR-SEP(或者实际上是CURR-COLOR-SEP)如何改变万花筒的外观。打开COLOR-SHIFT?,让CURR-COLOR-SEP变得非常大。然后看看它变小时会发生什么,也许是零或一些负数。

尝试

尝试在代码标签中更改代码。增加每只乌龟绘制的圆圈的大小,或者尝试改变每只乌龟转动的角度大小。

每个乌龟移动或转动一定量,那么让它移动一小段随机量呢(就像COLOR-SHIFT中对curr-color-sep的更改)。你可以添加多少随机性,而仍然保持某种整体结构?

扩展模型

每当“臂”乌龟孵化出一只乌龟时,它会开始绘制一个圆圈。更改hatch命令列表,使其绘制其他一些形状或图案。试着预测出会出现什么整体形状。

目前,两种图案的唯一区别是PATTERN-2让一半的“臂”乌龟画左边的圆圈,另一半画右边的圆圈。编写自己的图案--即,为这些乌龟编写一个新的命令或一组命令。

尝试编写一个完全新的类似模型。在当前模型中,乌龟从NTURTLES乌龟的中心核心中分裂出来。在你的新模型中,也许绘画的乌龟可以围绕某个固定(或移动)的点轨道运动,就像在StarLogoT模型N Bodies和Gravitation中一样。

NETLOGO功能

这很好地利用了乌龟原语hatch。每当孵化一只乌龟时,它会执行hatch命令后面的命令列表。在大多数情况下,这通常只是用来改变新乌龟的颜色或改变一些变量。但并没有理由它不能运行其他一些,可能是很长的,过程,这正是这里发生的事情。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1358463.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文全面了解 LSM BPF (含实战,强烈建议收藏)

本文地址&#xff1a;https://www.ebpf.top/post/lsm_bpf_intro 文章目录 1. 安全背景知识2. 内核安全策略模块通用框架 LSM2.1 LSM 框架介绍2.2 LSM 架构2.3 LSM 中的钩子函数 3. LSM BPF3.1 BCC 实践3.2 libbpf-bootstrap 框架实践 4. 总结5. 附录&#xff1a;LSM 热修内核漏…

Java 支持表情包存储 Incorrect string value: ‘\\xF0\\x9F\\x98\\x8A\\xF0\\x9F...‘

一&#xff0c;前言 最近测试提出了一个比较刁钻的bug 在提交表单数据的时候&#xff0c;支持表情输入&#xff0c;如下 看了一下前端参数&#xff0c;也是正常传递 但是调用接口的时候&#xff0c;后端却报错 Cause: java.sql.SQLException: Incorrect string value: \\xF0…

【python】使用fitz包读取PDF文件报错“ModuleNotFoundError: No module named ‘frontend‘”

【python】使用fitz包读取PDF文件报错“ModuleNotFoundError: No module named ‘frontend’” 正确解决过程 在读取PDF文件时&#xff0c;我使用了fitz包&#xff0c;当使用代码import fitz导入该包时&#xff0c;出现了报错&#xff1a; 于是我直接使用以下代码安装fronten…

技术查漏补缺(1)Logback

一、下定义&#xff1a;Logback是一个开源的日志组件 二、Logback的maven <!--这个依赖直接包含了 logback-core 以及 slf4j-api的依赖--> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><v…

基于Kettle开发的web版数据集成开源工具(data-integration)-介绍篇

目录 &#x1f4da;第一章 官网介绍&#x1f4d7;目标实现&#xff1a;让kettle使用更简单&#x1f4d7;架构及组成 &#x1f4da;第二章 核心功能&#x1f4da;第三章 对比Kettle&#x1f4d7;工具栏位比对&#x1f4d7;工具栏组件内容比对&#x1f4d7;扩展&#xff1a;WebSp…

【CMake】5. 单项目多模块添加第三方依赖示例工程

CMake 示例工程代码 https://github.com/LABELNET/cmake-simple 单项目单模块示例工程 https://github.com/LABELNET/cmake-simple/tree/main/simple-mod-deps 这里引入 C gRPC 依赖&#xff0c;进行示例 1. 多模块工程 第三方依赖 CMake 多模块工程&#xff0c;这是一个…

Android 项目工程配置签名文件

1. Android签名证书(.keystore) Android平台打包发布apk应用&#xff0c;需要使用数字证书&#xff08;.keystore文件&#xff09;进行签名&#xff0c;用于表明开发者身份。   Android证书的生成是自助和免费的&#xff0c;不需要审批或付费。   可以使用JRE环境中的keyto…

mariadb实现主从同步

准备两台服务器 Mariadb-Master&#xff1a;192.168.44.150 Mariadb-Backup&#xff1a;192.168.44.148 安装mariadb&#xff1a; https://blog.csdn.net/qq_50247813/article/details/135402502?spm1001.2014.3001.5502 组从复制原理如下 修改主数据库配置如下 vi /etc/my.…

Kotlin/JS工程构建及编译运行到浏览器

概述 Kotlin/JS 提供了转换 Kotlin 代码、Kotlin 标准库的能力&#xff0c;并且兼容 JavaScript 的任何依赖项。Kotlin/JS 的当前实现以 ES5 为目标。 使用 Kotlin/JS 的推荐方法是通过 kotlin.multiplatform Gradle 插件。它提供了一种集中且便捷的方式来设置与控制以 JavaS…

大数据框架ElasticSearch学习网站,让你的技能瞬间升级!

介绍&#xff1a;Elasticsearch是一个分布式、免费和开放的搜索和分析引擎&#xff0c;它适用于所有类型的数据&#xff0c;包括文本Elasticsearch是一个分布式、免费和开放的搜索和分析引擎&#xff0c;它适用于所有类型的数据&#xff0c;包括文本、数字、地理空间、结构化和…

如何保障开放网络边界安全?

针对开放式网络&#xff08;办事大厅、视频网络等&#xff09;&#xff0c;如何在内部网络构建起一道安全屏障&#xff0c;有效解决广大用户普遍存在的无法保证网络边界完整、边界安全、公共场所终端摄像头管理、办事大厅智能设备&#xff08;一体机等&#xff09;管理、开放场…

1- forecasting at scale论文阅读

目录 1. 什么是时间序列2. 什么是时间序列预测3. 时间序列预测的范式4. 时间序列的专有名词介绍5. 时间序列评估 1. 什么是时间序列 按时间先后顺序出现的有序序列 2. 什么是时间序列预测 点预测&#xff1a;预测未来的某一个时间点&#xff0c;它的值到底是多少&#xff0c…

手机卡丢了不要急,全新补卡攻略赶紧收藏!

最近收到一些小伙伴的留言&#xff0c;手机卡办了好几张&#xff0c;所以就出现了手机卡丢失的现象。手机卡丢失补办更是让一些小伙伴们摸不着头脑。怎么补&#xff1f;如何补&#xff1f;需要哪些资料等等一系列的问题&#xff0c;让许多小伙伴都无从下手。今天小编就给大家整…

当试图回复传入消息时,消息应用程序会闪烁

问题描述&#xff1a; Actual Results: Unable to reply for incoming message as Messaging app flickers and closes. Expected Results: User should be able to send reply for incoming messages. Reproduction Steps: Stay in home screen. Receive an incoming mes…

Vue-2、初识Vue

1、helloword小案列 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>初始Vue</title><!--引入vue--><script type"text/javascript" src"https://cdn.jsdelivr.n…

护眼台灯哪个牌子好?2024年专业护眼台灯品牌排行榜!

近些年来&#xff0c;护眼台灯作为视力健康照明工具愈发受到欢迎&#xff0c;越来越多的人使用护眼台灯取代传统白炽灯&#xff0c;做护眼台灯的产品也是层出不穷。 不过&#xff0c;也有很多人对护眼台灯的效果保持怀疑的台灯&#xff0c;一是对护眼效果的疑问&#xff0c;二…

一个人,2 年时间,每月赚 6w 美金,独立开发者故事丨 RTE 开发者日报 Vol.120

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

数据结构与算法之约瑟夫问题求解

N个人围成一圈&#xff0c;从第一个开始报数&#xff0c;第M个将被杀掉&#xff0c;最后剩下一个人&#xff0c;其余人都被杀掉。例如N6&#xff0c;M5&#xff0c;被杀掉的顺序是&#xff1a;5、4、6、2、3、1。 问最后留下的人是谁&#xff1f; 分析&#xff1a; 如N6&…

【Path的使用】Node.js中的使用Path模块操作文件路径

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;Node.js &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继续前进的勇…