{"id":23031019,"url":"https://github.com/timerke/search_for_square","last_synced_at":"2025-04-02T21:23:47.293Z","repository":{"id":194094774,"uuid":"690081998","full_name":"timerke/search_for_square","owner":"timerke","description":"Script to calculate the location of a square using the least squares method","archived":false,"fork":false,"pushed_at":"2023-09-12T07:21:02.000Z","size":182,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-08T11:43:05.692Z","etag":null,"topics":["least-sqaure-method","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","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/timerke.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":"2023-09-11T13:50:59.000Z","updated_at":"2023-09-15T09:48:34.000Z","dependencies_parsed_at":"2025-02-08T11:42:55.356Z","dependency_job_id":"5e9a2457-03eb-4334-9060-26bb6bac970b","html_url":"https://github.com/timerke/search_for_square","commit_stats":null,"previous_names":["timerke/search_for_square"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timerke%2Fsearch_for_square","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timerke%2Fsearch_for_square/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timerke%2Fsearch_for_square/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timerke%2Fsearch_for_square/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/timerke","download_url":"https://codeload.github.com/timerke/search_for_square/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246894011,"owners_count":20851046,"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":["least-sqaure-method","python3"],"created_at":"2024-12-15T15:32:36.152Z","updated_at":"2025-04-02T21:23:47.249Z","avatar_url":"https://github.com/timerke.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# search_for_square\nСкрипт для вычисления расположения квадрата методом наименьших квадратов.\n\n## Описание задачи\n\nИмеется квадрат, известна длина **L** его стороны. На плоскости квадрат расположен не точно вдоль осей **X** и **Y**.\n\n![](./media/1.png)\n\nИзвестно примерное положение центра квадрата. Из данного центра можно провести **N** лучей и найти примерные точки пересечения этих лучей со сторонами квадрата.\n\n![](./media/2.png)\n\nЗадача состоит в вычислении оптимального положения квадрата заданной длины, если известно примерное расположение точек на сторонах квадрата.\n\n## Описание решения\n\nЧерез стороны квадрата проходят прямые линии. Уравнение прямой имеет вид:\n\n```\na * x + b * y + c = 0\n```\n\nУ квадрата четыре стороны, потому есть 12 неизвестных коэффициентов:\n\n- **a_1**, **b_1**, **c_1**;\n- **a_2**, **b_2**, **c_2**;\n- **a_3**, **b_3**, **c_3**;\n- **a_4**, **b_4**, **c_4**.\n\nПротивоположные стороны квадрата параллельные. Пусть параллельными будут стороны 1 и 3, 2 и 4. Тогда:\n\n```\na_1 = a_3, b_1 = b_3\na_2 = a_4, b_2 = b_4\n```\n\nСмежные стороны квадрата перпендикулярные. Потому:\n\n```\na_1 * a_2 + b_1 * b_2 = 0 -\u003e\nb_2 = -a_1 * a_2 / b_1\n```\n\nРасстояние между параллельными прямыми вычисляется по формуле:\n\n```\nL = |c_3 - c_1| / sqrt(a_1**2 + b_1**2) -\u003e\nc_3 = c_1 + L * sqrt(a_1**2 + b_1**2)\n```\n\nАналогично:\n\n```\nc_4 = c_2 + L * sqrt(a_2**2 + b_2**2)\n```\n\nВ итоге неизвестными остаются коэффициенты: **a_1**, **b_1**, **c_1**, **a_2**, **c_2**.\n\nСумма расстояний любой точки внутри квадрата до всех сторон квадрата равна **2L**. Пусть задан какой-то квадрат с помощью набора коэффициентов **a_1**, **b_1**, **c_1**, **a_2**, **c_2**. Вычислим сумму расстояний от точки **i** до всех сторон данного квадрата и обозначим ее как **S_i**. Для нахождения оптимального квадрата нужно минимизировать величину **|S_i - 2L|**.\n\nПример работы нахождения оптимального квадрата по примерному расположению точек на его сторонах показан ниже.\n\n![](./media/3.png)\n\n## Запуск скрипта\n\n1. Установите необходимые зависимости:\n\n   ```bash\n   python -m pip install --upgrade pip\n   python -m pip install -r requirements.txt\n   ```\n\n2. Запустите скрипт:\n\n   ```bash\n   python square.py\n   ```\n\n   \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimerke%2Fsearch_for_square","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimerke%2Fsearch_for_square","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimerke%2Fsearch_for_square/lists"}