{"id":19259850,"url":"https://github.com/norlandz/trafficsystem","last_synced_at":"2026-05-06T10:39:25.187Z","repository":{"id":173722545,"uuid":"651193149","full_name":"Norlandz/TrafficSystem","owner":"Norlandz","description":"Specify a target location, the selected units in the map will move there by finding a path.","archived":false,"fork":false,"pushed_at":"2023-06-08T18:58:17.000Z","size":1499,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-07T20:44:45.113Z","etag":null,"topics":["java","javafx","path","pathfinding","spring","traffic"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Norlandz.png","metadata":{"files":{"readme":"docs/readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2023-06-08T17:53:23.000Z","updated_at":"2023-06-08T19:02:04.000Z","dependencies_parsed_at":null,"dependency_job_id":"e0152d94-f59c-4aab-8635-5d15b367efcc","html_url":"https://github.com/Norlandz/TrafficSystem","commit_stats":null,"previous_names":["norlandz/trafficsystem"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Norlandz/TrafficSystem","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Norlandz%2FTrafficSystem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Norlandz%2FTrafficSystem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Norlandz%2FTrafficSystem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Norlandz%2FTrafficSystem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Norlandz","download_url":"https://codeload.github.com/Norlandz/TrafficSystem/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Norlandz%2FTrafficSystem/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32689598,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T08:33:17.875Z","status":"ssl_error","status_checked_at":"2026-05-06T08:33:17.221Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["java","javafx","path","pathfinding","spring","traffic"],"created_at":"2024-11-09T19:18:05.311Z","updated_at":"2026-05-06T10:39:25.169Z","avatar_url":"https://github.com/Norlandz.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cul id=\"id_HihesPanel\"\u003e\n  \u003cli\u003e\n    \u003ch3\u003e Introduction \u003c/h3\u003e\n    \u003cul\u003e\n      \u003cli\u003eA 2D traffic map, \u0026amp; you can \u003cstrong\u003emove\u003c/strong\u003e an UnitObj in the Map from one Place to another (-- the Pathing Algorithm finds the way out). \u003c/li\u003e\n      \u003cli\u003e(Pretty much like how you control the units in an RTS game.)\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003e\n    \u003ch3\u003eOverview (graph)\u003c/h3\u003e\n    \u003cul\u003e\n      \u003cli\u003e\u003cimg src=\"images/TrafficSystem Demo.png\" height=\"300px\" alt=\"TrafficSystem Demo\"/\u003e \u003c/li\u003e\n      \u003cli\u003e\n        \nhttps://github.com/Norlandz/TrafficSystem/assets/43581880/f2dceb0d-9387-4e95-9e9d-ad724add798d\n        \n        \u003cvideo controls\u003e\n          \u003csource src=\"images/TrafficSystem 20230609_003641 demo01_CrossBlock_Complex.mp4\" type=\"video/mp4\"\u003e\n        \u003c/video\u003e\n      \u003c/li\u003e\n      \u003cli\u003e\n\nhttps://github.com/Norlandz/TrafficSystem/assets/43581880/76c2a20f-a47d-45bc-955e-cbbf0374e00c\n\n        \u003cvideo controls\u003e\n          \u003csource src=\"images/TrafficSystem 20230609_004856 demo02_AlignedCube_ComplexMoving_TrafficLight.mp4\" type=\"video/mp4\"\u003e\n        \u003c/video\u003e\n      \u003c/li\u003e\n      \u003cli\u003e(Github md video support is very limited \u0026 its breaking the html code -- a li is added below to fix that)\u003c/li\u003e\n  \u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003e\n    \u003ch3\u003e Prior Clarification \u003c/h3\u003e\n    \u003cul\u003e\n      \u003cli\u003eThis is only an \u003cspan class=\"tgn₰hl-ul-nt hlImpAtten meanCateMs hlLineMs hlUllMs wrapOmnt hlMs manGenBuiltin ntMs\" data-timestampnt=\"05200706_23188\"\u003e\u003cstrong\u003eExperimental\u003c/strong\u003e\u003c/span\u003e project\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n      \u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003e\n    \u003ch3\u003eHow To Use\u003c/h3\u003e\n    \u003cul\u003e\n      \u003cli\u003eLeft click to \u003cstrong\u003eselect\u003c/strong\u003e an UnitObj (for movable \u0026amp; selectable -- controllable ones)\u003c/li\u003e\n      \u003cli\u003eRight click to \u003cstrong\u003emove\u003c/strong\u003e the UnitObj to that location \u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003e\n    \u003ch3\u003e Functionalities \u0026amp; Hotkeys\u003c/h3\u003e\n    \u003cul\u003e\n      \u003cli\u003evv\n        \u003cul\u003e\n          \u003cli\u003e\n            \u003ctable\u003e\n              \u003ctbody\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"col\"\u003eFunctionality\u003c/th\u003e\n                  \u003cth scope=\"col\"\u003eHotkey\u003c/th\u003e\n                  \u003cth scope=\"col\"\u003eDescription\u003c/th\u003e\n                  \u003cth scope=\"col\"\u003eActivated When\u003c/th\u003e\n                  \u003cth scope=\"col\"\u003e*\u003c/th\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003eselect an UnitObj\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    (for controllable ones)\u003c/th\u003e\n                  \u003ctd\u003eLButton\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003emove an UnitObj \u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    to Target Location\u003c/th\u003e\n                  \u003ctd\u003eRButton\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003emove an UnitObj \u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    to Multi Scheduled Target Locations\u003c/th\u003e\n                  \u003ctd\u003e+RButton\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003epause Movement \u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    of Selected UnitObj\u003c/th\u003e\n                  \u003ctd\u003es\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003eresume Movement \u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    of Selected UnitObj\u003c/th\u003e\n                  \u003ctd\u003ee\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003ecancel Movement \u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    of Selected UnitObj\u003c/th\u003e\n                  \u003ctd\u003ec\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003eselect all  UnitObj\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    (for controllable ones)\u003c/th\u003e\n                  \u003ctd\u003e^a\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003eunselect all UnitObj\u003c/th\u003e\n                  \u003ctd\u003eMButton\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003eselect multiple UnitObj\u003c/th\u003e\n                  \u003ctd\u003e^LButton\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003eselect on the Main UnitObj\u003c/th\u003e\n                  \u003ctd\u003e!s\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003edrag an UnitObj\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    (for draggable ones)\u003c/th\u003e\n                  \u003ctd\u003e^!LButton \n                    (drag)\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003eclear Debug Shapes\u003c/th\u003e\n                  \u003ctd\u003e!a\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003e\u0026nbsp;\u003c/th\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                \u003c/tr\u003e\n              \u003c/tbody\u003e\n            \u003c/table\u003e\n          \u003c/li\u003e\n          \u003cli\u003e* annotate\n            \u003cul\u003e\n              \u003cli\u003eAhk Hotkey style Notation\n                \u003cul\u003e\n                  \u003cli\u003e^ = Ctrl\u003c/li\u003e\n                  \u003cli\u003e! = Alt\u003c/li\u003e\n                  \u003cli\u003e+ = Shift\u003c/li\u003e\n                  \u003cli\u003eLButton = Left Mouse Click \u003c/li\u003e\n                \u003c/ul\u003e\n              \u003c/li\u003e\n            \u003c/ul\u003e\n          \u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/li\u003e\n      \u003cli\u003evv\n        \u003cul\u003e\n          \u003cli\u003eYou can send a \u003ccode\u003e\u003cstrong\u003ePOST\u003c/strong\u003e\u003c/code\u003e\u003cstrong\u003e request\u003c/strong\u003e to the \u003ccode\u003eTrafficController\u003c/code\u003e Service in Port 18091, eg:\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003ehttp://localhost:18091/v0.2.1.0/user/createTrafficLight_demo_AlignedCube?sn_row_Target=2\u0026amp;sn_col_Target=1\u0026amp;timeLength_AllowMove=100\u0026amp;timeLength_StopMove=100\u0026amp;mode_VerticalOrHorizontal=false\u003c/code\u003e \u003c/li\u003e\n          \u003cli\u003e(This in turn sends (delegates) a request (internally) to the \u003ccode\u003eTrafficPathing\u003c/code\u003e)\u003c/li\u003e\n          \u003cli\u003e\u0026amp; \u003cb class=\"cp₰font-weight⡅700 wrapOmnt manGenBuiltin ntMs\" data-timestampnt=\"06090121_07888\"\u003ecreates a \u003ccode\u003eTrafficLight\u003c/code\u003e\u003c/b\u003e at the specified location (for the demo)\u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003e\n    \u003ch3\u003e Internal Design \u0026amp; Concept\u003c/h3\u003e\n    \u003cul\u003e\n      \u003cli\u003e\n        \u003ch3\u003e Main Java class \u003c/h3\u003e\n        \u003cul\u003e\n          \u003cli\u003e\u003ccode\u003ePathingUtil\u003c/code\u003e is the central of the \u003cstrong\u003ePathing\u003c/strong\u003e Algorithm\n            \u003cul\u003e\n              \u003cli\u003e\u003ccode\u003ecom.redfrog.traffic.pathing.PathingUtil.goTo_TargetLocation(UnitObj, double, double, double, GotoMode)\u003c/code\u003e\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                is the main Api to use for \u003cstrong\u003eMoving\u003c/strong\u003e a (controllable) UnitObj to a Target Location \u003c/li\u003e\n            \u003c/ul\u003e\n          \u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eTrafficItemControlService\u003c/code\u003e is the central for \u003cstrong\u003ecreating\u003c/strong\u003e the UnitObj (\u0026amp; the Map) (\u0026amp; Demo)\u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/li\u003e\n      \u003cli\u003e\n        \u003ch3\u003e Algorithms \u003c/h3\u003e\n        \u003cul\u003e\n          \u003cli\u003e\n            \u003ctable\u003e\n              \u003ctbody\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"col\"\u003ealgorithm (function name)\u003c/th\u003e\n                  \u003cth scope=\"col\"\u003esuccess rate\u003c/th\u003e\n                  \u003cth scope=\"col\"\u003etime complexity\u003c/th\u003e\n                  \u003cth scope=\"col\"\u003edescription\u003c/th\u003e\n                  \u003cth scope=\"col\"\u003elogic complexity\u003c/th\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003e(*some trivals)\u003c/th\u003e\n                  \u003ctd\u003e5% (low)\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    only works for simple shapes\u003c/td\u003e\n                  \u003ctd\u003e\u003ccode\u003eO(1)\u003c/code\u003e\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e1%\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003e\u003ccode\u003eget_Points_AtCloserDirection_ByAreaDet\u003c/code\u003e\u003c/th\u003e\n                  \u003ctd\u003e10%\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    only works for simple shapes\u003c/td\u003e\n                  \u003ctd\u003e\u003ccode\u003eO(1)\u003c/code\u003e\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e10%\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003e\u003ccode\u003erepath_by_WrapVertexSearchAlg\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                  _by_PermutationAndIntersection\u003c/code\u003e\u003c/th\u003e\n                  \u003ctd\u003e100%\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    works in all cases\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    always finds the  path (unless unreachable pratically)\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    always finds the shortest path\u003c/td\u003e\n                  \u003ctd\u003e\u003ccode\u003e~O(n!)\u003c/code\u003e\u003c/td\u003e\n                  \u003ctd\u003e\u003cul\u003e\n                      \u003cli\u003euses a \u003cstrong\u003ePermutation\u003c/strong\u003e to brute force all the possible paths\n                        \u003cul\u003e\n                          \u003cli\u003e(not just random brute force -- some level of logic is still required)\u003c/li\u003e\n                        \u003c/ul\u003e\n                      \u003c/li\u003e\n                      \u003cli\u003etakes very \u003cstrong\u003eLong\u003c/strong\u003e time to calculate -- when the shape is complex\n                        \u003cul\u003e\n                          \u003cli\u003e(optimization are added, made faster, but still not fast enough)\u003c/li\u003e\n                        \u003c/ul\u003e\n                      \u003c/li\u003e\n                    \u003c/ul\u003e\u003c/td\u003e\n                  \u003ctd\u003e45%\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003e\u003ccode\u003erepath_by_WrapVertexSearchAlg\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                  _by_DirectionalTangentLine_with_ShortestGotoPoint\u003c/code\u003e\u003c/th\u003e\n                  \u003ctd\u003e70%\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    works in many cases\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    sometimes fails to find a path (even such path exist pratically)\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    often not finding the shortest path\u003c/td\u003e\n                  \u003ctd\u003e\u003ccode\u003e~O(n)\u003c/code\u003e\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e50%\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003e\u003ccode\u003erepath_by_WrapVertexSearchAlg\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                  _by_DirectionalTangentLine_with_Permutation\u003c/code\u003e\u003c/th\u003e\n                  \u003ctd\u003e95%~100%\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    works in most/all cases\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    always finds the path (should)\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    may not find the shortest path\u003c/td\u003e\n                  \u003ctd\u003e\u003ccode\u003e~O(n)\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    ~O(n^2)\u003cbr class=\"stpMs manGenBuiltin ntMs\"/\u003e\n                    ~O(n!)\u003c/code\u003e\u003c/td\u003e\n                  \u003ctd\u003e\u003cul\u003e\n                      \u003cli\u003e(permutation is involved, a bit)\u003c/li\u003e\n                      \u003cli\u003e(lots other nested sub algorithms / mechanisms are added for optimization)\u003c/li\u003e\n                    \u003c/ul\u003e\u003c/td\u003e\n                  \u003ctd\u003e65%\u003c/td\u003e\n                \u003c/tr\u003e\n                \u003ctr\u003e\n                  \u003cth scope=\"row\"\u003e\u0026nbsp;\u003c/th\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                  \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n                \u003c/tr\u003e\n              \u003c/tbody\u003e\n            \u003c/table\u003e\n          \u003c/li\u003e\n          \u003cli\u003e* the rate / complexity values are just rough estimations, no real math / benchmark\u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003e\n    \u003ch3\u003e Technology Stack\u003c/h3\u003e\n    \u003cul\u003e\n      \u003cli\u003eJavaFx\u003c/li\u003e\n      \u003cli\u003eSpring\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003e\n    \u003ch3\u003e Design Difficulties \u0026amp; Problems facing \u003c/h3\u003e\n    \u003cul\u003e\n      \u003cli\u003eNumber \u003cstrong\u003ePrecision\u003c/strong\u003e\n        \u003cul\u003e\n          \u003cli\u003edouble precision problem is a messy problem\u003c/li\u003e\n          \u003cli\u003ein a Graphical app, precise Math calculations are required\n            \u003cul\u003e\n              \u003cli\u003eeg: for the logic of Pathing Algorithm\u003c/li\u003e\n              \u003cli\u003eeg: when you need to check for Collision\u003c/li\u003e\n              \u003cli\u003e(tbh, this can apply to any other situations too...)\u003c/li\u003e\n            \u003c/ul\u003e\n          \u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/li\u003e\n      \u003cli\u003eCollide \u0026amp; Stuck \u0026amp; Calc \u003cstrong\u003eHang\u003c/strong\u003e \u0026amp; Both Dynamic\n        \u003cul\u003e\n          \u003cli\u003ethis happened many times (likey a bug)\u003c/li\u003e\n          \u003cli\u003eI cannot tell where this is coming from:\n            \u003cul\u003e\n              \u003cli\u003e\u003cstrong\u003einf\u003c/strong\u003e loop/recursion; \u003c/li\u003e\n              \u003cli\u003esome random bug (due to collision / determination of sth); \u003c/li\u003e\n              \u003cli\u003eor there is no bug, but just the calculation is taking too long;\u003c/li\u003e\n            \u003c/ul\u003e\n          \u003c/li\u003e\n          \u003cli\u003ewhen there is only one UnitObj moving, the collision \u0026amp; pathing looks fine -- does not seem such bug\u003c/li\u003e\n          \u003cli\u003ewhen there are \u003cstrong\u003e2\u003c/strong\u003e UnitObj \u003cstrong\u003emoving\u003c/strong\u003e -- especially when one of the UnitObj is doing \u003cstrong\u003eunstoppable\u003c/strong\u003e moving, the \u003cstrong\u003ebug\u003c/strong\u003e appears way more often\n            \u003cul\u003e\n              \u003cli\u003e(-- if none are doing unstoppable moving -- seems fine)\u003c/li\u003e\n            \u003c/ul\u003e\n          \u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/li\u003e\n      \u003cli\u003eSpeed \u0026amp; Frame (\u0026amp; Incremental movements)\n        \u003cul\u003e\n          \u003cli\u003e\u003ccode\u003eAnimationTimer\u003c/code\u003e is executing base on \u003cstrong\u003eFrame\u003c/strong\u003e, not Time. \u003c/li\u003e\n          \u003cli\u003eThis makes the calculation of \u003cstrong\u003eSpeed\u003c/strong\u003e \u0026amp; detection of Collision harder.\u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003e\n    \u003ch3\u003eQ\u0026amp;A\u003c/h3\u003e\n    \u003cul\u003e\n      \u003cli\u003eWhere is the Comment \u0026amp; JavaDoc?\n        \u003cul\u003e\n          \u003cli\u003eThe comments I had in the Code are hideously long \u0026amp; unreadable. So they are all removed.\n            \u003cul\u003e\n              \u003cli\u003e(Hopefully this doesnt break the code, it shouldnt but might remove some actual code accidentally during the process.)\u003c/li\u003e\n            \u003c/ul\u003e\n          \u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n  \u003cli\u003e \u003c/li\u003e\n\u003c/ul\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnorlandz%2Ftrafficsystem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnorlandz%2Ftrafficsystem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnorlandz%2Ftrafficsystem/lists"}