{"id":25948764,"url":"https://github.com/omarsalemdmet/multidimensional_visualization_in_opengl","last_synced_at":"2026-05-07T23:03:07.745Z","repository":{"id":279548166,"uuid":"939174538","full_name":"OmarSalemDMET/Multidimensional_Visualization_in_OpenGL","owner":"OmarSalemDMET","description":"This project demonstrates two distinct techniques for visualizing multidimensional data using C++ and OpenGL","archived":false,"fork":false,"pushed_at":"2025-02-26T05:43:15.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-26T06:27:23.974Z","etag":null,"topics":["cpp","data-visualization","opengl","visualization"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OmarSalemDMET.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-26T05:39:34.000Z","updated_at":"2025-02-26T05:43:18.000Z","dependencies_parsed_at":"2025-02-26T06:37:28.485Z","dependency_job_id":null,"html_url":"https://github.com/OmarSalemDMET/Multidimensional_Visualization_in_OpenGL","commit_stats":null,"previous_names":["omarsalemdmet/multidimensional_visualization_in_opengl"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OmarSalemDMET%2FMultidimensional_Visualization_in_OpenGL","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OmarSalemDMET%2FMultidimensional_Visualization_in_OpenGL/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OmarSalemDMET%2FMultidimensional_Visualization_in_OpenGL/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OmarSalemDMET%2FMultidimensional_Visualization_in_OpenGL/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OmarSalemDMET","download_url":"https://codeload.github.com/OmarSalemDMET/Multidimensional_Visualization_in_OpenGL/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241836965,"owners_count":20028282,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","data-visualization","opengl","visualization"],"created_at":"2025-03-04T11:22:16.244Z","updated_at":"2026-05-07T23:03:02.695Z","avatar_url":"https://github.com/OmarSalemDMET.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Multidimensional Data Visualization\n\nThis project demonstrates two distinct techniques for visualizing multidimensional data using C++ and OpenGL. It includes implementations for a **Spiral Technique** (for 5-dimensional data) and **Shape Coding Technique** (for 6-dimensional data). The project reads input from text files, processes the data, and displays visual representations using OpenGL.\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Features](#features)\n- [Technologies Used](#technologies-used)\n- [Build Instructions](#build-instructions)\n- [Usage](#usage)\n- [File Structure](#file-structure)\n- [Code Report](#code-report)\n- [License](#license)\n- [Acknowledgements](#acknowledgements)\n\n## Overview\n\nThe project is divided into two visualization techniques:\n\n1. **Spiral Technique:**  \n   - Visualizes 5-dimensional data by computing a \"relevance\" score based on a user-provided query vector.\n   - Maps data points onto a rectangular spiral across several sub-windows of an OpenGL display.\n   - Uses a logarithmic transformation of the Euclidean distance to compute relevance.\n\n2. **Shape Coding Technique:**  \n   - Visualizes 6-dimensional data by mapping each data point to a grayscale image.\n   - Each data point is scaled, normalized, and assigned to a specific pixel block in a generated image.\n   - The resulting image is saved in PPM format and displayed using OpenGL.\n\n## Features\n\n- **Data Loading:**  \n  Reads multidimensional data from input files (`Points5D.txt` for the spiral technique and `points6D.txt` for shape coding).\n\n- **Data Processing:**  \n  - **Spiral Technique:**  \n    - Prompts for a 5-dimensional query vector.\n    - Computes relevance via logarithmic scaling of squared differences.\n    - Sorts and displays processed data.\n  - **Shape Coding Technique:**  \n    - Loads 6-dimensional data and calculates per-dimension minimum and maximum values.\n    - Normalizes data and maps attributes to pixels for image creation.\n\n- **Visualization:**  \n  - Uses OpenGL and GLUT for rendering visualizations and handling window events.\n  - Supports dynamic window resizing and multiple viewports (for the spiral technique).\n\n## Technologies Used\n\n- **Programming Language:** C++\n- **Graphics:** OpenGL, GLUT\n- **Libraries:**  \n  - C++ Standard Library (for I/O, algorithms, etc.)\n  - Math Libraries (cmath for mathematical functions)\n- **Compiler:** Any C++11 compliant compiler\n\n## Build Instructions\n\n1. **Ensure OpenGL and GLUT are installed on your system.**  \n   - Linux: `sudo apt-get install freeglut3-dev`\n   - Windows/macOS: Use your preferred development environment setup for OpenGL.\n\n2. **Compile the Spiral Technique Program:**  \n   Assuming the source file is `spiral_technique.cpp`:\n   ```\n   g++ spiral_technique.cpp -o spiral_technique -lGL -lGLU -lglut\n   ```\n\n3. **Compile the Shape Coding Program:**  \n   Assuming the source file is `shape_coding.cpp`:\n   ```\n   g++ shape_coding.cpp -o shape_coding -lGL -lGLU -lglut\n   ```\n\n## Usage\n\n- **Spiral Technique:**  \n  1. Ensure `Points5D.txt` is in the same directory as the executable.\n  2. Run the program:\n     ```\n     ./spiral_technique\n     ```\n  3. Enter a 5-dimensional query vector when prompted.\n  4. The program displays sorted data in the console and opens an OpenGL window showing a spiral visualization of the data.\n\n- **Shape Coding Technique:**  \n  1. Ensure `points6D.txt` is available in the working directory.\n  2. Run the program:\n     ```\n     ./shape_coding\n     ```\n  3. The program loads the data, maps it to a grayscale image, writes the image to `output.ppm`, and displays it using OpenGL.\n\n## File Structure\n\n```\nMultidimensional_Visualization/\n├── spiral_technique.cpp      # Source code for spiral technique visualization (5D data)\n├── shape_coding.cpp          # Source code for shape coding visualization (6D data)\n├── Points5D.txt              # Data file for the spiral technique (5D data)\n├── points6D.txt              # Data file for shape coding (6D data)\n├── output.ppm                # Generated image file from shape coding\n├── README.md                 # This file\n└── [Additional Files]        # Any required libraries or assets\n```\n\n## Code Report\n\n### Spiral Technique (spiral_technique.cpp)\n- **Data Loading \u0026 Processing:**\n  - `load_data()`: Reads integers from `Points5D.txt` in groups of five and stores them as data points.\n  - `prompt_query()`: Prompts the user to enter a 5-dimensional query vector.\n  - `calculate_distances()`: Computes the squared Euclidean distance between each data point and the query vector, applies logarithmic scaling, and tracks the minimum and maximum relevance.\n  - `sort_data()`: Sorts data points by their computed relevance.\n  - `display_data()`: Outputs the sorted data to the console.\n\n- **Visualization:**\n  - `run_visualization()`: Initializes OpenGL, sets up the display environment, and enters the GLUT main loop.\n  - `display()`: Divides the window into six sub-windows and calls `draw_sub_window()` for each.\n  - `draw_sub_window()`: Maps data points onto a rectangular spiral. The intensity of each point is determined by its relevance or corresponding attribute value.\n  - `reshape()`: Handles window resizing, ensuring the display is updated accordingly.\n\n### Shape Coding Technique (shape_coding.cpp)\n- **Data Management:**\n  - `dat_mgr` class:  \n    - Loads 6-dimensional data from a file.\n    - Computes minimum and maximum values for each attribute.\n    - Provides a normalization function (`norm_val()`) to map data values to a grayscale range.\n  \n- **Image Creation:**\n  - `img_writer` class:  \n    - Manages an RGB image buffer.\n    - `set_pixel()`: Sets individual pixel values.\n    - `map_data_to_image()`: Maps each data point to a fixed-size cell in the image, with each attribute corresponding to a pixel in a 3x2 block.\n    - `write_ppm()`: Writes the image data to a PPM file (`output.ppm`).\n\n- **Application Structure:**\n  - `app` class:  \n    - Encapsulates the data management and image creation process.\n    - Initializes OpenGL-related global variables.\n    - Provides functions to run the OpenGL display and write the image file.\n  - **OpenGL Functions:**\n    - `display()`: Renders the generated image.\n    - `reshape()`: Adjusts the viewport and projection for window resizing.\n\n## License\n\nThis project is licensed under the MIT License.\n\n## Acknowledgements\n\n- **OpenGL \u0026 GLUT:** For the rendering framework.\n- **C++ Standard Library:** For data processing and I/O operations.\n- Thanks to all contributors and open-source projects that made this visualization project possible.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomarsalemdmet%2Fmultidimensional_visualization_in_opengl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fomarsalemdmet%2Fmultidimensional_visualization_in_opengl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomarsalemdmet%2Fmultidimensional_visualization_in_opengl/lists"}