Seite 1 von 1

Linie aus Punkten

Verfasst: 03.09.2005 23:59
von SlapY
Hi leutz,
kommen wir gleich zum Thema... :mrgreen:
ich hab da n Problem mit der Procedure hier:

Code: Alles auswählen

Procedure PlotLine(x1.l,y1.l,x2.l,y2.l) 
    If x1 = 0 Or y1 = 0 Or x2 = 0 Or y2 = 0  
        ProcedureReturn 0 
    Else 
        dx.f = x2-x1 
        If dx<0 
            SignX = -1 
            dx = Abs(dx) 
        Else 
            SignX = 1 
        EndIf 
         
        dy.f = y2-y1 
        If dy<0 
            SignY = -1 
            dy = Abs(dy) 
        Else 
            SignY = 1 
        EndIf 
         
        Result = 1 
         
        If dy < dx 
            Stp.f = dy/dx 
            For n=0 To Int(dx)  
                If x => 0 And y => 0 
                    Plot(x,y) 
                EndIf 
            Next 
        Else 
            Stp.f = dx/dy 
            For n=0 To Int(dy)  
                x = x1+(n*Stp*SignX) 
                y = y1+(n*SignY) 
                If x => 0 And y => 0  
                    Plot(x,y) 
                EndIf  
            Next 
        EndIf 
         
        ProcedureReturn Result  
    EndIf  
EndProcedure
Die funzt nicht richitg...sollte eigendlich ne Linie erzeugen :(.. aber irgendwie geht das nicht richtig ..?

Kann das vll. jemand fixxen? :allright:

Bye
Slap

Verfasst: 04.09.2005 10:28
von Pelagio
@SlapY

ich habe mir deine Procedure angeschaut und, bei mir funktioniert es.
hier mein zusätzlicher Code mit dem ich deine Procedure laufen lies.

Code: Alles auswählen

OpenWindow(0, 100, 200, 300, 200, #PB_Window_SystemMenu, "2D Drawing Test")
If StartDrawing(WindowOutput())
   PlotLine(30,50,100,150)
   StopDrawing() 
EndIf

Repeat
    EventID = WaitWindowEvent() 
Until EventID = #PB_Event_CloseWindow
:allright:

Verfasst: 04.09.2005 10:45
von SlapY
Hi,....
...mysteriös :? ...jetzt gehts auch bei mir (:?)..
sry ^^.. :roll: war schon spät gestern *gg*

bye
Slap :mrgreen:

Verfasst: 04.09.2005 13:41
von SoS

Code: Alles auswählen

If x1 = 0 Or y1 = 0 Or x2 = 0 Or y2 = 0  
  ProcedureReturn 0 
Else
halte ich für ziemlich überflüssig ;)

du solltest statt dessen Deine Auflösung festlegen. z.b.

Code: Alles auswählen

#xmax=800
#ymax=600

und die Abfrage bei Plot so gestallten

Code: Alles auswählen


If x => 0 and x< #xmax And y => 0 and y< #ymax
  Plot(x,y) 
EndIf

Das verhindert das zeichnen aussehalb des Screens und verhindert fehler :)

Zusätzlich währe die ein Parameter für die Farbe auch noch praktisch