曲线艺术编程 coding curves 第十二章 玑镂(扭索)纹

2023-06-19 13:17:27 来源: 博客园
第十二章 玑镂(扭索)纹

原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/

译者:池中物王二狗(sheldon)


(资料图片仅供参考)

源码:github: https://github.com/willian12345/coding-curves

曲线艺术编程系列 第 12 章

玑镂纹是一种错综复杂且非常迷人的图案。它经常被绘制在银行钞票和官方文档上,你也可以在手表表盘或其它复杂机械上找到它们的身影。正因为它们如此复杂难以理解,所以它们经常被镌刻在金属表面,这通常是由机器来完成。想象一下一台高端螺旋仪用金属刻蚀工具代替原本用于绘图的圆珠笔。“玑镂纹” 这词相当模糊,它可以代称所有这一类纹理。我将要讲解的是如下图案中的玑镂纹理:

这个纹理你可能已经在某种证书或钞票上见过了,一旦你知道生成原理,你就可以以调整代码的方式生成另外相似的纹理图案。

第一步:创建一个单独的圆

我们先从创建单个简单的圆开始,它看起来应该像下面这样:

它非常像一个摆线或玫瑰曲线。事实上你可以通过它们的公式创建它,但我将改动一点点,以便后面处理更复杂的纹理图案。

本质上是一个正弦波包住一个圆。注意它有一个内半径和一个外半径。 这个正弦波有 80 个 nodes,它自身波纹会重叠。为了更好的解析,我将增大内半径让它不再重叠:

现在可以看的更清楚了。正如我所说的那样,一个正弦波包住一个圆。现在我要再加一点点重叠纹理:

图中虽然有重叠部分你仍然可以观察到正弦波。第一张图像用的是同样的原理,只是内半径更小且重叠部分更多。现在我让我们看看是如何绘制的。

我们先设内半径 inner 与外半径 outer 开始。通过简单的数学运算得到 mid 半径。它将是正弦波的零点。我们还需要一个范围,它决定了正弦波在内外半径扩展的范围。你也可以称它为这个正弦波的振幅。

width = 600height = 600canvas(width, height) translate(width / 2, height / 2) inner = 50outer = 250range = (outer - inner) * 0.5mid = inner + range

下一步,我们需要知道要多少个波形周期,还有多少次重叠。我将把它们称作 nodes 和 div, 它们应该是整数且两个数不能被整除。 这非常像上一章玫瑰曲线中遇到的 n 和 d 参数, 但为了不混淆我会用另外的变量名。

nodes = 80div = 11

现在我们可以循环 t 到 2 * PI * div 并绘制一些线段。 下一个线段坐标点角度简单的用 t 和 半径 radius 计算得出。我们需要将循环结束条件 2 * PI 再乘以 div 以确保足够绕一圈,首尾可以相连。

for (t = 0; t < 2 * PI * div; t += 0.01) {  radius = mid + sin(t * nodes / div) * range  x = cos(t) * radius  y = sin(t) * radius  lineTo(x, y)}stroke()

如果你回头看玫瑰曲线那一章, 你会发现它们都是用相似的方法计算半径值的, 但相比使用正弦和单一的乘法,我们使用 mid 和 range 调整半径至内半径与外半径之间。

你可以多玩玩。试试改动不同的参数。为了生成一个比较好看的玑镂纹,你可能需要将 nodes 设高一点,div 低一点。最重要的是它们的值不能被整除。想要得到比较得体的图案,一个比较简单的方法是让 div 是一个小的质数, nodes 不能是 div 的倍数。

举个例子,如果 div 是 17,你不应该将 nodes 设为 170,否则你将会得到如下图:

但将 nodes 增加到 171 则会得到很好的图案:

如果你想玩的话,我几年前做了一个可交互的版本:

https://bit101.github.io/lab/dailies/170120.html

接下来,我们在混合当中再添加一些复杂性。相比在固定的内外半径来回绘制正弦波,我们在内外半径各自添加正弦波变化!结果如下图:

为此我们需要更多的参数。为了计算出最终外半径上任意一点,我们需要基于外半径,计算有多少正弦波周期和最终外半径与基础外半径的距离差。那么内半径同样需要3个值,nodes 与 div 也依然要。上图中我使用的参数值如下:

inner = 100.0n0 = 7.0h0 = 10.0 outer = 250.0n1 = 17.0h1 = 20.0 nodes = 142.0div = 89.0

内半径有 7 nodes, 半径范围在 90 - 110 之间,它是基于100 加减 10。然后,同样,外半径有 17 个 nodes ,半径范围在 230 - 270 之间。

在 for 循环迭代内之前计算 "mid radius" 的相关代码用这些值重写。

for (t = 0; t < 2 * PI * div; t += 0.01) {  r0 = inner + sin(t * n0) * h0  r1 = outer + sin(t * n1) * h1   range = (r1 - r0) * 0.5  mid = r0 + range   radius = mid + sin(t * nodes / div) * range  x = cos(t) * radius  y = sin(t) * radius  lineTo(x, y)}stroke()

当然你可以对以上代码进行简化,但为了清晰起见我把每步都写出来了。

你可以继续改动这些参数,看看能创造出什么样的图形。我们还有更复杂的一级要处理。

https://bit101.github.io/lab/dailies/170121.html

第三步 多环

下一步是创造多环,这些环相互配合在一起, 就像章节开头的那张图:

它的实现比看起来人简单的多。如果你想绘制小环外围绕大环,你仅需要将小环的外半径作为大环的内半径。由于我们会多次调用相同的代码,最好把它变成可复用的函数。基本上就是把 for 循环和 stroke 调用 放入一个可传所有参数函数中。我还添加了 x, y 参数, 这样你就可以把图绘制在 canvas 的任意位置了。

function guilloche(x, y, ir, n0, h0, or, n1, h1, nodes, div) {  for (t = 0; t < 2 * PI * div; t += 0.01) {    r0 = ir + sin(t * n0) * h0    r1 = or + sin(t * n1) * h1     range = (r1 - r0) * 0.5    mid = r0 + range     radius = mid + sin(t * nodes / div) * range    lineTo(x +cos(t) * radius, y +sin(t) * radius)  }  stroke()}

我把 canvas 宽高调整为 800x800 并且像下面这样调用代码:

guillloche(400, 400, 50, 6, 10, 120, 12, 20, 137, 37)guillloche(400, 400, 120, 12, 20, 220, 18, 30, 141, 41)guillloche(400, 400, 220, 18, 30, 350, 24, 20, 164, 53)

This resulted in the following image:

结果如图:

注意第一行调用,外半径参数是 120, 12,和 20。 这些作为下一个调用的内半径参数。第二个调用的外半径参数 220, 18 和 30, 作为最后一个调用的内半径参数。像这样做后,绘制出的环简直完美。

像往常一样你应该多调调参数,多试试。你可以想加多少环就加多少环。你也许希望把所有半径参数封装成自定义类型结构体让这部分变的更有复用性。我将把这部分工作留给你。

另外你可能想给各个一觉不同的颜色:

(译者注:我添加了随机颜色源码在 https://github.com/willian12345/coding-curves/tree/main/examples/ch12/guilloche-colorful.html)

这里有一个可交互的最终版本:

https://bit101.github.io/lab/dailies/170122.html

注意,这里可没有说环与环之间必须要紧密相扣。你可以试着给它们之间留点距离或者让它们重叠一部分看看你能创造出多有趣的图案。下一个例子中,第一个与最后一个环与之前例子中设置的一样, 但中间这个环的参数定义的相当不同:

guillloche(400, 400, 20, 4, 5, 120, 8, 10, 137, 37)guillloche(400, 400, 160, 5, 24, 160, 11, 24, 80, 17)guillloche(400, 400, 220, 18, 16, 350, 10, 20, 164, 53)

此处,内外半径值相等,都是 160,生成比简单的离散环更有趣的团状环。

还有,别忘了把它做成动画!

总结

你用 Guilloche patterns 关键词搜索图片,会得到非常多不同样式的图,大部分比我这里讲的要复杂的多。我只是从中挑了一个来讲。

也许你想尝试修改代码绘制其它形状的玑镂纹,也许从椭圆形玑镂是个不错的开始。然后再开始绘制其它形状。但这些内容都超出本章范围了。

本章 Javascript 源码 https://github.com/willian12345/coding-curves/blob/main/examples/ch12

博客园: http://cnblogs.com/willian/github: https://github.com/willian12345/

标签:

曲线艺术编程 coding curves 第十二章 玑镂(扭索)纹

第十二章玑镂(扭索)纹>原作:KeithPetershttps: www bit-101 com b

06-19 13:17:27

加拿大森林大火影响艾伯尼港林木业和旅游业发展

加拿大森林大火影响艾伯尼港林木业和旅游业发展

06-19 12:52:22

我的世界附魔台书架摆放几个_我的世界附魔台书架摆放

1、首先,把结界桌放在地上。2、书架需要和附魔桌隔一格才有效。3、第

06-19 12:13:26

2024年属狗人小人生肖,如何防备

每一年的生肖都有自己的特点,属狗人的爽朗性格和勤奋工作的态度,让他

06-19 11:31:29

大盘震荡反弹,本周挑战3300点|每日热闻

​今天是2023年6月19日星期一,新的一周又开始了,祝愿大家本周投资顺

06-19 11:01:37

国家重点水利工程引汉济渭调水工程通过通水验收|今日最新

6月17日,国家重点水利工程——引汉济渭工程通过了调水工程的通水阶段

06-19 10:52:19

《别叫我“赌神”》北京发布会别开生面 ,周润发袁咏仪欢乐齐聚“亲子跑”

在现场跑者中,有的是父亲带着孩子参加活动,也有一些年轻的朋友带着父

06-19 10:36:44

闲置物品交换加盟(闲置物品交换)|天天报道

1、打开易货网站17hw8 cn。2、注册成为易货网的会员3、拍摄的图片发布

06-19 10:08:29

国瑞科技(300600):MACD指标DIF线上穿0轴-技术指标上后市看多(06-19)_焦点热议

资金流向数据,主力资金净流入2911 28万元,占总成交额13%,其中超大单

06-19 10:05:19

金杨股份今日申购 顶格申购需配市值4.5万-环球关注

金杨股份今日开启申购,公司此次发行总数为2061万股,其中网上发行495

06-19 09:47:49

中央气象台:强降雨持续发力 这些地区累计雨量超过100毫米 环球聚看点

强降雨持续发力十余省累计雨量超过100毫米

06-19 09:20:21

今日启航考研这个机构怎么样_导航考研这个机构怎么样

1、跟跨考海天比较。2、这个考研机构要弱势一些他本身的课程并不是很多

06-19 09:41:39

广东省惠州市2023-06-14 20:39发布暴雨黄色预警 微速讯

一、广东省惠州市天气预报过去3小时我县梁化七星墩降雨量已超过30毫米

06-19 09:20:26

切莫忽视“小隐患”

眼下,全市安全生产和消防安全百日整治攻坚专项行动正全力推进,各区域

06-19 09:02:12

今日快讯:苦战5局,中国女排不敌意大利队,香港站2胜2负收官

2023年世界女排联赛中国香港站6月18日进入最后一个比赛日的争夺,中国

06-19 09:09:42

优秀退役军人走上思政课讲台

光明日报记者严德勇夏静张锐光明日报通讯员朱丽初夏时节,江城武汉。在

06-19 09:02:01

征服者之剑好吗 征服者之剑_当前快播

1、平静之剑拾取后绑定单手剑46-86伤害速度2 20(每秒伤害30 0)+9耐力

06-18 22:06:32

京东新CEO首次亮相!董明珠前来助阵 订下多个目标

6月18日,在创业20周年之际,京东向56万员工发送了全员信,正式提出了

06-18 21:22:35

创意面包店加盟选哪家?Sunflour阳光粮品加盟详细解答注意事项! 简讯

一个好的创业,所成就的是一个比较好的发展,所以对于很多人来说,面包

06-18 20:53:45

世界即时:回收站的文件删除了怎么恢复啊(回收站的文件删除了怎么恢复)

来为大家解答以上问题,回收站的文件删除了怎么恢复啊,回收站的文件删

06-18 19:59:41

世界热推荐:等待揽收是什么意思 正在等待揽收是什么意思

1、包裹等待揽收意思是要寄出的商品已经包装好了,快递单号也已经填写

06-18 19:27:01

有你的地方 就是家_对于有你的地方 就是家简单介绍

1、《有你的地方。2、就是家》是2013年华东师范大学出版社出版的翻译图

06-18 18:58:27

世体:切尔西希望将奥巴梅杨、齐耶赫、门迪都出售给沙特球队-今日快看

《世界体育报》消息,作为夏季转会操作的一部分,切尔西希望将奥巴梅杨

06-18 17:54:20

糖心蛋怎么做_糖心蛋煮几分钟-焦点关注

1、洗净鸡蛋的表面。如果你害怕破壳,我建议你用细针在蛋壳的一端钻一

06-18 17:13:17

天天微资讯!锡纸开锁原理动画_锡纸开锁原理

1、锡纸开锁法,是一种新型“开锁”手段,需要借助专门的锡纸工具,主

06-18 16:40:29

三星最早的智能手机型号(三星智能手机i9100)_天天观点

来为大家解答以上问题,三星最早的智能手机型号,三星智能手机i9100很

06-18 15:50:54

静态电影丨我想讲一个关于我和爸爸的故事……

03:55听说,离天空最近的地方是爸爸的肩膀,今天是父亲节,小小的我,

06-18 15:21:23

胜利日阅兵直播视频_2015 9 3阅兵直播视频-天天热点

1、九点正式开始七点半进入专题预计两个小时阅兵部分结束。本文就为大

06-18 14:59:33

苯丙三氮唑商品报价动态(2023-06-18)-天天百事通

交易商品牌 产地交货地最新报价苯丙三氮唑 含量99%济南百洁特生物科技

06-18 13:59:18

乌鲁木齐交警送安全课进校园 今亮点

来源:乌鲁木齐市融媒体中心掌上乌鲁木齐 乌鲁木齐晚报乌鲁木齐晚报讯

06-18 13:12:37

焦点报道:杭州姑娘吓懵:洁牙神器变“凶器”?多位年轻人中招

本文转自【钱江晚报】;小洪平时就十分注重口腔健康,每天晚上刷牙前都

06-18 11:52:53

一袭青衣一场梦 舞剧《青衣》在苏上演

6月16日晚,现代舞剧《青衣》在苏州再次上演。京剧与舞蹈交融,为观众

06-18 11:12:32

16楼深读周刊|“菜篮子”争夺战 天天消息

卷首语|真正的竞争,才刚开了个头■朱蓉可说是疫情中乘发展大风起势的

06-18 10:43:58

桂林小学生死亡事件_桂林小学

1、桂林市榕湖小学2、榕湖小学坐落于美丽的榕湖畔,学校前身为南宋景定

06-18 09:58:21

【独家】沙河市周庄街道:开展“党建领航”专题活动

为进一步发挥区域内非公企业党组织在企业高质量发展中的引领作用,推动

06-18 09:33:28

惠氏香兰素声明(惠氏 香兰素)

导读1、启赋从2段开始添加有乙基香兰素,乙基香兰素是香精的一种。2、

06-18 08:53:29

狼来了打一水果的答案是什么(4、狼来了-----猜一水果名)|世界球精选

1、狼来了(猜一水果)的答案:杨桃(羊逃)。2、关于“杨桃”介绍:(1)

06-18 08:23:19

法拉第未来宣布首款车型 FF91 第二阶段交付推迟至今年 8 月|世界热讯

IT之家6月18日消息,法拉第未来昨日宣布,FF912 0FuturistAlliance第二

06-18 07:59:36

花木兰传奇大结局(花木兰传奇大结局是什么)

木兰传奇大结局,花木兰传奇大结局是什么很多人还不知道,现在让我们一

06-18 06:42:53

当前信息:600161股票千股千评

本文内容是由小编为大家搜集关于600161股票,以及600161股票千股千评的

06-18 06:10:00

葡萄牙3-0波黑,B费两射一传,B席建功,C罗头槌破门越位无效_天天微速讯

北京时间6月18日02:45,欧洲杯预选赛小组赛J组第3轮,葡萄牙坐镇里斯本

06-18 04:36:21

世界热资讯!企业管理包括哪些内容_企业管理包括哪些

1、企业管理包括:1 人力资源的管理。2、2 企业文化建设的管理。3、3 财

06-18 02:56:21

雅诗兰黛眼霜用法和用量_雅诗兰黛眼霜用法

1、雅诗兰黛眼霜如何才能用完?2、这个问题问的非常好,针对你所提问的

06-18 01:11:03

固态电池“上车”提速 电池材料持续进步

现如今,人们穿梭在马路上绿牌新能源汽车早已司空见惯,2022年全国新能

06-17 22:43:10

LOL塔姆山海绘卷皮肤获得方法攻略

会有许多LOL玩家还不了解LOL塔姆山海绘卷皮肤获得方法攻略,那么现在第

06-17 21:44:29

【新秀巡礼】普罗斯珀:模板塔克&体测后行情猛涨 野兽前锋冲首轮

【新秀巡礼】普罗斯珀:模板塔克&体测后行情猛涨野兽前锋冲首轮,塔克,

06-17 21:05:53

天天热推荐:固化玻璃胶怎么去除掉_已固化玻璃胶怎么去除

1、在家庭装修过程中,玻璃胶也是我们常用的材料。2、但是也有不少胶剂

06-17 20:35:23

一封来自小熊豆崽的自我介绍信

最早是因为LOL这个游戏接触的直播行业在QT开启了自己第一次的直播,后

06-17 20:01:41

省工信厅原副厅长李生发受贿案一审宣判

法治甘肃网讯(新甘肃·甘肃法制报记者王建庆)6月16日,武威市中级人

06-17 19:11:16

荷兰加密货币经纪商LiteBit拟停止运营,当地监管批准其用户转移至Bitvavo_焦点速看

荷兰加密货币经纪商LiteBit拟停止运营,当地监管批准其用户转移至Bitvavo

06-17 18:41:16

加拿大森林大火影响艾伯尼港林木业和旅游业发展
我的世界附魔台书架摆放几个_我的世界附魔台书架摆放
2024年属狗人小人生肖,如何防备
大盘震荡反弹,本周挑战3300点|每日热闻
国家重点水利工程引汉济渭调水工程通过通水验收|今日最新
《别叫我“赌神”》北京发布会别开生面 ,周润发袁咏仪欢乐齐聚“亲子跑”
闲置物品交换加盟(闲置物品交换)|天天报道
国瑞科技(300600):MACD指标DIF线上穿0轴-技术指标上后市看多(06-19)_焦点热议
金杨股份今日申购 顶格申购需配市值4.5万-环球关注
中央气象台:强降雨持续发力 这些地区累计雨量超过100毫米 环球聚看点
今日启航考研这个机构怎么样_导航考研这个机构怎么样
广东省惠州市2023-06-14 20:39发布暴雨黄色预警 微速讯
切莫忽视“小隐患”
今日快讯:苦战5局,中国女排不敌意大利队,香港站2胜2负收官
优秀退役军人走上思政课讲台
征服者之剑好吗 征服者之剑_当前快播
京东新CEO首次亮相!董明珠前来助阵 订下多个目标
创意面包店加盟选哪家?Sunflour阳光粮品加盟详细解答注意事项! 简讯
世界即时:回收站的文件删除了怎么恢复啊(回收站的文件删除了怎么恢复)
世界热推荐:等待揽收是什么意思 正在等待揽收是什么意思
有你的地方 就是家_对于有你的地方 就是家简单介绍
世体:切尔西希望将奥巴梅杨、齐耶赫、门迪都出售给沙特球队-今日快看
糖心蛋怎么做_糖心蛋煮几分钟-焦点关注
天天微资讯!锡纸开锁原理动画_锡纸开锁原理
三星最早的智能手机型号(三星智能手机i9100)_天天观点
静态电影丨我想讲一个关于我和爸爸的故事……
胜利日阅兵直播视频_2015 9 3阅兵直播视频-天天热点
苯丙三氮唑商品报价动态(2023-06-18)-天天百事通
乌鲁木齐交警送安全课进校园 今亮点
焦点报道:杭州姑娘吓懵:洁牙神器变“凶器”?多位年轻人中招
一袭青衣一场梦 舞剧《青衣》在苏上演
16楼深读周刊|“菜篮子”争夺战 天天消息
桂林小学生死亡事件_桂林小学
【独家】沙河市周庄街道:开展“党建领航”专题活动
惠氏香兰素声明(惠氏 香兰素)
狼来了打一水果的答案是什么(4、狼来了-----猜一水果名)|世界球精选
法拉第未来宣布首款车型 FF91 第二阶段交付推迟至今年 8 月|世界热讯
花木兰传奇大结局(花木兰传奇大结局是什么)
当前信息:600161股票千股千评
葡萄牙3-0波黑,B费两射一传,B席建功,C罗头槌破门越位无效_天天微速讯
世界热资讯!企业管理包括哪些内容_企业管理包括哪些
雅诗兰黛眼霜用法和用量_雅诗兰黛眼霜用法
固态电池“上车”提速 电池材料持续进步
LOL塔姆山海绘卷皮肤获得方法攻略
【新秀巡礼】普罗斯珀:模板塔克&体测后行情猛涨 野兽前锋冲首轮
天天热推荐:固化玻璃胶怎么去除掉_已固化玻璃胶怎么去除
一封来自小熊豆崽的自我介绍信
省工信厅原副厅长李生发受贿案一审宣判
荷兰加密货币经纪商LiteBit拟停止运营,当地监管批准其用户转移至Bitvavo_焦点速看
全球微速讯:江西护卫者科技有限公司_关于江西护卫者科技有限公司简述
X 广告
行业动态
X 广告

Copyright ©  2015-2022 现在植物网版权所有  备案号:粤ICP备18023326号-5   联系邮箱:855 729 8@qq.com