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..



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: