Skip to content
Snippets Groups Projects
Select Git revision
  • 52d229b492a57f1f81488925f7c3111cccfa15b9
  • master default protected
2 results

AbstractShape.java

Blame
  • Forked from COUETOUX Basile / graphic-2020
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    Grid.java 2.57 KiB
    package GraphClasses;
    import Graph.*;
    
    import java.util.BitSet;
    
    
    public class Grid {
    
        public int width;
        public int height;
        int maxVertex;
    
        public Graph graph;
    
        public int abscissaOfVertex(int vertex) {
            return vertex % width;
        }
    
        public int ordinateOfVertex(int vertex) {
            return vertex / width;
        }
    
        private int vertexOfCoordinate(int abscissa, int ordinate) {
            return ordinate * width + abscissa;
        }
    
        public Grid(int width, int height) {
            this.width = width;
            this.height = height;
            maxVertex = width * height - 1;
            graph = new Graph(maxVertex + 1);
            for (int i = 0; i < width; i++) {
                for (int j = 0; j < height; j++) {
                    if (i < width - 1)
                        graph.addEdge(new Edge(
                                vertexOfCoordinate(i, j),
                                vertexOfCoordinate(i + 1, j),
                                0.0
                        ));
                    if (j < height - 1)
                        graph.addEdge(new Edge(
                                vertexOfCoordinate(i, j),
                                vertexOfCoordinate(i, j + 1),
                                0.0
                        ));
                }
            }
    
        }
    
    
        public boolean isHorizontal(Edge e) {
            return Math.abs(e.source - e.dest) == 1;
        }
    
        public boolean isVertical(Edge e) {
            return Math.abs(e.source - e.dest) == width;
        }
    
    
        private void drawLine(int h, BitSet right) {
            for (int i = 0; i < width - 1; i++) {
                System.out.print("o");
                if (right.get(vertexOfCoordinate(i, h))) System.out.print("--");
                else System.out.print("  ");
            }
            System.out.println("o");
        }
    
        private void drawInterline(int h, BitSet up) {
            for (int i = 0; i < width; i++) {
                if (up.get(vertexOfCoordinate(i, h))) System.out.print("|");
                else System.out.print(" ");
                if (i < width - 1) System.out.print("  ");
            }
            System.out.println();
        }
    
        public void drawSubgrid(Iterable<Edge> edges) {
            BitSet up = new BitSet(maxVertex);
            BitSet right = new BitSet(maxVertex);
            for (Edge e : edges) {
    //			System.out.println(e.fromVertex + " -- " + e.toVertex);
                if (isHorizontal(e))
                    right.set(Math.min(e.source, e.dest));
                if (isVertical(e))
                    up.set(Math.min(e.source, e.dest));
            }
    
            for (int j = 0; j < height; j++) {
                drawLine(j, right);
                if (j < height - 1) drawInterline(j, up);
            }
    
        }
    
    
    }