Wie sieht die Formel für eine Rechtecksschwingung aus?

bob651

Aktives Mitglied
Hallo, ich programmiere gerade paar Sachen(Buttons, Graphen etc) und habe eine kurze Frage.
Ich will es so hinkriegen, dass verschieden Button verschiedene Methoden ausführen. Alles ok. Button 1 erzeugt eine Sinusschwingung, alles ez. Button 2 soll eine Rechtecksschwingung (square wave), aber was ist die Formel dafür in Java?

Mein Sinus sieht so aus:
Code:
public void paint(Graphics g){
       

        if(check==true){
            andere();
            //koordinatensystem
             g.drawLine( xBase, yBase, xBase + xAxis, yBase );
           
             g.setColor( Color.red );
             for( int i=0; i < xAxis; i++ ){
                 x = xBase + i;
                 y = (int)( yBase - Math.sin( Math.toRadians(i) ) * ampli );
                 g.drawLine( x, y, x, y );
             }
             }

Danke
 
Ganz spontan ohne fundiertes Fachwissen:
Kann man nicht einfach den Sinus nehmen und wenn < 0.5 dann 0 und wenn > 0.5 dann 1?

Also
Code:
x = xBase + i;
if(Math.sin( Math.toRadians(i) ) * ampli ) > 0.5){
  y = yBase + 1;
}else{
  y = yBase + 0;
}
 
Ganz spontan ohne fundiertes Fachwissen:
Kann man nicht einfach den Sinus nehmen und wenn < 0.5 dann 0 und wenn > 0.5 dann 1?


[/code]
Also habs mal probiert, aber klappt nicht. Also hier ein Bild was ich meine:
csm_Square_neu_42317d0056.jpg
 
Naja da gibts 1000 Möglichkeiten. Kommt ja auch drauf an wie du skalieren willst. Was ist dein Min/Max X/Y ?

z.B. einfach

y = ((x / 10) % 2 == 0 ? 1 : -1;

Würde dir alle 10 X Werte einen Wechsel erzeugen
 
naja, ich habe es mit drawline hinbekommen (manuell)
Code:
            boolean up = true;
            while (x <= 1000) {
              
                if (x > 0 && x % 50 == 0) { //50 ist frequenz
                    up = !up;
                    g.drawLine(0 + x, up ? 50 : 350 + y, 0 + x, up ? 350 : 50 + y);
                }
                else {
                    if (up) {
                        g.drawLine(0 + x, 50 + y, 0 + x, y + 50);
                    }
                    else {
                        g.drawLine(0 + x, 350 + y, 0 + x, y + 350);
                    }
                }
                x++;
            }
 

Zurück
Oben