如何调整max(sin(x),0)绘制的山丘间距且不改变尺寸?
调整Desmos中山丘间距但保留尺寸的方法
嘿,这个问题我刚好折腾过,其实核心是要把山丘的形状和重复的周期分开控制——毕竟我们要保留山丘的大小,只调整它们之间的空隙对吧?
原函数的局限
先回顾下你用的max(sin(x), 0):它在每个[2nπ, (2n+1)π]区间生成宽度为π、高度为1的山丘,山丘之间的平地(间距)也是π,因为[(2n+1)π, (2n+2)π]区间函数值为0。默认的周期把山丘和间距绑定死了,直接改sin的参数会连山丘大小一起变,这不是我们要的。
解决思路:固定山丘形状,自定义周期间距
我们需要让山丘每隔(山丘宽度 + 自定义间距)的距离重复一次,同时山丘本身的尺寸完全不变。具体操作如下:
定义间距变量(可选但推荐)
在Desmos里新建一个滑块变量d,用来控制山丘之间的平地长度。这样你可以拖动滑块实时调整间距,不用手动改数值。使用自定义周期的函数
把原函数替换成下面的表达式:max( sin( x - d * floor(x/(π + d)) ), 0 )
原理拆解
floor(x/(π + d)):计算当前x处于第几个“山丘+平地”的完整周期;d * floor(...):将当前周期的起始点平移,留出我们设置的间距d;x - d * floor(...):把每个周期内的x映射回[0, π + d)区间,其中前π个单位是山丘(sin在[0,π]为正,max后保留原有形状),后d个单位是平地(sin在[π, π+d]为负,max后为0);- 这样一来,山丘的宽度始终是π、高度始终是1,间距完全由
d控制:d越大,山丘之间的空隙越宽;d越小,空隙越窄。
举个例子
- 想要间距是原来的2倍,就把
d设为2π; - 想要间距缩小一半,就把
d设为π/2; - 甚至可以把
d设为0,让山丘完全连在一起,变成一个连续的波浪。
内容的提问来源于stack exchange,提问作者Seyed Morteza Kamali
相关产品推荐
相关产品推荐

