Algorithm for computer control of a digital plotter



  • ich verstehe nicht ganz was mir diese Funktionen (F und G) bringen - wenn ich weiß das F(1,0,0)=(0,0,0,1) ist dann sagt das doch auch nichts darüber aus welchen wert ich m1 bzw. m2 zuweisen muss ...?



  • Doch, schau dir die Tabelle 1 auf der vorhergehenden Seite an.



  • ich sehe anhand der Tabelle, das für F(1,0,0) als Bewegungrichtungen M7 und M3 zu wählen sind

    warum sollt ich jetzt auch noch ermitteln welches vierer Tupel ich meinem dreier Tupel zuweisen kann - was macht das für einen Sinn?



  • Vertexwahn schrieb:

    ich sehe anhand der Tabelle, das für F(1,0,0) als Bewegungrichtungen M7 und M3 zu wählen sind

    Nein, du schließt aus (1,0,0) dass M7 und M8 zu wählen sind.

    warum sollt ich jetzt auch noch ermitteln welches vierer Tupel ich meinem dreier Tupel zuweisen kann - was macht das für einen Sinn?

    Sollst du doch gar nicht. Der Weg über F und G ist lediglich eine einfache(?) Möglichkeit, die Bewegungsrichtung zu bestimmen, ohne in die Tabelle zu gucken.



  • > Der Weg über F und G ist lediglich eine einfache(?) Möglichkeit, die Bewegungsrichtung zu bestimmen, ohne in die Tabelle zu gucken.

    verstehe ich nicht wie das gehen soll - kannst du mal ein Beispiel machen

    z. b. hab ich F(1, 0, 0) daraus kann ich dann ausrechen F(1, 0, 0) = (0, 0, 0, 1)

    wie kann ich jetzt auf die Bewegungsrichtung schließen ...?



  • Tja, ich hatte hinter das "einfach" mit Absicht ein Fragezeichen gesetzt. Was daran einfacher sein soll ist mir auch nicht so recht klar, da man m1 und m2 auch bequem direkt aus X,Y,Z bestimmen kann. Das sind ja praktisch 3 Bits, also nehm ich eine Tabelle mit 8 Einträgen und fertig. Er führt den Nutzen von F und G ja leider auch nicht weiter aus. Da in diesen Tupeln immer genau eine 1 vorkommt, könnte es vielleicht für eine Hardware-Implementation gedacht sein (Spekulation).



  • mmh - ich schreib dem Bresenham einfach mal ne E-Mail 😉



  • Eine weitere Frage: Wie kommt Bresenham überhaupt auf die Tabelle - kann man sich die einfach so aus den Fingern saugen - oder muss ich mir um 100% sicher zu sein, dass Bresenham keine Fehler gemacht hat für jeden Oktanten eine Skizze machen und alles nachrechnen?

    ich vermute, dass er einfach für jeden Oktanten eine Skizze angefertigt hat und Gemeinsamkeiten untersucht hat und dabei auf diese Form gestoßen ist.



  • Ich nehme an das die Funktionen F und G verwendet werden für die interne Bewegungskodierung des Plotters

    > This paper is based on "An incremental algorithm for digital plotting"

    mal sehen ob ich den Artikel irgendwo finden kann - vielleicht klärt sich dann das Problem

    Das soll der Code von Bresenham sein:

    000       JOB  ENTER PLOT POINTS FROM 1407
                   CTL  4411
                   ORG  501
         *
         *                          TRAVEL SUBROUTINE
         *
         TRAVEL    SBR  LEAVE&3
                   ZA   ZEROA,ALPHA
                   ZA   XTRGT,DELX
                   ZA                  YTRGT,DELY
                   S    XPR,DELX
                   S                   YPR,DELY
                   MCW  XTRGT,XPR
                   MCW                 YTRGT,YPR
                   ZA   DELX,DELA
                   ZA                  DELY,DELB
                   MZ   *&8,DELA                 NEED MAGNITUDE SO  A B BITS
                   MZ   *&1,DELB
         *                          DETERMINE OCTANT
                   C    DELA,DELB
                   BM   DELXN,DELX
                   BM   DELYN,DELY
                   MN   PXPY,D45
                   BH   D00PY
         D00PX     MN   PX,D00
         SETDEL    ZS   DELA,DEL
                   A    DELA           DELA NOW DOUBLED-SEE DRIVING LOOP
                   A                   DELB NOW DOUBLED-SEE DRIVING LOOP
                   B    TALPHA
         DELXN     BM   DELXYN,DELY
                   MN   NXPY,D45
                   BH   D00PY
         D00NX     MN   NX,D00
                   B    SETDEL
         DELYN     MN   PXNY,D45
                   BL   D00PX
         D00NY     MN   NY,D00
                   B    DELAY
         D00PY     MN   PY,D00
         DELAY     MN   DELY,DELA                DELA S/B DELY  SAVE PLUS
                   MCW
                   MN   DELX,DELB                DELB S/B DELX
                   MCW
                   B    SETDEL
         DELXYN    MN   NXNY,D45
                   BL   D00NX
                   B    D00NY
         *                          PLOTTER DRIVING LOOP
         D00GO     MCW  %T0,D00,S                MOVE RELATIVE ZERO DEGREES
         TALPHA    C    ALPHA,DELA
         LEAVE     BE   0                        0 DUMMY
                   A    TWOA,ALPHA        NOTE   DELA HAS BEEN DOUBLED
                   A    DELB,DEL          NOTE   DELB PREVIOUSLY DOUBLED
                   BM   D00GO,DEL
                   MCW  %T0,D45,S
                   S    DELA,DEL          NOTE   DELA PREVIOUSLY DOUBLED
                   B    TALPHA
         *                          CONSTANTS
         ALPHA     DCW  #6
         YTRGT     DCW  #6                  DESIRED Y COORDINATE
         XTRGT     DCW  #6                  DESIRED X COORDINATE
         DELY      DCW  #6                  Y2 MINUS Y1
         DELX      DCW  #6                  X2 MINUS X1
         YPR       DCW  #6                  PRESENT Y COORDINATE
         XPR       DCW  #6                  PRESENT X COORDINATE
         DELB      DCW  #6                  DEPENDENT VARIABLE DIFF
         DELA      DCW  #6                  INDEPENDENT VARIABLE DIFF
         DEL       DCW  #6                  DECISION DIFFERENCE
         D00       DA   1X1,G               RELATIVE 0 DEGREE MOVE
         D45       DA   1X1,G               RELATIVE 45 DEGREE MOVE
         PX        DCW  @3@                   0  DEGREE CODE
         PXPY      DCW  @2@                  45  DEGREE CODE
         PY        DCW  @1@                  90  DEGREE CODE
         NXPY      DCW  @8@                 135  DEGREE CODE
         NX        DCW  @7@                 180  DEGREE CODE
         NXNY      DCW  @6@                 225  DEGREE CODE
         NY        DCW  @5@                 270  DEGREE CODE
         PXNY      DCW  @4@                 315  DEGREE CODE
         ZEROA     DCW  &0
         TWOA      DCW  &2
         *      
         *                          END OF TRAVEL SUBROUTINE
         *      
         *                                  --CALLING SEQUENCE--
         *                               1.   ZA   DESIRED X COORDINATE, XTRGT
         *                               2.   ZA   DESIRED Y COORDINATE, YTRGT
         *                               3.   B    TRAVEL
         *      
         *                          XPR,YPR ARE UPDATED
         *                          TRAVEL EXECUTED
         *                          CONTROL RETURNED TO INSTR AFTER *B TRAVEL*
         BEGINX    LCA  MXGX,47
                   SW   27,MSGX-1
                   MCE  XPR,33
                   MCW  &XTRGT,PLACE&6
         TYPE      LCA  @}@,48
                   MCW  %T0,21,W
                   CS   8
                   LCA  @}@,8
                   BIN  VIN,Q
                   B    *-8
         VIN       MCW  %T0,1,R
                   SBR  PLACE&3
                   BIN  TYPE,*
                   BCE  PLACE&7,1,}
                   MA   @I9H@,PLACE&3
                   BM   VMINUS,1
                   MCW  @?@,PLACE
                   BWZ  VPLUS,1,B
                   SW   1
         PLACE     ZA   0,0
                   BW   BEGINY,MSGX-1
                   B    TRAVEL
                   B    BEGINX
         VMINUS    MCW  @!@,PLACE
         VPLUS     SW   2
                   B    PLACE
         BEGINY    LCA  MSGY,47
                   SW   27
                   CW   MXGX-1
                   MCE  YPR,33
                   MCW  &YTRGT,PLACE&6
                   B    TYPE
         MSGX      DCW  @X NOW     0 -, ENTER NEXT X@
         MSGY      DCW  @Y NOW     0 -, ENTER NEXT Y@
                   END  BEGINX
    

    ob ich da richtig liege mit meiner vermutung weiß ich net - kann aus dem code und den kommentaren nicht wirklich viel rauslesen



  • Geht das auch in C/C++ 😕
    Ich zumindest baue Häuser nicht mit den einzelnen Molekülen zusammen.



  • > Geht das auch in C/C++

    Der C/C++ Standard unterstützt halt mal keine Plotter - traurig aber wahr 😉
    Der Code entstand in den 60ern - da hatte man es noch nicht so mit C++ - das ich diesen Code präsentiere hat nur folgenden Sinn:
    Ich hoffe jemand kann da rauslesen wie der Plotter intern die Bewegungen kodiert - das war doch die Vermutung von Bashar das die Bewegung M1 als (1, 0, 0, 0) kodiert ist - oder so....

    dieses Programm gibts halt nicht in C++ und das ist auch gar nicht das Ziel - mich interessiert nur was die Funkton F und G bewirken - sonst nichts


Anmelden zum Antworten