2012-04-24 5 views
7

Я создаю веб-сервис, который нацелен на имитировать Как работают электронные схемы. project еще не находится на этапе альфа.Электронный алгоритм соединения компонентов схемы диаграммы

Я застрял с важной важной вехой проекта: когда вы пытаетесь подключить штырь одного компонента к другому штырьку - необходимо построить линию подключения.

Прежде всего, соединительная линия была просто прямой, без каких-либо изменений.

enter image description here

Затем он стал каким-то образом согнутый линию с возможностью добавлять, перемещать и удалять точки, которые определяются как согнутая линия.

enter image description here

А теперь (соединительная линия) создаются с помощью A * алгоритма.

enter image description here

Реализация не хорошо еще, поэтому редактирование A * -порождённых линию связи не является хорошей идеей, потому что она не много.

Идея алгоритма создания соединительной линии только следующим образом:

  1. определяет начала и конца точки

  2. найти путь между началом и концом, который не перекрывает ограничительную рамку существующего компонента

  3. создать набор базовых точек - список координат, полученных от шага # 2 + старт в кучного + конце в хвосте

  4. создать набор линий, которые образуют подключение:

    for (var i = 1; i < points.length; i++) { 
        var p0 = points[i - 1], p1 = points[i], 
         line = MooChip.paper.path(Raphael.format('M%1,%2L%3,%4', p0.x, p0.y, p1.x, p1.y)); 
    } 
    

проблема заключается в том, что соединительные линии могли перекрываться, в то время как они должны пересекать только ... Ну, на самом деле т вот еще одна проблема: я даже не мог себе представить, как можно было бы реализовать линии связи соединения, как здесь, в нижнем левом углу изображения:

enter image description here

Вопрос заключается в том:, как я должен построить путь соединения (сделать его в основном близким к хорошо продуманной электрической схеме, скажем) и как я могу реализовать схематические соединения?

ответ

1

Во-первых, на данный момент я не могу дать целые решения, но, возможно, это поможет:

  • Регулярно проверяйте graphflow проекта, его Javascript вид холста строит график и выравнивает его на основе соединений, как я вижу. Это именно то, что необходимо для цепей (fe GND-знак будет вершиной с одним соединением, поэтому будет нарисован в граничной области схемы)
  • этот подход должен каким-то образом изменить, помещая его в сетку и делая все соединения ортогональными
  • о «пути подключения» это еще один элемент и должен быть выровнен как другие. Это похоже на транзистор, но слишком маленький, чтобы видеть все три разъема.