Rumah  >  Artikel  >  Java  >  Visualisasi Graf

Visualisasi Graf

PHPz
PHPzasal
2024-08-10 07:09:38254semak imbas

Untuk memaparkan graf secara visual, setiap bucu mesti diberikan lokasi. Bahagian sebelumnya memperkenalkan cara memodelkan graf menggunakan antara muka Graf, kelas Graf Abstrak dan kelas Graf Tanpa Warat. Bahagian ini membincangkan cara memaparkan graf secara grafik. Untuk memaparkan graf, anda perlu tahu di mana setiap bucu dipaparkan dan nama setiap bucu. Untuk memastikan graf boleh dipaparkan, kami mentakrifkan antara muka bernama Displayable yang mempunyai kaedah untuk mendapatkan x- dan y-koordinat serta nama mereka, dan buat kejadian bucu Boleh Dipaparkan, dalam kod di bawah.

Graph Visualization

Graf dengan bucu Boleh Dipaparkan kini boleh dipaparkan pada anak tetingkap bernama GraphView, seperti yang ditunjukkan dalam kod di bawah.

Graph Visualization

Untuk memaparkan graf pada anak tetingkap, cuma buat contoh GraphView dengan menghantar graf sebagai hujah dalam pembina (baris 9). Kelas untuk bucu graf mesti melaksanakan antara muka Boleh Dipaparkan untuk memaparkan bucu (baris 13–22). Untuk setiap indeks bucu i, menggunakan graph.getNeighbors(i) mengembalikan senarai bersebelahannya (baris 26). Daripada senarai ini, anda boleh menemui semua bucu yang bersebelahan dengan i dan lukis garisan untuk menyambung i dengan bucu bersebelahan (garisan 27–34).

Graph Visualization

Kod di bawah memberikan contoh memaparkan graf dalam Rajah di atas, seperti ditunjukkan dalam Rajah di bawah.

Graph Visualization

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class DisplayUSMap extends Application {
    @Override // Override the start method in the Application class
    public void start(Stage primaryStage) {
        City[] vertices = {new City("Seattle", 75, 50),
                new City("San Francisco", 50, 210),
                new City("Los Angeles", 75, 275), new City("Denver", 275, 175),
                new City("Kansas City", 400, 245),
                new City("Chicago", 450, 100), new City("Boston", 700, 80),
                new City("New York", 675, 120), new City("Atlanta", 575, 295),
                new City("Miami", 600, 400), new City("Dallas", 408, 325),
                new City("Houston", 450, 360)};

        // Edge array for graph
        int[][] edges = {
                {0, 1}, {0, 3}, {0, 5}, {1, 0}, {1, 2}, {1, 3},
                {2, 1}, {2, 3}, {2, 4}, {2, 10},
                {3, 0}, {3, 1}, {3, 2}, {3, 4}, {3, 5},
                {4, 2}, {4, 3}, {4, 5}, {4, 7}, {4, 8}, {4, 10},
                {5, 0}, {5, 3}, {5, 4}, {5, 6}, {5, 7},
                {6, 5}, {6, 7}, {7, 4}, {7, 5}, {7, 6}, {7, 8},
                {8, 4}, {8, 7}, {8, 9}, {8, 10}, {8, 11},
                {9, 8}, {9, 11}, {10, 2}, {10, 4}, {10, 8}, {10, 11},
                {11, 8}, {11, 9}, {11, 10}
        };

        Graph<City> graph = new UnweightedGraph<>(vertices, edges);

        // Create a scene and place it in the stage
        Scene scene = new Scene(new GraphView(graph), 750, 450);
        primaryStage.setTitle("DisplayUSMap"); // Set the stage title
        primaryStage.setScene(scene); // Place the scene in the stage
        primaryStage.show(); // Display the stage
    }

    public static void main(String[] args) {
        Application.launch(args);
    }

    static class City implements Displayable {
        private int x, y;
        private String name;

        City(String name, int x, int y) {
            this.name = name;
            this.x = x;
            this.y = y;
        }

        @Override
        public int getX() {
            return x;
        }

        @Override
        public int getY() {
            return y;
        }

        @Override
        public String getName() {
            return name;
        }
    }
}

Kelas Bandar ditakrifkan untuk memodelkan bucu dengan koordinat dan nama mereka (baris 39–63). Atur cara mencipta graf dengan bucu jenis City (baris 30). Memandangkan City melaksanakan Displayable, objek GraphView yang dicipta untuk graf memaparkan graf dalam anak tetingkap (baris 33).

Atas ialah kandungan terperinci Visualisasi Graf. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Pemodelan GrafArtikel seterusnya:Pemodelan Graf