首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有生成三角波的单线函数?

有没有生成三角波的单线函数?
EN

Stack Overflow用户
提问于 2009-07-02 10:23:07
回答 8查看 69.5K关注 0票数 71

以类似的方式,模数产生锯齿波。它不一定是连续的。

我的意思是:

代码语言:javascript
运行
复制
int m = 10;
int x = 0;
int i = 0;
while (i < m*3) {
    printf("%d ", x);
    x++;
    x = x % m;
    i++;
}

生成一个序列0..9,三次如下所示:

请注意,山峰右侧的坡度只是一个图形伪像。

本例中的一行代码是x = i++ % m

我想要的是:

如果你知道其他波形(正弦,方波)的单行代码,那也是很好的了解。

更新:每个人的回答都非常有帮助,我有一个后续问题。

在三角波函数中添加什么,以使直线的斜率像这样曲线:

感谢每个人,,你多种多样的答案帮助我从一个更大的角度来看待这个问题。特别感谢Noldorin将方程扩展到二次曲线。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-07-02 10:28:15

代码语言:javascript
运行
复制
x = m - abs(i % (2*m) - m)
票数 29
EN

Stack Overflow用户

发布于 2009-07-02 10:28:59

三角波

代码语言:javascript
运行
复制
y = abs((x++ % 6) - 3);

这给出了一个周期为6的三角波,在3和0之间振荡。

方波

代码语言:javascript
运行
复制
y = (x++ % 6) < 3 ? 3 : 0;

这给出了一个周期为6的规则方波,在3和0之间振荡。

正弦波

代码语言:javascript
运行
复制
y = 3 * sin((float)x / 10);

这给出了一个周期为20 pi的正弦波,在3和-3之间振荡。

更新:

曲线型三角波

要得到具有曲线而不是直线的三角波的变体,您只需在方程中引入一个指数,使其成为二次。

凹曲线(即x^2形状):

代码语言:javascript
运行
复制
y = pow(abs((x++ % 6) - 3), 2.0);

凹曲线(即sqrt(x)形状):

代码语言:javascript
运行
复制
y = pow(abs((x++ % 6) - 3), 0.5);

或者使用pow函数,您可以简单地定义一个square函数并在math.h中使用sqrt函数,这可能会稍微提高性能。

此外,如果你想让曲线变得更陡峭/更浅,只需尝试更改索引即可。

在所有这些情况下,您应该能够轻松地调整常数并在正确的位置添加缩放因子,以给出给定波形的变化(不同的周期、振幅、不对称性等)。

票数 106
EN

Stack Overflow用户

发布于 2014-03-14 17:24:32

扩展Eric Bainville的答案:

代码语言:javascript
运行
复制
y = (A/P) * (P - abs(x % (2*P) - P) )

其中x是运行整数,y是三角波输出。A是波的振幅,P是半周期。例如,A=5将产生一个从0到5的波;P=10将产生一个周期为20的波。对于x=0,该波从y=0开始。

请注意,y将是一个浮点数,除非P是A的一个因子。是的,对于数学纯粹主义者来说:从技术上讲,A是波的振幅的两倍,但看看下面的图片,你就会明白我的意思。

可视化:

票数 45
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1073606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档