bezier ?!

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

getlose

Betreff: bezier ?!

BeitragMi, Aug 18, 2004 16:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Graphics3D 800,600,16,2

;strg:
;MouseHit(1) : Punkt setzen
;MouseHit(2) : Strecke berechnen


;sinn der ganzen sache ist, das man punkte
;setzt und daraus, anhand der winkel, einen
;smoothen "track" berechnen lässt.

;das problem : der erste punkt wird
;noch richtig berechnet, aber der zweite
;dagegen komplett falsch.
;Ps : das mit dem fehlenden übergang, von 0 zu 359,
;ist KEIN fehler. hab es nur noch nicht integriert.


Global mpx,mpy,mx,my,psize=10,lthick=2,track_image

Type points
   Field x#
   Field y#
End Type

font=LoadFont ("verdena",14,1)
SetFont font

SetBuffer BackBuffer()
While Not KeyHit(1)
Cls

mx=MouseX()
my=MouseY()


If MouseHit(1) Then AddPoint()
If MouseHit(2) Then
   ;Erst die Funktion "CreateSmoothTrackImage()" anpassen
   ;mpx=mpx-(old_mx-mx)
   ;mpy=mpy-(old_my-my)
   CreateSmoothTrackImage()
EndIf
GetInfosAboutPoint()

If Not img=0 Then DrawImage img,0,0

DrawPoints()


old_mx=mx
old_my=my
Flip
Wend


Function AddPoint()
points.points=New points
points\x=mx-mpx
points\y=my-mpy
End Function

Function DrawPoints()
For points.points=Each points
   Color 150,230,120
   Rect points\x-(psize/2)+mpx,points\y-(psize/2)+mpy,psize,psize
   Color 150,120,110
   Rect points\x-((psize/2)-lthick)+mpx,points\y-((psize/2)-lthick)+mpy,(psize-(lthick*2)),(psize-(lthick*2))
Next
End Function

Function GetInfosAboutPoint()
For points.points=Each points
   If RectsOverlap (mx,my,1,1,points\x-(psize/2)+mpx,points\y-(psize/2)+mpy,psize,psize) Then
      Color 200,200,220
      Rect points\x+psize-3+mpx,points\y-3+mpy,StringWidth("PosX : "+points\x)+6,(FontHeight()*2)+6
      Color 100,100,120
      Rect points\x+psize-2+mpx,points\y-2+mpy,StringWidth("PosX : "+points\x)+4,(FontHeight()*2)+4
      Color 230,230,255
      Text points\x+psize+mpx,points\y+mpy,"PosX : "+points\x
      Text points\x+psize+mpx,points\y+FontHeight()+mpy,"PosY : "+points\y
   EndIf
Next
End Function

Function CreateSmoothTrackImage()
If Not track_image=0 Then FreeImage track_image
track_image=CreateImage (GraphicsWidth(),GraphicsHeight())
SetBuffer ImageBuffer(track_image)
z.points=First points
If z.points=Null Then Return 0
If After z.points=Null Then Return 0
track_step_size#=1 ;also 1 Pixel pro Schritt
winkel_step#=4 ;die Kurve geht also Pro Schritt einen Richtungswechsel von 4 Grad an
a.points=After First points
b.points=Before a.points
ziel_winkel#=(ATan2((a\y#-b\y#),(a\x#-b\x#)))
act_posx#=b\x
act_posy#=b\y
ziel_posx#=a\x
ziel_posy#=a\y
act_winkel#=0
While k=0
If act_winkel#<ziel_winkel# Then act_winkel#=act_winkel#+winkel_step#
If act_winkel#>ziel_winkel# Then act_winkel#=act_winkel#-winkel_step#
old_px#=act_posx#
old_py#=act_posy#
act_posx#=act_posx#+Cos(act_winkel#)*track_step_size#
act_posy#=act_posy#+Sin(act_winkel#)*track_step_size#
ziel_winkel#=(ATan2((a\y#-act_posy#),(a\x#-act_posx#))+360) Mod 360
SetBuffer BackBuffer() ;<-- debug
Color 255,255,255
Line old_px#,old_py#,act_posx#,act_posy#
drawpoints() ;<-- debug
Flip ;<-- debug
debug(act_posx#,act_posy#,ziel_posx#,ziel_posy#,act_winkel#,ziel_winkel#,kk)
If act_posx#>ziel_posx#-3 Then
   If act_posx#<tiel_posx#+3Then
      If act_posy#>ziel_posy#-3 Then
         If act_posy#<tiel_posy#+3 Then
            ende=1
         EndIf
      EndIf
   EndIf
EndIf
If ende=1 Then kk=1
If ende=1 Then
   a.points=After a.points
   If a.points=Null Then Goto end1
   b.points=Before a.points
   ziel_winkel#=(ATan2((a\y#-act_posy#),(a\x#-act_posx#))+360) Mod 360 ;   <--   :(
   ziel_posx#=a\x
   ziel_posy#=a\y
   ende=0
EndIf
Wend
.end1
SetBuffer BackBuffer()
Return track_image
End Function

Function debug(w1#,w2#,w3#,w4#,w5#,w6#,w7#)
SetBuffer BackBuffer()
Color 200,100,100
Rect 0,0,100,140
Color 255,255,255
Text 10,2,w1#
Text 10,22,w2#
Text 10,42,w3#
Text 10,62,w4#
Text 10,82,w5#
Text 10,102,w6#
Text 10,122,w7#
Flip
End Function


:/
ich verzweifle langsam
 

morszeck

BeitragMi, Aug 18, 2004 17:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Und was sollen wir machen? Gehe mal auf www.blitzbase.de da findest du eine fertige Routine...
WinXpProf&SP2, B3D V1.88, B+ V1.40, BMax101Beta, AMD TB1.4GHz, DDR266/768MB, GeForce3@64MB
 

getlose

BeitragMi, Aug 18, 2004 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
den beitrag hättest du dir schenken können "admin" husky Wink
wenn ich was fertiges will würde ich hier nicht nachfragen.

Markus2

BeitragDo, Aug 19, 2004 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
@getlose_back
Was soll denn das mal werden ?
 

getlose

BeitragFr, Aug 20, 2004 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
So ne Art Streckeneditor in 2D der das ganze dann in 3D erstellt.
Meine Mathekenntnisse sind nur leider unter aller Sau. Confused

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group