Advertisement
Guest User

Untitled

a guest
Nov 18th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ////////////////////////////////////////////////////////////////////////////////
  2. // bresenham.js
  3. //
  4. // Bearbeiten Sie diese Datei für den Praktikumsteil "Bresenham Line".
  5. //
  6. // HS Duesseldorf - Fachbereich Medien - Grundlagen d. Computergrafik
  7. //
  8. // Studiengang: Medieninformatik
  9. // Gruppe     : O
  10. // Autor 1    : Johannes Hirth
  11. // Autor 2    : Mats Scharnberg
  12. // Autor 3    : Christoph Schneider
  13. // Autor 4    : Steven Beilz
  14. // Autor 5    :
  15. ////////////////////////////////////////////////////////////////////////////////
  16.  
  17.  
  18. ////////////////////////////////////////////////////////////////////////////////
  19. // drawLine(x0, y0, x1, y1)
  20. // Diese Funktion soll eine Linie von (x0, y0) nach (x1, y1) zeichnen.
  21. // Implementieren Sie dazu den Bresenham-Line-Algorithmus für alle Oktanten
  22. // in dieser Funktion. Einen Punkt zeichnen Sie mit setPixel(x,y).
  23. ////////////////////////////////////////////////////////////////////////////////
  24.  
  25. function drawLine(x1, y1, x2, y2){
  26.  
  27.     var x = x1;
  28.     var y = y1;
  29.     var a = y2 - y1;    // delta y
  30.     var b = -(x2 - x1); // -delta x
  31.     var Q_init = 2 * a + b;
  32.     var Q = Q_init;
  33.  
  34.  
  35.     // Oktanten 1, 4, 5, 8
  36.     /*if(Math.abs(b) > Math.abs(a)) {
  37.         // Oktanten 4, 5
  38.         if(b > 0) {
  39.             // Oktant 4
  40.             if(a > 0) {
  41.  
  42.             }
  43.             // Oktant 5
  44.             else {
  45.  
  46.             }
  47.  
  48.         }
  49.         // Oktanten 1, 8
  50.         else {
  51.  
  52.             if(a > 0) {
  53.  
  54.             }
  55.  
  56.             else {
  57.  
  58.             }
  59.  
  60.         }
  61.  
  62.     }
  63.     // Oktanten 2, 3, 6, 7
  64.     else {
  65.  
  66.     }*/
  67.  
  68.     // Oktant 1
  69.     var start = x1;
  70.     var ende = x2;
  71.     var schnelle = start;
  72.     var vergleichsart = 0;
  73.     var veraenderung = 1;
  74.  
  75.     // Oktant 2
  76.     var start = y1;
  77.     var ende = y2;
  78.     var schnelle = start;
  79.     var vergleichsart = 0;
  80.     var veraenderung = 1;
  81.  
  82.     // Oktant 3
  83.     var start = y1;
  84.     var ende = y2;
  85.     var schnelle = start;
  86.     var vergleichsart = 0;
  87.     var veraenderung = 1;
  88.  
  89.     // Oktant 4
  90.     var start = x1;
  91.     var ende = x2;
  92.     var schnelle = start;
  93.     var vergleichsart = 1;
  94.     var veraenderung = -1;
  95.  
  96.     // Oktant 5
  97.     var start = x1;
  98.     var ende = x2;
  99.     var schnelle = start;
  100.     var vergleichsart = 1;
  101.     var veraenderung = -1;
  102.  
  103.     // Oktant 6
  104.     var start = y1;
  105.     var ende = y2;
  106.     var schnelle = start;
  107.     var vergleichsart = 1;
  108.     var veraenderung = -1;
  109.  
  110.     // Oktant 7
  111.     var start = y1;
  112.     var ende = y2;
  113.     var schnelle = start;
  114.     var vergleichsart = 1;
  115.     var veraenderung = -1;
  116.  
  117.     // Oktant 8
  118.     var start = x1;
  119.     var ende = x2;
  120.     var schnelle = start;
  121.     var vergleichsart = 0;
  122.     var veraenderung = 1;
  123.  
  124.  
  125.  
  126.  
  127.     if(start == x1)
  128.         setPixel(schnelle, y);
  129.     else
  130.         setPixel(x, schnelle);
  131.  
  132.  
  133.     for(schnelle = start; vergleich(schnelle, ende, vergleichsart); schnelle = schnelle + veraenderung) {
  134.  
  135.     }
  136.  
  137.     // Übergebe aus der Forschleifendefiniton x1/y1 und x2/y2
  138.     // wenn als vergleichsart false/0 übergeben wird, wird der Vergleich <= durchgeführt
  139.     // bei true/1 >=
  140.     function vergleich(variable1, variable2, vergleichsart) {
  141.         if(vergleichsart)
  142.             return variable1 >= variable2;
  143.         else
  144.             return variable1 <= variable2;
  145.     }
  146.  
  147.  
  148.  
  149.     // Erster Oktant
  150.     if(a > 0 && b <= 0 && Math.abs(b) > Math.abs(a)) {
  151.  
  152.       for(var x = x1; x <= x2; x++) {
  153.         setPixel(x, y);
  154.         if (Q < 0)                  // der nächste Pixel ist ein Feld weiter rechts
  155.             Q = Q + 2 * a;
  156.         else {
  157.             Q = Q + 2 * (a + b);    // der nächste Pixel ist ein Feld weiter rechts und ein Feld weiter unten
  158.             y++;
  159.         }
  160.       }
  161.  
  162.     }
  163.  
  164.     // Zweiter Oktant
  165.     else if(a > 0 && b <= 0 && Math.abs(b) <= Math.abs(a)) {
  166.  
  167.         /*
  168.       x1 = 217;
  169.       x2 = 317;
  170.  
  171.       y1 = 130;
  172.       y2 = 230;
  173.  
  174.       a = 100;
  175.       b = -100;
  176.  
  177.       Q_init = 100;
  178.  
  179. */
  180.       //a = a * -1;
  181.       //b = b * -1;
  182.  
  183.       // Q_init = 2 * a + b;
  184.  
  185.       Q = a + 2 * b;
  186.  
  187.       for(var y = y1; y <= y2; y++) {
  188.         setPixel(x, y);
  189.         if (Q > 0)
  190.             Q = Q + 2 * b;
  191.         else {
  192.             Q = Q + 2 * (a + b);
  193.             x++;
  194.         }
  195.       }
  196.  
  197.  
  198.  
  199. /*for(var x = x1; x <= x2; x++) {
  200.         setPixel(x, y);
  201.         if (Q < 0)                  // der nächste Pixel ist ein Feld weiter rechts
  202.             Q = Q + 2 * a;
  203.         else {
  204.             Q = Q + 2 * (a + b);    // der nächste Pixel ist ein Feld weiter rechts und ein Feld weiter unten
  205.             y++;
  206.         }
  207.       }*/
  208.  
  209.  
  210.  
  211.  
  212.  
  213.       /*for(var x = x1; x <= x2; x++) {
  214.         setPixel(x, y);
  215.  
  216.       }*/
  217.  
  218.  
  219.  
  220.     }
  221.  
  222.     // Dritter Oktant
  223.     else if(a > 0 && b > 0 && Math.abs(b) <= Math.abs(a)) {
  224.  
  225.  
  226.         Q = -1 * a + 2 * b;
  227.  
  228.       for(var y = y1; y <= y2; y++) {
  229.         setPixel(x, y);
  230.         if (Q <= 0)
  231.             Q = Q + 2 * b;
  232.         else {
  233.             Q = Q + 2 * (-1 * a + b);
  234.             x--;
  235.         }
  236.       }
  237.  
  238.     }
  239.  
  240.     // Vierter Oktant
  241.     else if(a > 0 && b > 0 && Math.abs(b) > Math.abs(a)) {
  242.  
  243.       for(var x = x1; x >= x2; x--) {
  244.         setPixel(x, y);
  245.         if (Q < 0)
  246.             Q = Q + 2 * a;
  247.         else {
  248.             Q = Q + 2 * (a - b);
  249.             y++;
  250.         }
  251.       }
  252.  
  253.     }
  254.  
  255.     // Fuenfter Oktant
  256.     else if(a <= 0 && b > 0 && Math.abs(b) > Math.abs(a)) {
  257.  
  258.       for(var x = x1; x >= x2; x--) {
  259.         setPixel(x, y);
  260.         if (Q > 0)
  261.             Q = Q + 2 * a;
  262.         else {
  263.             Q = Q + 2 * (a + b);
  264.             y--;
  265.         }
  266.       }
  267.  
  268.     }
  269.  
  270.     // Sechster Oktant
  271.     else if(a <= 0 && b > 0 && Math.abs(b) <= Math.abs(a)) {
  272.      
  273.       Q = a - 2 * b;
  274.  
  275.       for(var y = y1; y >= y2; y--) {
  276.         setPixel(x, y);
  277.         if (Q > 0)
  278.             Q = Q + -2 * b;
  279.         else {
  280.             Q = Q - 2 * a - 2 * b;
  281.             x--;
  282.         }
  283.       }
  284.     }
  285.  
  286.     // Siebter Oktant
  287.     else if(a <= 0 && b <= 0 && Math.abs(b) <= Math.abs(a)) {
  288.  
  289.       Q = a - 2 * b;
  290.  
  291.       for(var y = y1; y >= y2; y--) {
  292.         setPixel(x, y);
  293.         if (Q <= 0)
  294.             Q = Q - 2 * b;
  295.         else {
  296.             Q = Q + 2 * a - 2 * b;
  297.             x++;
  298.         }
  299.       }
  300.  
  301.     }
  302.  
  303.     // Achter Oktant
  304.     else if(a <= 0 && b <= 0 && Math.abs(b) > Math.abs(a)) {
  305.  
  306.       for(var x = x1; x <= x2; x++) {
  307.         setPixel(x, y);
  308.         if (Q > 0)
  309.             Q = Q + 2 * a;
  310.         else {
  311.             Q = Q + 2 * (a - b);
  312.             y--;
  313.         }
  314.       }
  315.  
  316.     }
  317.  
  318.  
  319.  
  320. }
  321.  
  322.  
  323.  
  324. ////////////////////////////////////////////////////////////////////////////////
  325. // example(i)
  326. // Diese Funktion dient als Codebeispiel.
  327. // Sie wird beim Laden der Seite aufgerufen und kann entfernt werden.
  328. ////////////////////////////////////////////////////////////////////////////////
  329. function example(i)
  330. {
  331.   var y = i + 2;
  332.   for (var x = 0; x < 400; x++)
  333.   {
  334.     y--;
  335.     if (y < -i)
  336.     {
  337.       y = i;
  338.     }
  339.     setPixel(x, Math.abs(y));
  340.   }
  341. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement