2012-04-24 8 views
7

Ich erstelle einen Web-Service, der auf simuliert wird wie funktionieren elektronische Schaltungen. Die project ist noch nicht einmal in der Alpha-Phase.Electronic cIcuit Diagramm Komponente Verbindung Algorithmus

Ich stecke mit einem wichtigen Meilenstein des Projekts fest: Wenn man versucht, den Pin einer Komponente mit einem anderen Pin zu verbinden - sollte die Verbindungslinie gebaut werden.

Zunächst war die Verbindungslinie nur eine gerade Linie, ohne fast jede Möglichkeit, es zu ändern.

enter image description here

Dann wurde es irgendwie gebogene Linie mit der Möglichkeit, hinzufügen, verschieben und löschen Punkte, das bestimmt, wie die Linie gebogen wird.

enter image description here

Und jetzt ist es (Verbindungsleitung) erstellt mit dem A * Algorithmus.

enter image description here

Die Umsetzung noch nicht gut ist, so A * -Generated Verbindungsleitung Bearbeitung ist keine gute Idee, weil es eine Menge ausfällt.

Die Idee für die Schaffung Algorithmus Verbindungsleitung ist wie folgt:

  1. Start und Ende Punkte

  2. einen Weg zwischen Start und Ende finden bestimmen, die sich nicht mit der Begrenzungsbox einer vorhandenen Komponente überschneidet

  3. einen Satz von Fußpunkte erstellen - eine Liste von Koordinaten, erhielt aus dem Schritt # 2 + Start am Heap + Ende am Heck

  4. einen Satz von Linien erzeugen, die einen bilden Anschlussleitung:

    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)); 
    } 
    

Das Problem ist, dass Anschlussleitungen könnten überlappen, während sie nur schneiden müssen ... Nun, eigentlich t hier ist ein weiteres Problem: Ich konnte nicht einmal vorstellen, wie eine Anschlussleitung Verbindung implementieren könnte, wie hier, die unten links Bild:

enter image description here

Die Frage ist: wie soll ich den Verbindungsweg bauen (um es zum größten Teil dem gut entworfenen Schaltplan zu nähern, sagen wir) und wie kann ich schematische Übergänge implementieren?

Antwort

1

Zum einen in diesem Moment kann ich nicht geben ganze Lösungen, aber vielleicht wird es helfen:

  • Check graphflow Projekt, seine Javascript Leinwand Ansicht baut die Grafik und richtet es auf Basis von Verbindungen, wie ich sehe. Das ist genau das, was für Schaltungen benötigt wird (z. B. wird das GND-Zeichen ein Eckpunkt mit nur einer Verbindung sein, also wird im Grenzbereich des Schemas gezeichnet)
  • dieser Ansatz sollte irgendwie modifiziert werden, indem man ihn ins Gitter setzt und alle Verbindungen orthogonal macht
  • über "Verbindungspfad" ist es nur ein weiteres Element und sollte wie andere ausgerichtet werden. Es ist wie Transistor, aber zu klein, um alle drei Anschlüsse zu sehen
Verwandte Themen