【发布时间】:2015-12-11 14:09:17
【问题描述】:
希望有人能指出为什么这不起作用或我可能出错的地方。我通过 c 中的 for 循环产生正弦波。最终目标是生成一个显示此内容的 .ppm 文件。我正在研究 1 比 1 的像素比。我的盒子是128H*256W。正弦波正在显示,但由于答案是以弧度产生的,结果是一个非常小的两个像素高的“波”。我认为这是由于 rad 值介于 1 和 -1 之间。这是我的代码。我尝试只是简单地通过更大的时间来增加 y 值的大小,希望它能够正确绘制,但这几乎没有或更糟会导致应用程序停止运行。任何想法都非常欢迎。
for (x = 0; x < H; x++)
{
y =(int) H/2+ sin(x*(2*PI));
y = y * 50;
image[y][x][1] = 0;
image[y][x][2] = 255;
image[y][x][3] = 0;
}
编辑:这是通过 infraview 打开时在 .ppm 文件中生成的内容。我也是#defining PI 3.141592653589793。这也可能是一个问题领域。
【问题讨论】:
-
在转换为
int之前,您应该将y乘以 50,例如y = (int) (50 * (H / 2 + sin(x * 2 * PI)));. -
您好,这个不会影响秤吗? *50 以便将我的 wav 的大小从它现在填充的 2 个像素中增加。
-
如果你想要更少的“波峰”,你需要将你的 x 除以一些东西。请记住,当输入弧度时,sin(x) 将从 0 变为 1,变为 0,变为 -1 并返回 0,因为 x 从 0 变为 2*PI。如果 x 从 0 到 H 时你想要一个完整的 sin,你需要将 x 除以 H*2*PI
-
您好,谢谢!我想要产生更明确的一次谐波正弦波。只要我至少有两个,峰值的数量就不是一个大问题。正如您提到的 sin(x) 仅在 rads 中有效,我认为这是我的循环问题,我认为,将一个像素等于一个值。我需要对其进行缩放以使值介于 1 和 -1 之间,但也会绘制更多可用的 128*256 像素。
-
使用来自
<math.h>的M_PI。
标签: c trigonometry