Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* 
   * Copyright 2011 Cologne University of Applied Sciences Licensed under the
   * Educational Community License, Version 2.0 (the "License"); you may
   * not use this file except in compliance with the License. You may
   * obtain a copy of the License at
   *
   * http://www.osedu.org/licenses/ECL-2.0
   *
   * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an "AS IS"
  * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
  * or implied. See the License for the specific language governing
  * permissions and limitations under the License.
  */
 package org.amcgala.framework.shape;
 
 
Eine Linie im 3d Raum.

Author(s):
Robert Giacinto
 
 public class BresenhamLine extends Shape {
 
     public double x1y1z1;
     public double x2y2z2;
     private Vector3d startend;
     
     public BresenhamLine(double x1double y1double x2double y2) {
         this. = x1;
         this. = y1;
         this. = x2;
         this. = y2;
 
         if (x1 > x2) { // vertausche Punkte
             this. = x2;
             this. = y2;
             this. = x1;
             this. = y1;
         }
 
         if (x1 == x2 && y1 > y2) { // Vertikale von y1 unten nach y2 oben
             this. = y2;
             this. = y1;
         }
 
          = new Vector3d(x1y1, -1);
          = new Vector3d(x2y2, -1);
     }
 
     public BresenhamLine(Vector3d startVector3d end) {
         this. = start.x;
         this. = start.y;
         this. = start.z;
         this. = end.x;
         this. = end.y;
         this. = end.z;
     }
 
     @Override
     public void render(Matrix transformationCamera cameraRenderer renderer) {
         // Einbeziehen der Transformationsgruppen. Um Animationen zu beruecksichtigen, die auf die einzelnen Felder zugegriffen
         // haben, werden die start und end Vektoren aktualisiert, bevor sie mit der Transformationsmatrix multipliziert werden.
          = new Vector3d().transform(transformation);
          = new Vector3d().transform(transformation);
 
 
         // Start- und Endpunkt der Linie in Pixeln, mit denen die Linienalgorithmen durchgefuehrt werden.
         Pixel startPixel = camera.getImageSpaceCoordinates();
         Pixel endPixel = camera.getImageSpaceCoordinates();
 
         // Wir zeichnen von links nach rechts. Sollte der Startpixel rechts vom Endpixel liegen, dann tauschen wir die Pixel.
         if (startPixel.x > endPixel.x) {
             Pixel tmp = startPixel;
             startPixel = endPixel;
             endPixel = tmp;
         }
 
         /*
          * Beginn des Bresenham Algorithmus
          */
         double dx = endPixel.x - startPixel.x;
         double dy = endPixel.y - startPixel.y;
         double dx2 = 2 * dx;
         double dy2 = 2 * dy;
 
         double e;
         double y = startPixel.y;
         double x = startPixel.x;
         int i = 1;
         renderer.putPixel(new Pixel(xy), );
        //1.+8. Oktant
        if (dy <= dx && -dy <= dx) {
            e = Math.abs(dy2) - dx;
            while (i <= dx) {
                if (e >= 0) { /*
                     * Diagonalschritt
                     */
                    if (dy <= 0) {
                        y--;
                    } else {
                        y++;
                    }
                    e -= dx2;
                }
                x++;
                i++;
                e += Math.abs(dy2);
                renderer.putPixel(new Pixel(xy), );
            }
        }
        //2.+7. Oktant
        if (Math.abs(dy) > dx) {
            e = dx2 - Math.abs(dy);
            while (i <= Math.abs(dy)) {
                if (e >= 0) {
                    x++;
                    e -= Math.abs(dy2);
                }
                if (dy > 0) {
                    y++;
                } else {
                    y--;
                }
                i++;
                e += dx2;
                renderer.putPixel(new Pixel(xy), );
            }
        }
        /*
         * Ende Bresenham Algorithmus
         */
    }
    
    
toString method.
    public String toString() {
		return "BresenhamLine { x1: " + this. + ", \ty1: " + this. + ", \tx2: " + this. + ", \ty2: " + this. + " }";
    }
    
    private static final Logger log = LoggerFactory.getLogger(BresenhamLine.class.getName());
New to GrepCode? Check out our FAQ X