Ein Logo bewegen (mathematisch)
Verfasst: 13.09.2004 12:52
Hallo !!
Habe ein Problem mit der Umsetzung.Ich möchte ein imageBild(Logo)
in Bewegung setzen.Das Logo soll eine umgelegte 8 abfahren.
mein code
Es hat mir jemand zu dem Problem geschrieben in einem anderen Board.
Ich kann es nur nicht umsetzen

Mail:
als y-wert nimmst du den SINUS, das gibt bereits mal eine schöne auf- und abbewegung innerhalb der grenzen ±1.
als x-wert nimmst du die zeit, die aber nach dem intervall 2¶ rückwärts laufen muss bis zum ursprung.
z.b. soll dein logo in 10 sekunden eine schleife drehen:
f = 0.1 hz -> intervall = 1/f = 10 s
nach 1 s (x = 1) ist y = sin (w*t) = sin (2*¶*f*t) = sin (2 * ¶ * 0,1 * 1) = 0.588
nach 2 s (x = 2) ist y = sin (w*t) = sin (2*¶*f*t) = sin (2 * ¶ * 0,1 * 2) = 0.951
nach 2,5 s (x = 2,5) ist y = sin (w*t) = sin (2*¶*f*t) = sin (2 * ¶ * 0,1 * 2,5) = 1 (maximum!)
danach nimmt y ab, und nach 5s sind wir wieder beim nullpunkt. dann wird y negativ, und nach 10s sind wir wieder beim nullpunkt. anschliessend musst du die zeit (= x-achse) rückwärts zählen bis auf null, die y-werte können beibehalten werden usw.
um den schnittpunkt zu ändern, musst du einfach einen offset zur zeitachse addieren bzw. subtrahieren. es gibt noch viele andere möglichkeiten.
mfg Dristar
Habe ein Problem mit der Umsetzung.Ich möchte ein imageBild(Logo)
in Bewegung setzen.Das Logo soll eine umgelegte 8 abfahren.
mein code
Code: Alles auswählen
Procedure logo(bild)
Global x
Global s
Global y
StartDrawing(WindowOutput())
DrawImage(bild, x, y,400,70)
StopDrawing()
If s=0
If x<150
y=Sin(1*x)
x=x+1
Else
s=1
EndIf
Else
If x>-150
y=Sin(1*X)
x=x-1
Else
s=0
EndIf
EndIf
;Delay(1)
EndProcedure
UseJPEGImageDecoder()
OpenWindow(0,0,0,400,300,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"Bild")
CreateGadgetList(WindowID())
bild.l=LoadImage(#PB_Any,"c:\test5.jpg")
bild = UseImage(bild)
NewColor = GetSysColor_(#COLOR_BTNFACE) ; #COLOR_WINDOW
NewColor = RGB(Blue(NewColor),Green(NewColor),Red(NewColor))
x=0:s=0:y=0
f=0.1
intervall = 1/f
Repeat
logo(bild)
Select WindowEvent()
Case #PB_Event_CloseWindow
quit = 1
EndSelect
Until quit
Es hat mir jemand zu dem Problem geschrieben in einem anderen Board.
Ich kann es nur nicht umsetzen


Mail:
als y-wert nimmst du den SINUS, das gibt bereits mal eine schöne auf- und abbewegung innerhalb der grenzen ±1.
als x-wert nimmst du die zeit, die aber nach dem intervall 2¶ rückwärts laufen muss bis zum ursprung.
z.b. soll dein logo in 10 sekunden eine schleife drehen:
f = 0.1 hz -> intervall = 1/f = 10 s
nach 1 s (x = 1) ist y = sin (w*t) = sin (2*¶*f*t) = sin (2 * ¶ * 0,1 * 1) = 0.588
nach 2 s (x = 2) ist y = sin (w*t) = sin (2*¶*f*t) = sin (2 * ¶ * 0,1 * 2) = 0.951
nach 2,5 s (x = 2,5) ist y = sin (w*t) = sin (2*¶*f*t) = sin (2 * ¶ * 0,1 * 2,5) = 1 (maximum!)
danach nimmt y ab, und nach 5s sind wir wieder beim nullpunkt. dann wird y negativ, und nach 10s sind wir wieder beim nullpunkt. anschliessend musst du die zeit (= x-achse) rückwärts zählen bis auf null, die y-werte können beibehalten werden usw.
um den schnittpunkt zu ändern, musst du einfach einen offset zur zeitachse addieren bzw. subtrahieren. es gibt noch viele andere möglichkeiten.
mfg Dristar