{"id":21633706,"url":"https://github.com/vittoriopiotti/primary-flight-display","last_synced_at":"2025-04-09T11:11:53.860Z","repository":{"id":241961807,"uuid":"808319789","full_name":"vittorioPiotti/Primary-Flight-Display","owner":"vittorioPiotti","description":"Soluzione software Primary Flight Display","archived":false,"fork":false,"pushed_at":"2024-12-30T12:38:22.000Z","size":6947,"stargazers_count":90,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-02T09:08:16.440Z","etag":null,"topics":["client","horizon","mirino","pfd","pitch","pitch-ladder","primary-flight-display","python","roll","server","tkinter"],"latest_commit_sha":null,"homepage":"https://drive.google.com/file/d/1O2NUyQX6dreFDlOx4WhHrVpao1NMTTvo/view","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vittorioPiotti.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-Tkinter","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-30T20:27:56.000Z","updated_at":"2025-04-02T07:51:18.000Z","dependencies_parsed_at":"2024-06-17T21:48:00.932Z","dependency_job_id":"e9e9d2cc-f561-482a-a2b2-b506fbe3e43a","html_url":"https://github.com/vittorioPiotti/Primary-Flight-Display","commit_stats":null,"previous_names":["vittoriopiotti/primary-flight-display"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vittorioPiotti%2FPrimary-Flight-Display","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vittorioPiotti%2FPrimary-Flight-Display/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vittorioPiotti%2FPrimary-Flight-Display/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vittorioPiotti%2FPrimary-Flight-Display/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vittorioPiotti","download_url":"https://codeload.github.com/vittorioPiotti/Primary-Flight-Display/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248027411,"owners_count":21035594,"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":["client","horizon","mirino","pfd","pitch","pitch-ladder","primary-flight-display","python","roll","server","tkinter"],"created_at":"2024-11-25T03:13:32.246Z","updated_at":"2025-04-09T11:11:53.844Z","avatar_url":"https://github.com/vittorioPiotti.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Primary-Flight-Display\n\nSoluzione software Primary Flight Display\n\n\n\u003e [!NOTE]\n\u003e Progetto scolastico 🎓 · Ⅴ\n\n\n\n\n---\n\n_La schermata è stata acquisita dal progetto realizzato._\n\n\u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/Display.png\" alt=\"Icona\" width=\"200\"/\u003e\n\n\n\n## Indice\n\n1. [Prodotto](#prodotto)\n2. [Riepilogo Tecnico](#riepilogo-tecnico)\n3. [Crediti](#crediti)\n4. [Sviluppi Futuri](#sviluppi-futuri)\n5. [Licenze](#licenze)\n\n---\n\n\n\n\n## Prodotto\n\n### Funzionalità\n\n_Le schermata sono state acquisite dal progetto realizzato._\n\n\n\n| \u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/Viewfinder.png\" alt=\"Icona\" width=\"200\"/\u003e | \u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/Horizon.png\" alt=\"Icona\" width=\"200\"/\u003e | \u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/PitchLadder.png\" alt=\"Icona\" width=\"200\"/\u003e| \u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/Display.png\" alt=\"Icona\" width=\"200\"/\u003e| \n| ------------ | ------------ | ------------ | ------------ | \n|1| 2 | 3 |  4 |\n\n1. Mirino `Viewfinder.py` ([link](https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/source/src/Viewfinder.py))\n2. Orizzonte `Horizon.py`([link](https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/source/src/Horizon.py))\n3. Scala del Pitch `PitchLadder.py` ([link](https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/source/src/PitchLadder.py))\n4. PFD Display Aereo `display.py` ([link](https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/source/display.py))\n\n### Copyright\n\n\u003e [!TIP]\n\u003e Il software è open-source\n\n## Riepilogo Tecnico \n\n\n### Obbiettivo\n\nRicezione con una frequenza di 100 ms i dati in formato json dal server python.\n\nElaborazione dei dati di pitch e roll per la visualizzazione dei componenti grafici.\n\n\n## Indice\n\n1. [Soluzione](#soluzione)\n2. [Tecnologie](#tecnologie)\n3. [Note sul Codice](#note-sul-codice)\n4. [Riferimenti Matematici](#riferimenti-matematici)\n5. [Testing](#testing)\n6. [Distribuzione Locale](#distribuzione-locale)\n7. [Albero di Path](#albero-di-path)\n---\n\n\n\n### Soluzione \n\n#### Orizzonte\n\n\n\n| \u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/schermo.png\" alt=\"Icona\" width=\"200\"/\u003e | \u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/orizzonte.png\" alt=\"Icona\" width=\"200\"/\u003e | \u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/terra.png\" alt=\"Icona\" width=\"200\"/\u003e| \u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/Horizon.png\" alt=\"Icona\" width=\"200\"/\u003e|\n| ------------ | ------------ | ------------ | ------------ | \n|1| 2 | 3 | 4 |\n\nDati due punti qualsiasi agli estremi della larghezza del display crea l'orizzonte come:\n  1. Display quadrilatero di dimensione variabile\n  2. Orizzonte come segmento tra i punti degli estremi del display\n  3. Terra come quadrilatero compreso tra la base e l'orizzonte del display\n  4. Componente Realizzato\n\n\n#### Scala del Pitch\n\n\n| \u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/perpendicolare.png\" alt=\"Icona\" width=\"200\"/\u003e | \u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/parallele.png\" alt=\"Icona\" width=\"200\"/\u003e | \u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/retta.png\" alt=\"Icona\" width=\"200\"/\u003e| \u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/PitchLadder.png\" alt=\"Icona\" width=\"200\"/\u003e| \n| ------------ | ------------ | ------------ | ------------ | \n|1| 2 | 3 |  4 |\n\n\n1. Data la retta dell'orizzonte ed il centro del display si calcola la retta passante per il centro e perpendicolare all'orizzonte\n2. Data la retta dell'orizzonte e la retta ad esso perpendicolare si determina il punto di intersezione tra le parallele dell'orizzonte e la perpendicolare all'orizzonte\n3. Date le rette parallele ed i punti di intersezione con la perpendicolare si calcolano per ciascuno 2 punti equidistanti dal punto di intersezione\n4. Componente Realizzato\n\n### Tecnologie\n\nLibrerie, linguaggi e codice\n  - Python v.3.12 ([link](https://www.python.org/doc/versions/))\n  - TKinter v.8.6 ([link](https://www.tcl.tk/software/tcltk/8.6.html))\n  - **Separazione dei compiti** per i componenti grafici in **classi autonome** garendo **la scalabilità e la facile manutenzione del codice.**\n    \nComunicazione con server Python:\n  -  Connessione alla porta dell'ip del server\n  -  Comunicazione tramite socket\n  -  Architettura Client-Server\n\n### Note sul Codice\n\n  1. Il codice è stato sviluppato in modo **compartimentato e modulare**.\n  2. È stata garantita una corretta **separazione dei compiti**\n  3. Sono stati sviluppati i **componenti grafici in classi autonome**\n  4. Il codice ha quindi la qualità di essere **scalabile e facile da mantenere**\n\n\n\n### Riferimenti Matematici\n\n\n\n| Formula | Nome | Descrizione | \n| ------------ | ------------ | ------------ |\n| $\\frac{y - y_1}{y_2 - y_1} = \\frac{x - x_1}{x_2 - x_1}$ | Equazione parametrica della retta |Calcola l’equazione delle rette dei segmenti | \n| $\\sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}$ | Distanza euclidea tra due punti in un piano cartesiano |Calcola la lunghezza del segmento che collega due punti | \n| $y = y_0 + m(x - x_0)$ | Equazione del fascio di rette passante per un punto |Calcola l’equazione della retta dell’orizzonte | \n\n\n\n\n\n\n\n\n### Testing\n\n\n\n\n\u003e [!NOTE]\n\u003e Sono stati effettuati **Test Unitari** e **Test di Itergrazione** che hanno dato **esito positivo**\n\u003e | \u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/Viewfinder.png\" alt=\"Icona\" width=\"200\"/\u003e | \u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/Horizon.png\" alt=\"Icona\" width=\"200\"/\u003e | \u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/PitchLadder.png\" alt=\"Icona\" width=\"200\"/\u003e| \u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/calcoli.png\" alt=\"Icona\" width=\"200\"/\u003e|\n\u003e | ------------ | ------------ | ------------ | ------------ | \n\u003e |1| 2 | 3 | 4 |\n\u003e \n\u003e 1. Mirino `Test_Viewfinder.py` ([link](https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/source/test/Test_Viewfinder.py))\n\u003e 2. Orizzonte `Test_Horizon.py` ([link](https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/source/test/Test_Horizon.py))\n\u003e 3. Scala del Pitch `Test_PitchLadder.py`  ([link](https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/source/test/Test_PitchLadder.py))\n\u003e 4. Calcoli `Test_Calc.py` ([link](https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/source/test/Test_Calc.py))\n\n\n\n\u003e [!WARNING]\n\u003e MacOS ([video](https://drive.google.com/file/d/1O2NUyQX6dreFDlOx4WhHrVpao1NMTTvo/view))\n\u003e Tutti i test hanno dato **esito positivo** garantendo la **stabiità del software** solo se il **coefficiente è angolare valido**\n\n\u003e [!WARNING]\n\u003e Rivedere ed ottimizzare la logica dei componenti grafici per visualizzare il `PitchLadder.py`\n\n\n\u003e [!CAUTION]\n\u003e `Fatal Error` se il valore del **coefficiente angolare non valido** in quanto non è stato implementato **nessun controllo per gestire questo caso**\n\n\n\n\n### Distribuzione Locale\n\n1. Configura `Python v.3.12` ([link](https://www.python.org/doc/versions/))\n2. Configura ambiente virtuale:\n   \n    2.1. Crea ambiente virtuale\n\n          -m venv myenv\n\n    2.2. attiva ambiente virtuale Mac:\n\n          source myenv/bin/activate\n   \n    2.3. attiva ambiente virtuale Windows:\n    \n          .\\myenv\\Scripts\\Activate\n\n3. scarica `tkinter v.8.6` ([link](https://www.tcl.tk/software/tcltk/8.6.html))  in ambiente virtuale:\n\n          pip install tk\n\n3. Caricare i file sorgenti eventualmente sostituendo quelli già presenti\n\n\n### Albero di Path\n\n```bash\n$ tree\n.\n├── src\n│   ├── Calc.py\n│   ├── Horizon.py\n│   ├── PitchLadder.py\n│   └── Viewfinder.py\n├── test\n│   ├── Test_Calc.py\n│   ├── Test_Horizon.py\n│   ├── Test_PitchLadder.py\n│   └── Test_Viewfinder.py\n├── client.py\n├── server.py\n└── display.py\n\n```\n\n\n\n\n\n\n## Crediti\n\n- [Diego Ciucaloni](https://github.com/Diego-ciuck)\n- [Luca Niccià](https://github.com/lucaniccia)\n- [Matteo Fabbioni](https://github.com/MatteoFabbioni)\n- [Vittorio Piotti](https://github.com/vittorioPiotti)\n\n## Sviluppi Futuri\n\n\n### Scala dello Yaw\n\n\u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/yaw.png\" alt=\"Icona\" width=\"200\"/\u003e\n\n### Scala del Roll\n\n\u003cimg src=\"https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/project/screenshots/roll.png\" alt=\"Icona\" width=\"200\"/\u003e\n\n\n## Licenze\n\n\n### Primary Flight Display\n\n**Copyright** 2024 Vittorio Piotti, Diego Ciucaloni, Matteo Fabbioni, Luca Niccià\n\n**Version** [v1.0.0](https://github.com/vittorioPiotti/Primary-Flight-Display/releases/tag/1.0.0)\n\n**License** [GPL-3.0](https://github.com/vittorioPiotti/Primary-Flight-Display/blob/main/LICENSE.md)\n\n---\n\n### TKinter\n\n**Copyright** Python Software Foundation\n\n**Version** [v.8.6](https://www.tcl.tk/software/tcltk/8.6.html)\n\n**License** [PSF v2](https://docs.python.org/3/license.html)\n\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvittoriopiotti%2Fprimary-flight-display","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvittoriopiotti%2Fprimary-flight-display","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvittoriopiotti%2Fprimary-flight-display/lists"}