Berechnung Sinus-Bewegung / Bogenmaß

Anfängerfragen zum Programmieren mit PureBasic.
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Beitrag von Agent »

Moinsen (wenn auch schon abend)

Danke für eure zahlreichen Posts. Ich fand alle gut! ;)
Teilweise ziemlich aufwendig. Je nach dem, zu welchem Zweck.

Für ein einfaches Fenster hätte es auch #null's einfache version mit den 98% getan. PMV's version ist am professionellsten und universellsten.

Ich habe mir alle gespeichert und experimentiere damit gerade. Mal sehen was zum Einsatz kommt bei der ein oder anderen Anwendung.

Vielen Dank!!!
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Frage, warum ist PMV's version so unsiversel?
das ist meine auch,
und der Code ist kürzer *gekänkt bin* ^^

Hier das ganze nochmal schöner dargestellt:

Code: Alles auswählen

InitSprite()
OpenWindow(1,200,200,310,300,"test")
CreateGadgetList(WindowID(1))
TextGadget(10,0,0,100,30,"New Window X")
TextGadget(11,0,30,100,30,"New Window Y")
StringGadget(1,100,00,100,30,"")
StringGadget(2,100,30,100,30,"")
ButtonGadget(0,200,00,100,60,"Submit")
TextGadget(5,0,60,310,30,"")
Targetx=WindowX(1)
targety=WindowY(1)
OpenWindowedScreen(WindowID(1),0,100,310,200,0,0,0)


Repeat
  For schleife=1 To 20
    event=WindowEvent()
    
    If event=#PB_Event_Gadget
      If EventGadget()=0
        Targetx=Val(GetGadgetText(1))
        targety=Val(GetGadgetText(2))
        move=0
        winkel=0
      EndIf
    EndIf
    
    If event= #PB_Event_CloseWindow
      End
    EndIf
    
  Next
  
  ; der Kern
  If WindowX(1)<>target Or WindowY(1)<>target
    If move=0
      xmove=(Targetx-WindowX(1))/2
      ymove=(targety-WindowY(1))/2
      move=1
      xl=WindowX(1)
      yl=WindowY(1)
    EndIf
  EndIf
  
  
  If move=1
    winkel+1
    Delay(10)
    bogenmass.f=winkel*3.1415926/180
    x.l=xl-Cos(bogenmass)*xmove+xmove
    y.l=yl-Cos(bogenmass)*ymove+ymove
    SetWindowPos_(WindowID(1),#HWND_TOPMOST,x,y,310,300,0);#SWP_NOZORDER)
    If winkel=180
      move=0
      winkel=0
      Targetx=Random(1024-300)
      targety=Random(768-300)
    EndIf
  EndIf
  ; ende des Kerns
  
  
  StartDrawing(ScreenOutput())
  ;Box(0,0,310,200)
  speed.f=Sqr(Pow((x-xold.f),2)*Pow((y-yold.f),2))
  
  If speed>speedmax
    a+1
    If a>1
      speedmax=speed
      SetGadgetText(5,"Maximaler Speed: "+Str(speedmax))
    EndIf
  EndIf
  
  Color=RGB(Abs(Sin(speed/6)*255),Abs(Cos(speed/6)*255),0)
  Circle(x/3,y/3,2,Color)
  StopDrawing()
  FlipBuffers()
  xold=x
  yold=y  
  
Until event=#PB_Event_CloseWindow
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

mom du möchstet doch eine variable von 100 langsam nach 75 bringen dann schneller werdend nach 50 und wieder langsam werdend nach 25 und stoppend bei 0 oder?

wenn ja ganz einfach!

Code: Alles auswählen

Global bogen.d
bogen = 3.1415926 / 180
For i = 90 To 270 step speed
  x = Sin(i * bogen)*breite /2 + breite /2
  Debug x
Next i

also: breite sind die 100 pixel du kannst jetzt auch 200 nehmen.
speed: desto größer desto schneller. achja du musst eine sehr sehr kleine zahl nehmen ^^


mfg bruegge!
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Beitrag von Agent »

hi Brügge.

*hehe*
aber dein Beispiel funzt nicht. auch nicht wenn ich aus speed eine zahl mache (pb4). habe die variablen definiert mit werten, erfolglos.
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

ohh sorry mein fehler habe es vorher nicht getestet...

so jetzt geht es:

Code: Alles auswählen

Global bogen.d
Global breite.d
Global i.d
Global speed.d
speed = 0.08
breite = 100
bogen = 3.1415926 / 180 
i = 90
Repeat
  i = i + speed
  x = Sin(i * bogen)*breite /2 + breite /2 
  Debug x 
Until i >= 270
mfg bruegge
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Letzter Test, ob ich nicht doch unsichtbar geworden bin ^^

Agent? hast du meinen Post oben gelesen?
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Code: Alles auswählen

For i = 90 To 270 step speed
PB kann keine Variablen hinter Step
mach ma drauß ne Konstante :wink:

@Macro
ich hab mir deine Code jetzt ne gewisse Zeit lang angeschaut, wie will
man da die Beschleunigung festlegen? Oder die Bremskraft? Es ist zwar
möglich ... aber dafür ist meine Version wohl etwas besser geeignet :D
Oder versuch mal mit deiner Version die gleichen Kräfte ein zu bauen,
wie ich sie in meinem Beispiel hab: 10 m/s² :wink:
Das einstellen einer maximalen Geschwindigkeit ist auch nicht ohne
weiteres möglich. Dafür fehlen noch ein paar Variablen, sofern das so
überhaupt möglich ist :D

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Wenn ich ein Fenster nach Sinus bewegen will,
also schneller werden, und wieder abbremsen,
brauche ich nicht gleich 100 Parameter, lieber klein und schnell ^^

Aber das ist jetzt natürlich meine Meinung.

Ein bisschen an der Gesamtgeschwindigkeit kann man ja drehen,
mach aus "winkel" eine double und erhöhe/senke den Wert,
der dazugezählt wird.
Antworten