Моего ответа предполагает, что вы пытаетесь вычислить самый простой путь для кого-то, чтобы путешествовать из черного круга к красному кругу. Не обращайте внимания на этот ответ, если вы ищете помощь только с реальной живописью линий. Я также предполагаю, что вы можете заранее определить все точки пересечения. Если вам нужно программно вывести их из рисунка, вы, вероятно, должны начать с нового вопроса.
Я бы начал с пунктов (x, y), которые вы предлагаете, но оставьте значение тега. Затем я бы добавил соединения между этими точками как связанный объект, который добавляет больше деталей, чем значение вашего тега. Каждая точка будет иметь набор подключений к другим соседним точкам. В каждом соединении я бы добавил кучу атрибутов для использования в ваших вычислениях, таких как расстояние, препятствия и любые другие улучшения, такие как привилегии. Расстояние было бы легким (намек: используйте теорему Пифагора). Препятствия могут включать двери, ступени, лифты и т. Д. Привилегии могут включать зоны с ограниченным доступом (что диагональный коридор рядом с верхней частью диаграммы выглядит ограниченным).
Похоже, что на черной отправной точке вы можете отправиться на восток или на запад. Это было бы два разных пути. Первый пункт на востоке предложил бы четыре варианта: пройти через дверь на север, дверь на юг, продолжить на восток или вернуться на запад. Опция «Запад» вернется к исходной точке, в которой путь можно игнорировать как цикл. Опция на юге вернется только к этой точке, где ее можно игнорировать как петлю. Вариант на север интересен тем, что он должен продолжаться по диагональному коридору и в конечном итоге предлагать путь к месту назначения, хотя, очевидно, не лучший путь. Опция на восток продолжит работу и, в конце концов, вернет несколько вариантов. Когда путь достигает места назначения, он отмечает положительный отклик и трудность в том, чтобы попасть туда на основе пройденных соединений (расстояние, препятствия и привилегии).
Реализация этого будет включать введение Пути, который включает в себя список пройденных точек, а также накопленную трудность каждого соединения по этим точкам. Начиная с начала, я попытался бы написать что-то, что отделяет один шаг во всех направлениях, а не пытается полностью пройти весь путь. Добавьте к накопленной сложности с каждым шагом. Если точка является местом назначения, то у вас есть успешный путь (хотя это может быть не самый эффективный путь). Если точка уже находится в пути, то это цикл, поэтому прекратите прохождение этого пути. Если накопленная трудность пути больше, чем другая, которая уже найдена, прекратите пересечение этого пути.
Что произойдет, если пользователь начнет увеличивать/уменьшать изображение? и может у меня дать образец кода, если он есть, потому что доза не работает со мной :( – Omarj