加工 !正弦波

processing ! Sine wave

我试图在 y 具有最高值时显示 x 位置。在 if 语句中,我试图将 y 值与 120 进行比较,但它似乎从来都不是真的,因此它不会使用文本函数显示我的 x 位置。我也尝试将 y 值四舍五入,但结果仍然不是我想要的。谁能帮帮我?

问候 Antmar。

float x = 0.0;
float y = 0.0;

void setup() {
    background(150);
    size(800,200);
    smooth();
    line(0,100,width,100);
}

void draw() {

    //background(255);

    x += 0.5;


    y =map (sin(x/20),-1,1,80,120) ;


    noStroke();
    fill(#BBFFDD);
    ellipse(x, y , 1, 1);


    if ( y < 119 && y > 118.94) {

        textSize(10);
        text(x,x-10,y+20);
    } 
    println("x =",x,"|","y =",y);
}

我想我已经知道你的问题是什么了。当我 运行 你的代码时,它在几个地方打印出你的 x 值,但并不是每次都打印。为了解决这个问题,我首先将 x 增加 PI/4 而不是 0.5,以使其更有可能接近 120。然后,我查看了 y 的值,最高值仅略低于 120 . 为了打印出此时的 x 值,我将 if 条件设为以下,以便只捕获那个 y 值。我还添加了另一个 if 条件来获取 x 在此 sin 函数的局部最大值处的值:

if ( y >= 100 + 19.999) {  
    textSize(10);
    text(x,x-10,y+20);
}else if(y <= 100 - 19.999){
    textSize(10);
    text(x,x+10,y-10);
}

编辑:查看 x 和 y 的值后,我发现将 x 递增 PI/4 会导致 y 的最小值和最大值恰好为 120 和 80,因此您可以检查这些值取而代之的是值,如下所示:

if (y == 120) {
    textSize(10);
    text(x,x-10,y+20);
}else if(y == 80){
    textSize(10);
    text(x,x+10,y-10);
}