Schwingungsüberlagerungen von ??? |
[code:1:1f9caaf965] ; Überlagerte Schwingungen ; (C) 2003 by Lars Holger Roth ; Kontakt : BigSnake@web.de ; ICQ : 177711571 ; Anleitung. Mit der Taste S kann man eine Sinus Schwingung hinzufügen. Mit T eine Tangens Schwingung, ; mit C eine Cosinus Schwingung. Jene besitzt erst einmal eine Frequenz von 1 eine Amplitude von 10 ; und keinen Offset. Die Farbe ist schwarz. Man kann insgesamt 10 Schwingungen einfügen. Eine ; Schwingung kann man über die Nummerntasten auswählen. ; Die aktuelle Schwingung und ihre Daten werden oben links in einem Kästchen angezeigt. Mir R,G,B ; kann man einen Farbkanal auswählen. Alle ausgewählten Werte werden mit den Pfeiltasten rechts und ; links dekrementiert bzw inkrementiert, mit den Pfeiltasten nach oben und unten erfolgt eine ; Veränderung um +10 bzw. -10. Mit F wählt man die Frequenz, mit A die Amplitude und mit X und Y den ; jeweiligen Offset ; Mit den Tasetn F1 bis F10 kann man die entsprechende Schwingung ausblenden ; Mit L kann man die Mittellinie ein und ausblenden ; Mit Tabulator kann man die resultierende Schwingung ein- bzw. ausblenden. Mit ENTF kann man die ; aktuelle Schwingung wieder löschen. Mit Pos1 wird sie wieder auf ihre Standartwerte zurück gesetzt ; Mit Q wird ein Screenshot mit laufender Nummer geschossen, mit ESC wird das Programm beendet ; Auf der X Achse sind die Perioden bei einer Frequenz von 1 aufgetragen. Auf der Y Achse die ; Amplitude in Pixeln ; Typen Type TWave Field Y#[8000] Field Amplitude# Field Frequency# Field Phase# Field Offset Field Active Field R Field G Field B Field Draw ; Flag; false = Die Schwingung wird nicht gezeichnet Field Typ End Type ; Globale Variablen Global MiddleLineFlag = True Dim Wave.TWave(10) ; 10 Schwingungen können eingefügt werden For Rv=1 To 10 Step 1 Wave.TWave(Rv) = New TWave Wave(Rv)Active = False Next Global Result.TWave = New TWave ; Resultierende Schwingung Global Font Global CurWave = 1 ; Aktuell gewählte Schwingung Global CurMode = 1 ; Aktueller Modus Global ScreenShot = 1 ; AKtuelle Screenshot Nummer ; Initialisierung Graphics 800,600,32,2 SetBuffer BackBuffer() AppTitle "Überlagerte Schwingungen - (C) 2003 by Lars Holger Roth @ Snake Byte Productions" Font = LoadFont("Arial",15,1) SetFont Font ; Hauptprogramm Repeat ; Hintegrrund + Raster ClsColor 255,255,255 Cls Color 200,200,200 For X=1 To 40 Step 1 Rect X*20-20,0,1,600 Next For Y=1 To 30 Step 1 Rect 0,Y*20-20,800,1 Next Color 100,100,100 For Y=2 To 15 Step 1 Rect 0,Y*40-40,5,2 Next For Y=1 To 7 Step 1 Text 10,Y*40,300-Y*40,0,1 Text 10,Y*40+280,Y*-40+20,0,1 Next For X=1 To 19 Step 1 Rect X*40,595,2,5 Text x*40,580,X,1 Next ; Mittellinie If MiddleLineFlag Then Color 200,0,0 Rect 0,300,800,1 EndIf ; Schwingungen anzeigen For Rv=1 To 10 Step 1 If (Wave(Rv)Active = True) And (Wave(Rv)Draw = True) Then WaveDraw(Wave(Rv)) EndIf Next ; Resultierende anzeigen If ResultActive Then WaveDraw(Result) EndIf ; Steuerung KeyboardControl() ; Info Kasten InfoDraw() ; Bild anzeigen Flip Until KeyHit(1) End Function SinusCalculate(Wave.TWave,Amplitude#,Frequency#,Phase#,R=0,G=0,B=0) WaveAmplitude = Amplitude WaveFrequency = Frequency WavePhase = Phase WaveOffset = 300 WaveActive = True WaveR = R WaveG = G WaveB = B WaveDraw = True Local XStep# = 0 For X=1 To 8000 Step 1 WaveY[X] = Sin(XStep+Phase)*Amplitude XStep = XStep + Frequency Next End Function Function CosinusCalculate(Wave.TWave,Amplitude#,Frequency#,Phase#,R=0,G=0,B=0) WaveAmplitude = Amplitude WaveFrequency = Frequency WavePhase = Phase WaveOffset = 300 WaveActive = True WaveR = R WaveG = G WaveB = B WaveDraw = True Local XStep# = 0 For X=1 To 8000 Step 1 WaveY[X] = Cos(XStep+Phase)*Amplitude XStep = XStep + Frequency Next End Function Function TangensCalculate(Wave.TWave,Amplitude#,Frequency#,Phase#,R=0,G=0,B=0) WaveAmplitude = Amplitude WaveFrequency = Frequency WavePhase = Phase WaveOffset = 300 WaveActive = True WaveR = R WaveG = G WaveB = B WaveDraw = True Local XStep# = 0 For X=1 To 8000 Step 1 WaveY[X] = Tan(XStep+Phase)*Amplitude XStep = XStep + Frequency Next End Function Function CalculateResult() ; Gesamt Offset errechnen Local Count = 0 Local Offset# = 0 For Rv=1 To 10 Step 1 If Wave(Rv)Active Then Count = Count + 1 Offset = Offset + Wave(Rv)Offset EndIf Next If Count >= 1 Then ; Y Positionen errechnen Offset = Offset / Count ResultOffset = Offset ResultActive = 1 ResultPhase = 0 ResultAmplitude = 0 ResultFrequency = 0 ResultR = 200 ResultG = 0 ResultB = 0 For Rv=1 To 8000 Step 1 ResultY[Rv] = 0 Next For Rv=1 To 10 Step 1 If Wave(Rv)Active Then For X=1 To 8000 Step 1 ResultY[X] = ResultY[X] + Wave(Rv)Y[X] Next EndIf Next Else ResultActive = False EndIf End Function Function WaveDraw(Wave.TWave) Color WaveR,WaveG,WaveB For X=1 To 8000 Step 1 Plot Float(X)/10,WaveY[X]+WaveOffset Next End Function Function InfoDraw() Color 255,255,255 Rect 0,0,800,20 Color 0,0,0 Rect 0,0,800,20,0 If Wave(CurWave)Active Then Text 5,2,"Schwingung : "+CurWave + " Frequenz : "+Wave(CurWave)Frequency+" Amplitude : "+Wave(CurWave)Amplitude+" Phase : "+Wave(CurWave)Phase+" Offset : "+Wave(CurWave)Offset Else Text 5,2,"Schwingung : "+CurWave + " nicht aktiviert." EndIf Select CurMode Case 1 Text 650,2,"Frequenz Modus" Case 2 Text 650,2,"Amplituden Modus" Case 3 Text 650,2,"Rot Kanal" Case 4 Text 650,2,"Grün Kanal" Case 5 Text 650,2,"Blau Kanal" Case 6 Text 650,2,"Phasen Modus" Case 7 Text 650,2,"Offset Modus" End Select End Function Function KeyboardControl() If KeyHit(15) Then If ResultActive ResultActive = False Else ResultActive = True EndIf If KeyHit(31) Then ; Macht die aktuelle zu einer Standart Sinus Schwingung SinusCalculate(Wave(CurWave),10,0.1,0,0,0,0) CalculateResult() Wave(CurWave)Typ = 1 EndIf If KeyHit(46) Then ; Macht die aktuelle zu einer Standart Cosinus Schwingung CosinusCalculate(Wave(CurWave),10,0.1,0,0,0,0) CalculateResult() Wave(CurWave)Typ = 2 EndIf If KeyHit(20) Then ; Macht die aktuelle zu einer Standart Tangens Schwingung TangensCalculate(Wave(CurWave),10,0.1,0,0,0,0) CalculateResult() Wave(CurWave)Typ = 3 EndIf If KeyHit(38) Then If MiddleLineFlag Then MiddleLineFlag = False Else MiddleLineFlag = True EndIf If KeyHit(2) Then CurWave = 1 EndIf If KeyHit(3) Then CurWave = 2 EndIf If KeyHit(4) Then CurWave = 3 EndIf If KeyHit(5) Then CurWave = 4 EndIf If KeyHit(6) Then CurWave = 5 EndIf If KeyHit(7) Then CurWave = 6 EndIf If KeyHit(8) Then CurWave = 7 EndIf If KeyHit(9) Then CurWave = 8 EndIf If KeyHit(10) Then CurWave = 9 EndIf If KeyHit(11) Then CurWave = 10 EndIf If KeyHit(33) Then ; Frequenz ändern CurMode = 1 EndIf If KeyHit(30) Then ; Amplitude ändern CurMode = 2 EndIf If KeyHit(19) Then ; Rot CurMode = 3 EndIf If KeyHit(34) Then ; Grün CurMode = 4 EndIf If KeyHit(48) Then ; Blau CurMode = 5 EndIf If KeyHit(45) Then ; Offset X CurMode = 6 EndIf If KeyHit(44) Then ; Offset Y CurMode = 7 EndIf If KeyHit(200) Then Select CurMode Case 1 ; Frequenz Wave(CurWave)Frequency = Wave(CurWave)Frequency + 0.1 Select Wave(CurWave)Typ Case 1 SinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 2 CosinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 3 TangensCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) End Select CalculateResult() Case 2 ; Amplitude Wave(CurWave)Amplitude = Wave(CurWave)Amplitude + 10 Select Wave(CurWave)Typ Case 1 SinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 2 CosinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 3 TangensCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) End Select CalculateResult() Case 3 ; Rot Wave(CurWave)R = Wave(CurWave)R + 20 If Wave(CurWave)R > 255 Wave(CurWave)R = 255 Case 4 ; Grün Wave(CurWave)G = Wave(CurWave)G + 20 If Wave(CurWave)G > 255 Wave(CurWave)G = 255 Case 5 ; Blau Wave(CurWave)B = Wave(CurWave)B + 20 If Wave(CurWave)B > 255 Wave(CurWave)B = 255 Case 6 ; Phase Wave(CurWave)Phase = Wave(CurWave)Phase + 10 Select Wave(CurWave)Typ Case 1 SinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 2 CosinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 3 TangensCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) End Select CalculateResult() Case 7 ; Offset Wave(CurWave)Offset = Wave(CurWave)Offset + 10 CalculateResult() End Select EndIf If KeyHit(208) Then Select CurMode Case 1 ; Frequenz Wave(CurWave)Frequency = Wave(CurWave)Frequency - 0.1 If Wave(CurWave)Frequency < 0.1 Then Wave(CurWave)Frequency = 0.1 Select Wave(CurWave)Typ Case 1 SinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 2 CosinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 3 TangensCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) End Select CalculateResult() Case 2 ; Amplitude Wave(CurWave)Amplitude = Wave(CurWave)Amplitude - 10 If Wave(CurWave)Amplitude < 0 Then Wave(CurWave)Amplitude = 0 Select Wave(CurWave)Typ Case 1 SinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 2 CosinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 3 TangensCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) End Select CalculateResult() Case 3 ; Rot Wave(CurWave)R = Wave(CurWave)R - 20 If Wave(CurWave)R < 0 Wave(CurWave)R = 0 Case 4 ; Grün Wave(CurWave)G = Wave(CurWave)G - 20 If Wave(CurWave)G < 0 Wave(CurWave)G = 0 Case 5 ; Blau Wave(CurWave)B = Wave(CurWave)B - 20 If Wave(CurWave)B < 0 Wave(CurWave)B = 0 Case 6 ; Phase Wave(CurWave)Phase = Wave(CurWave)Phase - 10 Select Wave(CurWave)Typ Case 1 SinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 2 CosinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 3 TangensCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) End Select CalculateResult() Case 7 ; Offset Wave(CurWave)Offset = Wave(CurWave)Offset - 10 CalculateResult() End Select EndIf If KeyHit(203) Then ; Dekrement Select CurMode Case 1 ; Frequenz Wave(CurWave)Frequency = Wave(CurWave)Frequency - 0.01 If Wave(CurWave)Frequency < 0.01 Wave(CurWave)Frequency = 0.01 Select Wave(CurWave)Typ Case 1 SinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 2 CosinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 3 TangensCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) End Select CalculateResult() Case 2 ; Amplitude Wave(CurWave)Amplitude = Wave(CurWave)Amplitude - 1 Select Wave(CurWave)Typ Case 1 SinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 2 CosinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 3 TangensCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) End Select CalculateResult() Case 3 ; Rot Wave(CurWave)R = Wave(CurWave)R - 1 If Wave(CurWave)R < 0 Wave(CurWave)R = 0 Case 4 ; Grün Wave(CurWave)G = Wave(CurWave)G - 1 If Wave(CurWave)G < 0 Wave(CurWave)G = 0 Case 5 ; Blau Wave(CurWave)B = Wave(CurWave)B - 1 If Wave(CurWave)B < 0 Wave(CurWave)B = 0 Case 6 ; Phase Wave(CurWave)Phase = Wave(CurWave)Phase - 1 Select Wave(CurWave)Typ Case 1 SinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 2 CosinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 3 TangensCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) End Select CalculateResult() Case 7 ; Offset Wave(CurWave)Offset = Wave(CurWave)Offset - 1 CalculateResult() End Select EndIf If KeyHit(205) Then ; Inkrement Select CurMode Case 1 ; Frequenz Wave(CurWave)Frequency = Wave(CurWave)Frequency + 0.01 Select Wave(CurWave)Typ Case 1 SinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 2 CosinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 3 TangensCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) End Select CalculateResult() Case 2 ; Amplitude Wave(CurWave)Amplitude = Wave(CurWave)Amplitude + 1 Select Wave(CurWave)Typ Case 1 SinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 2 CosinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 3 TangensCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) End Select CalculateResult() Case 3 ; Rot Wave(CurWave)R = Wave(CurWave)R + 1 If Wave(CurWave)R > 255 Wave(CurWave)R = 255 Case 4 ; Grün Wave(CurWave)G = Wave(CurWave)G + 1 If Wave(CurWave)G > 255 Wave(CurWave)G = 255 Case 5 ; Blau Wave(CurWave)B = Wave(CurWave)B - 1 If Wave(CurWave)B > 255 Wave(CurWave)B = 255 Case 6 ; Phase Wave(CurWave)Phase = Wave(CurWave)Phase + 1 Select Wave(CurWave)Typ Case 1 SinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 2 CosinusCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) Case 3 TangensCalculate(Wave(CurWave),Wave(CurWave)Amplitude,Wave(CurWave)Frequency,Wave(CurWave)Phase,0,0,0) End Select CalculateResult() Case 7 ; Offset Wave(CurWave)Offset = Wave(CurWave)Offset + 1 CalculateResult() End Select EndIf If KeyHit(211) Then ; Entfernt die aktuelle Schwingung wieder Wave(CurWave)Active = False CalculateResult() EndIf If KeyHit(59) Then If Wave(1)Draw Wave(1)Draw = False Else Wave(1)Draw = True EndIf If KeyHit(60) Then If Wave(2)Draw Wave(2)Draw = False Else Wave(2)Draw = True EndIf If KeyHit(61) Then If Wave(3)Draw Wave(3)Draw = False Else Wave(3)Draw = True EndIf If KeyHit(62) Then If Wave(4)Draw Wave(4)Draw = False Else Wave(4)Draw = True EndIf If KeyHit(63) Then If Wave(5)Draw Wave(5)Draw = False Else Wave(5)Draw = True EndIf If KeyHit(64) Then If Wave(6)Draw Wave(6)Draw = False Else Wave(6)Draw = True EndIf If KeyHit(65) Then If Wave(7)Draw Wave(7)Draw = False Else Wave(7)Draw = True EndIf If KeyHit(66) Then If Wave(8)Draw Wave(8)Draw = False Else Wave(8)Draw = True EndIf If KeyHit(67) Then If Wave(9)Draw Wave(9)Draw = False Else Wave(9)Draw = True EndIf If KeyHit(68) Then If Wave(10)Draw Wave(10)Draw = False Else Wave(10)Draw = True EndIf If KeyHit(16) Then ; Screenshot machen Image = CreateImage(800,600) SetBuffer FrontBuffer() GrabImage Image,0,0 SetBuffer BackBuffer() SaveImage(Image,"Screen"+ScreenShot+".bmp") ScreenShot = ScreenShot + 1 FreeImage Image EndIf End Function [/code:1:1f9caaf965] |
von ??? |
[img:ef2415ba7a]http://www.kylixforum.de/forum/images/smiles/s-Hoe.gif[/img:ef2415ba7a] Versteh nich so ganz, was du meinst!? |
von ??? |
Das Programm ist eigentlich nur zum Herumspielen um grafisch zu verdeutlichen, was passiert, wenn sich Schwingungen überlagern. Was gibts denn da nicht zu verstehen ? Mit grundlegenden Physik Kenntnissen sollte man eigentlich wissen worum es geht |
von ??? |
Hmm ... wenn du uns sagen könntest was für Tasten man verwenden musst wäre das ganz gut. Bin zu faul im Code nachzugucken ... :) |
von ??? |
Ganz oben steht groß und breit die Anleitung ! |
von ??? |
Hm ok. lesen bildet... Sry.. |