Linie aus Punkten

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
SlapY
Beiträge: 47
Registriert: 08.01.2005 20:57

Linie aus Punkten

Beitrag 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
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Beitrag 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:
Benutzeravatar
SlapY
Beiträge: 47
Registriert: 08.01.2005 20:57

Beitrag von SlapY »

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

bye
Slap :mrgreen:
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Beitrag 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
Antworten