Kurvenlinie zeichnen - Wie?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Kurvenlinie zeichnen - Wie?

Beitrag von Josh »

keine ahnung ob du damit was anfangen kannst, aber schau mal hier
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Re: Kurvenlinie zeichnen - Wie?

Beitrag von dllfreak2001 »

Sind Bezierkurven ungeeignet?

Hatte mal nen Code gebastelt, dort konnte ich Bezierkurven mit beliebiger Länge so verbinden, dass sie wie aus einem Guß aussahen.
I´a dllfreak2001
Benutzeravatar
Dostej
Beiträge: 529
Registriert: 01.10.2004 10:02
Kontaktdaten:

Re: Kurvenlinie zeichnen - Wie?

Beitrag von Dostej »

Doch, das wäre auch eine Möglichkeit. Ich bin in Mathe nur nicht gut genug, das ich sowas selbst hinkriegen würde...

@dllfreak:Hast Du den Code noch?(Und wenn ja, könnte ich ihnen haben :wink: ). Wäre nett.

Danke nochmals für die guten tipps.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Re: Kurvenlinie zeichnen - Wie?

Beitrag von dllfreak2001 »

Bitteschön...
Nicht ganz so schön aber funzt
Bezier() ist die Funktion

x0,y0 <= Startpunkt
x1, y1 <= Bezierkontrollpunkt für den Startpunkt

x2, y2 <= Bezierkontrollpunkt für den Endpunkt
x3, y3 <= Endpunkt

detail <= stellt ein aus wievielen teilstücken die kurve besteht

Wie das aussieht siehst du hier:
http://www.id.uzh.ch/publications/ps/bezier.html

Code: Alles auswählen

InitSprite()
InitKeyboard()

screenW = 1024
screenH = 768

OpenScreen(1920, 1080, 32, "Bezier")

Procedure Bezier(x0.f, y0.f, x1.f, y1.f, x2.f, y2.f, x3.f, y3.f, color.l, detail.l)
  
  Protected lastX.f, lastY.f, newX.f, newY.f
  
  lastX = x0
  lastY = y0
  
  For u = 0 To detail
    i.f = u/detail
    newX = x0*(1 - i)*(1 - i)*(1 - i) + x1*3*i*(1 - i)*(1 - i) + x2*3*i*i*(1 - i) + x3*i*i*i
    newY = y0*(1 - i)*(1 - i)*(1 - i) + y1*3*i*(1 - i)*(1 - i) + y2*3*i*i*(1 - i) + y3*i*i*i
    LineXY(lastX, lastY, newX, newY, color)
    lastX = newX
    lastY = newY
  Next

EndProcedure

Structure bez
  x.f
  y.f
  xb.f
  yb.f
EndStructure

num = 32

Dim bez.bez(num)

For n = 0 To num
  bez(n)\x = n * 256 
  bez(n)\y = screenH/2 
  bez(n)\xb = bez(n)\x - Random(256)
  bez(n)\yb = bez(n)\y + Random(256)  
Next

Repeat
  ExamineKeyboard()
  ClearScreen(0)
 
  StartDrawing(ScreenOutput())
    
    For n = 1 To num    
      Bezier(bez(n - 1)\x, bez(n - 1)\y, 2*bez(n - 1)\x - bez(n - 1)\xb, 2*bez(n - 1)\y - bez(n - 1)\yb, bez(n)\xb, bez(n)\yb, bez(n)\x, bez(n)\y,  RGB(255, 255, 255), 64)
    Next 
    
  StopDrawing()
  
  FlipBuffers()
  Delay(10)

Until KeyboardPushed(#PB_Key_Escape)
CloseScreen()
End
I´a dllfreak2001
Antworten