Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ////////////////////////////////////////////////////////////////////////////////
- // bresenham.js
- //
- // Bearbeiten Sie diese Datei für den Praktikumsteil "Bresenham Line".
- //
- // HS Duesseldorf - Fachbereich Medien - Grundlagen d. Computergrafik
- //
- // Studiengang: Medieninformatik
- // Gruppe : O
- // Autor 1 : Johannes Hirth
- // Autor 2 : Mats Scharnberg
- // Autor 3 : Christoph Schneider
- // Autor 4 : Steven Beilz
- // Autor 5 :
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- // drawLine(x0, y0, x1, y1)
- // Diese Funktion soll eine Linie von (x0, y0) nach (x1, y1) zeichnen.
- // Implementieren Sie dazu den Bresenham-Line-Algorithmus für alle Oktanten
- // in dieser Funktion. Einen Punkt zeichnen Sie mit setPixel(x,y).
- ////////////////////////////////////////////////////////////////////////////////
- function drawLine(x1, y1, x2, y2){
- var x = x1;
- var y = y1;
- var a = y2 - y1; // delta y
- var b = -(x2 - x1); // -delta x
- var Q_init = 2 * a + b;
- var Q = Q_init;
- // Oktanten 1, 4, 5, 8
- /*if(Math.abs(b) > Math.abs(a)) {
- // Oktanten 4, 5
- if(b > 0) {
- // Oktant 4
- if(a > 0) {
- }
- // Oktant 5
- else {
- }
- }
- // Oktanten 1, 8
- else {
- if(a > 0) {
- }
- else {
- }
- }
- }
- // Oktanten 2, 3, 6, 7
- else {
- }*/
- // Oktant 1
- var start = x1;
- var ende = x2;
- var schnelle = start;
- var vergleichsart = 0;
- var veraenderung = 1;
- // Oktant 2
- var start = y1;
- var ende = y2;
- var schnelle = start;
- var vergleichsart = 0;
- var veraenderung = 1;
- // Oktant 3
- var start = y1;
- var ende = y2;
- var schnelle = start;
- var vergleichsart = 0;
- var veraenderung = 1;
- // Oktant 4
- var start = x1;
- var ende = x2;
- var schnelle = start;
- var vergleichsart = 1;
- var veraenderung = -1;
- // Oktant 5
- var start = x1;
- var ende = x2;
- var schnelle = start;
- var vergleichsart = 1;
- var veraenderung = -1;
- // Oktant 6
- var start = y1;
- var ende = y2;
- var schnelle = start;
- var vergleichsart = 1;
- var veraenderung = -1;
- // Oktant 7
- var start = y1;
- var ende = y2;
- var schnelle = start;
- var vergleichsart = 1;
- var veraenderung = -1;
- // Oktant 8
- var start = x1;
- var ende = x2;
- var schnelle = start;
- var vergleichsart = 0;
- var veraenderung = 1;
- if(start == x1)
- setPixel(schnelle, y);
- else
- setPixel(x, schnelle);
- for(schnelle = start; vergleich(schnelle, ende, vergleichsart); schnelle = schnelle + veraenderung) {
- }
- // Übergebe aus der Forschleifendefiniton x1/y1 und x2/y2
- // wenn als vergleichsart false/0 übergeben wird, wird der Vergleich <= durchgeführt
- // bei true/1 >=
- function vergleich(variable1, variable2, vergleichsart) {
- if(vergleichsart)
- return variable1 >= variable2;
- else
- return variable1 <= variable2;
- }
- // Erster Oktant
- if(a > 0 && b <= 0 && Math.abs(b) > Math.abs(a)) {
- for(var x = x1; x <= x2; x++) {
- setPixel(x, y);
- if (Q < 0) // der nächste Pixel ist ein Feld weiter rechts
- Q = Q + 2 * a;
- else {
- Q = Q + 2 * (a + b); // der nächste Pixel ist ein Feld weiter rechts und ein Feld weiter unten
- y++;
- }
- }
- }
- // Zweiter Oktant
- else if(a > 0 && b <= 0 && Math.abs(b) <= Math.abs(a)) {
- /*
- x1 = 217;
- x2 = 317;
- y1 = 130;
- y2 = 230;
- a = 100;
- b = -100;
- Q_init = 100;
- */
- //a = a * -1;
- //b = b * -1;
- // Q_init = 2 * a + b;
- Q = a + 2 * b;
- for(var y = y1; y <= y2; y++) {
- setPixel(x, y);
- if (Q > 0)
- Q = Q + 2 * b;
- else {
- Q = Q + 2 * (a + b);
- x++;
- }
- }
- /*for(var x = x1; x <= x2; x++) {
- setPixel(x, y);
- if (Q < 0) // der nächste Pixel ist ein Feld weiter rechts
- Q = Q + 2 * a;
- else {
- Q = Q + 2 * (a + b); // der nächste Pixel ist ein Feld weiter rechts und ein Feld weiter unten
- y++;
- }
- }*/
- /*for(var x = x1; x <= x2; x++) {
- setPixel(x, y);
- }*/
- }
- // Dritter Oktant
- else if(a > 0 && b > 0 && Math.abs(b) <= Math.abs(a)) {
- Q = -1 * a + 2 * b;
- for(var y = y1; y <= y2; y++) {
- setPixel(x, y);
- if (Q <= 0)
- Q = Q + 2 * b;
- else {
- Q = Q + 2 * (-1 * a + b);
- x--;
- }
- }
- }
- // Vierter Oktant
- else if(a > 0 && b > 0 && Math.abs(b) > Math.abs(a)) {
- for(var x = x1; x >= x2; x--) {
- setPixel(x, y);
- if (Q < 0)
- Q = Q + 2 * a;
- else {
- Q = Q + 2 * (a - b);
- y++;
- }
- }
- }
- // Fuenfter Oktant
- else if(a <= 0 && b > 0 && Math.abs(b) > Math.abs(a)) {
- for(var x = x1; x >= x2; x--) {
- setPixel(x, y);
- if (Q > 0)
- Q = Q + 2 * a;
- else {
- Q = Q + 2 * (a + b);
- y--;
- }
- }
- }
- // Sechster Oktant
- else if(a <= 0 && b > 0 && Math.abs(b) <= Math.abs(a)) {
- Q = a - 2 * b;
- for(var y = y1; y >= y2; y--) {
- setPixel(x, y);
- if (Q > 0)
- Q = Q + -2 * b;
- else {
- Q = Q - 2 * a - 2 * b;
- x--;
- }
- }
- }
- // Siebter Oktant
- else if(a <= 0 && b <= 0 && Math.abs(b) <= Math.abs(a)) {
- Q = a - 2 * b;
- for(var y = y1; y >= y2; y--) {
- setPixel(x, y);
- if (Q <= 0)
- Q = Q - 2 * b;
- else {
- Q = Q + 2 * a - 2 * b;
- x++;
- }
- }
- }
- // Achter Oktant
- else if(a <= 0 && b <= 0 && Math.abs(b) > Math.abs(a)) {
- for(var x = x1; x <= x2; x++) {
- setPixel(x, y);
- if (Q > 0)
- Q = Q + 2 * a;
- else {
- Q = Q + 2 * (a - b);
- y--;
- }
- }
- }
- }
- ////////////////////////////////////////////////////////////////////////////////
- // example(i)
- // Diese Funktion dient als Codebeispiel.
- // Sie wird beim Laden der Seite aufgerufen und kann entfernt werden.
- ////////////////////////////////////////////////////////////////////////////////
- function example(i)
- {
- var y = i + 2;
- for (var x = 0; x < 400; x++)
- {
- y--;
- if (y < -i)
- {
- y = i;
- }
- setPixel(x, Math.abs(y));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement