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

2024-01-19

以类似的方式modulo产生锯齿波。它不必是连续的。

这就是我的意思:

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


我想要的是这样的:

如果您了解其他波形(正弦波、方波)的单行线,那么了解这一点也是很好的。

Update: 大家的回答都非常有帮助,我有一个后续问题。

将什么添加到三角波函数以使线条的斜率像这样向内或向外弯曲:

感谢大家,您的不同答案帮助我从更大的角度看待问题。特别感谢 Noldorin 将方程扩展到二次曲线。


三角波

y = abs((x++ % 6) - 3);

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

方波

y = (x++ % 6) < 3 ? 3 : 0;

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

正弦波

y = 3 * sin((float)x / 10);

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


Update:

曲线三角波

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

凹曲线(即x^2 shape):

y = pow(abs((x++ % 6) - 3), 2.0);

凹曲线(即sqrt(x) shape):

y = pow(abs((x++ % 6) - 3), 0.5);

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

另外,如果您想让曲线更陡/更浅,只需尝试更改索引即可。


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有生成三角波的单行函数? 的相关文章

随机推荐

  • python脚本录制在线直播视频

    我正在开发一个脚本来下载在线直播视频 我的脚本 print Recording video response urllib2 urlopen streaming online video url filename time strftime
  • 带 JTable 的 JScrollpane 中的背景图像

    我试图在 JScrollPane 中的 JTable 后面添加居中背景图像 背景相对于视口的位置应该居中且静态 我尝试过将 JScrollPane 添加到带有绘制图像的 JPanel 中 并使其他所有内容变为半透明 但结果很丑陋并且存在渲染
  • 向与数据库交互的 Servlet 提交表单会导致空白页面

    我有一个从数据库检查用户名和密码的 servlet Override protected void doPost HttpServletRequest req HttpServletResponse res throws ServletEx
  • 生成PasswordHash和SecurityStamp

    我有一个Registrations新用户被放入的表 稍后的过程会为该用户创建一个数据库 并从注册表中的数据 电子邮件和姓名 插入 ASP NET Identity User 记录 我想扩展这一点 以便在注册时 用户可以输入密码 然后该密码将
  • Google 云端硬盘 SDK 和 iOS 5.1

    SDK 与 iOS 5 兼容还是仅与 iOS 6 兼容 Google 示例和 iOS 6 模拟器和设备 一切正常 但 Xcode 返回 iOS 5 1 模拟器和设备 运行时错误 我正在使用 Xcode 4 5 2 我已经检查了 iOS 部署
  • 我想摆脱 .rs.WorkingDataEnv 中的 cacheKey 错误

    Error in exists cacheKey where rs WorkingDataEnv inherits FALSE invalid first argument 我用的是rm R 中的函数可删除几个数据帧 他们已被成功删除 但是
  • 关闭 Windows 资源管理器的特定实例

    我在尝试时遇到问题WM CLOSE一个 Window 资源管理器进程 发送该消息将尝试关闭 Windows Shell 资源管理器进程并提示用户关闭窗口 这不是预期的行为 我想知道如何解决它 如何优雅地关闭各个资源管理器窗口 而不同时关闭整
  • 交叉编译 C++ 项目,通用 ELF 中的重定位 (EM: 3)

    我从事 C 项目已经有一段时间了 但想将其移植到我的 Arm 处理器上 我已经拥有所有交叉编译工具 我正在使用 CodeSourcery 并且认为我可以更改我的 makefile 以指向该编译器 它使用默认的 g 编译得很好 但是当尝试 m
  • 仅在 kernel.terminate 事件后返回响应

    我的理解kernel terminate是它触发了after响应已返回给客户端 在我的测试中 情况似乎并非如此 如果我放一个sleep 10 在 kernel terminate 上调用的函数中 浏览器也会等待 10 秒 处理似乎是在发送响
  • 动态数组和预建数据

    在C语言中 我尝试执行以下操作 typedef struct int length int items 1 wchararray t typedef struct long hash wchararray t chars 2 string
  • 另一个 KeyListener/KeyBinding 问题

    呃 我很抱歉 MadProgrammer 但我只是无法让 KeyBinding 按我想要的方式工作 但我会继续查看更多教程 直到我弄清楚 但现在我已经卡住了到 KeyListener 并且它可以工作 但现在我遇到一个问题p move 实际上
  • 停止 ng2-idle 进行量角器测试

    我在用着ng2 idle https github com HackedByChinese ng2 idle一段时间后自动注销用户 我在 appComponent 构造函数中初始化它 import Idle DEFAULT INTERRUP
  • v4.x 中的 d3.time.format.multi

    在我的代码的早期版本中 我曾经像这样设置适当的区域设置格式 format decimal thousands grouping 3 currency dateTime a b e X Y date d m Y time H M S peri
  • ASP.net MVC 验证挂钩

    我在 ASP net MVC 3 中有以下视图 model Models CreateProjectViewModel Scripts jquery validate min js gt Scripts jquery validate un
  • Python 正则表达式,多行匹配模式..为什么这不起作用?

    我知道 为了解析 我应该理想地删除所有空格和换行符 但我这样做只是为了快速修复我正在尝试的东西 我不明白为什么它不起作用 我已经将不同的文本区域包装在我的文本中 带有 1 之类的包装器的文档 并尝试基于此进行解析 但无论我尝试什么 它都不起
  • 对 sklearn Pipeline + ColumnTransformer 中的列应用多个预处理步骤

    我第一次尝试 sklearn pipeline 并使用 Titanic 数据集 我想首先将缺失值归咎于Embarked然后进行一次热编码 而在Sex属性 我只想进行一种热编码 所以 我有以下步骤 其中两个步骤用于Embarked 但它并没有
  • Python Pandas:ValueError:使用可迭代设置时必须具有相等的 len 键和值

    我有一个要更改的 DataFrame df loc rowId colId myDict 将字典分配给条目 rowId colId 结果我收到以下错误 ValueError Must have equal len keys and valu
  • GWT编译的应用程序无法与php后端交互

    我正在开发一个带有 PHP 后端的 GWT 应用程序 开发过程中 一切正常 我正在从我的 webroot 开发我的 GWT 应用程序 一切都工作正常并且与 php 正确交互 但是 当我编译 GWT 应用程序并将其放置在原始 GWT 应用程序
  • jquery 未在 chrome 扩展中加载

    我正在尝试将本地 jquery 文件加载到 chrome 扩展中 这就是我的 manifest json 的样子 name TV version 0 1 description Search icons 128 icon jpg optio
  • 有没有生成三角波的单行函数?

    以类似的方式modulo产生锯齿波 它不必是连续的 这就是我的意思 int m 10 int x 0 int i 0 while i lt m 3 printf d x x x x m i 生成一个序列 0 9 三次 如下所示 请注意 峰右