Das mag für manch einen keine große Sache sein, mich hats aber doch ins Schleudern gebracht.
Vielleicht hilfts ja noch jemandem.
Das folgende Snippet zeichnet eine Strecke nur mittels Punkten auf der x-Achse, die in die nach y aufgelöste Geradengleichung eingesetzt werden (Zweipunktform).
Je krasser die Steigung, umso mehr Lücken zwischen den Punkten - logisch.
Code: Alles auswählen
EnableExplicit
Declare findPoints()
Declare drawLine()
Declare lineEquation(x0,y0,x1,y1,x)
#xRes = 800
#yRes = 600
Global Dim x(1)
Global Dim y(1)
InitSprite()
Global screen = OpenWindow(#PB_Any,0,0,#xRes,#yRes,"Geradengleichung (Zweipunkteform) --- Press ESC to Exit ---",#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(screen),0,0,#xRes,#yRes)
InitKeyboard()
findPoints()
drawLine()
Procedure findPoints()
Protected s
For s = 0 To 1
x(s) = Random(#xRes-1,1)
y(s) = Random(#yRes-1,1)
Next
If x(0) > x(1) ;For/Next-Schleife zählt nach oben!
Swap x(0), x(1)
Swap y(0), y(1)
EndIf
EndProcedure
Procedure drawLine()
Protected x.i, y.f
If StartDrawing(ScreenOutput())
For x = x(0) To x(1)
If x(0) <> x(1) ;Division durch Null abfangen!!!
y = lineEquation(x(0),y(0),x(1),y(1),x)
Plot(x,y)
Else
Debug "Steigung ist unendlich!"
LineXY(x(0),y(0),x(1),y(1))
EndIf
Next
StopDrawing()
EndIf
FlipBuffers()
Repeat
ExamineKeyboard()
WaitWindowEvent(1)
Until KeyboardPushed(#PB_Key_Escape)
EndProcedure
Procedure lineEquation(x0,y0,x1,y1,x)
Protected num.f, denom.f, y.f
num = y1-y0
denom = x1-x0
y = ((num/denom) * (x-x0)) + y0
ProcedureReturn y
EndProcedure