Att göra en tusenfoting fossil. (6 / 7 steg)
Steg 6: Bygga upp skelettet.
Skelettet är baserad på den mediala axeln. Jag använde en befintlig Voronoi diagram kalkylator. Ursprungligen skriven av Steven Fortune på Bell Labs och översatt till Python av Bill Simons. Voronoi diagrammet är en bas för att skapa den mediala axeln strukturen.
Python-fil (triangulate.py) ingår och hänvisning till skaparna är på topp op skriptet. Det kan användas till NodeBox efter att lägga till en funktion som kommer att kallas för av en nod. Den mediala axeln är baserad på Voronoi diagrammet av en uppsättning på poäng i den meningen att alla punkter inom formen (som diagrammet har beräknats) hålls. Alla de utanför formen är inte.
Jag lade till ett exempel på en grön lönnlöv som visar olika resultat för Voronoi och mediala Axis bygger på en form (original).
Dess en god praxis att i förväg tänka de argument som kan skicka till en "utomstående" funktion. I detta fall kan jag skicka formen (den kompletta tusenfoting) och en förteckning över de från formen (från en resample nod Forsgren).
Nedan är jag skrev till ring för i NodeBox-funktion. Denna funktion är den sista i skriptet triangulate.py.
def medianAxis(shape,points): psub = [Point(p1.x,p1.y),Point(p2.x,p2.y)] returnera alla
från nodebox.graphics importera punkt
SL = SiteList(points)
c = Context()
voronoi(SL, c)
alla =]
för l, v1, v2 i c.edges:
om v1 == -1 eller v2 == -1: fortsätta
x1, y1 = c.vertices[v1]
x2, y2 = c.vertices[v2]
P1 = Point(x1,y1)
P2 = Point(x2,y2)
om inte shape.contains(x1,y1): fortsätta
om inte shape.contains(x2,y2): fortsätta
för jag, punkt i enumerate(psub):
all.append(Point)
Vad som kommer ut är en lista punkter som kan kopplas som par (1 -2, 3 -4, 5-6,...) Så långt för den kodande delen.
Med hjälp av funktionen i NodeBox.
Nu när jag har en funktion att ringa för, kan det genomföras i NodeBox. Först måste vi importera filen python i programmet.
* Gå till Arkiv >> kod bibliotek. Det kommer att öppna ett nytt litet fönster med i övre höger hörn ett "+" tecken.
* Tryck på "+" och välj Python Python / stängning alternativet. Bläddra till triangulate.py.
* Om du kan se en hänvisning till den kan du stänga fönstret.
Python-fil importeras nu och funktionerna i det kan kallas för från en nod.
Funktioner och NB3, hur fungerar det.
Varje nod efterlyser en funktion, kan du veta vilken genom att välja en nod och gå sedan till fliken metadata på toppen av fönstret port/parametrar. Det kommer att öppna ett nytt fönster med specifikationer för noden och dess hamnar. Om du går till hänvisar 'Inställningar' hittar du vad fungera den till. När det gäller en rektangel kommer det att säga: corevector/rekt, vilket innebär att det kommer att anropa funktionen rect i filen corevector. Jag kommer att behöva kalla triangulera/medianAxis för att anropa funktionen medianAxis i triangulate.py.
Jag behöver en nod där jag kan skicka en form och en lista med punkter att och som returnerar en lista (av poäng igen). Vi kan använda noden centroiden till att börja med eftersom det importerar en form och beräknar centroiden punkten. Vi är redan halvvägs där...
* Skapa en centroiden nod och döpte om det Median-axeln.
* Markera noden och gå till fliken Metadata.
* Gå till noden >> Inställningar. Ange "triangulera/medianAxis" i alternativet "Funktion".
* Ändra "Utdataintervall" från värde till listan genom att använda menyn i samma fönster.
* Du kan också ändra bilden av noden. Dess ikonen för nod i nätverket.
Vi behöver fortfarande en ny port. Noden för tillfället bara kan ta emot en form.
* I fönstret Metadata: Klicka på "+" knappen i nedre vänstra hörnet.
* Ange ett portnamn: kalla det "punkter".
* Välj "pekar" menyn och tryck på "OK".
Vi är fortfarande i fönstret Metadata. Du bör kunna se poäng porten förutom formen hamnen.
* Välja den på vänster sida av skärmen. (det visar mörka)
* Ändra "Allt" på höger sida från värde till listan.
* Tryck på OK.
Med den nya noden.
Noden mediala axeln behöver två ingångar som beskrivs ovan. Vi har redan formen (en i align1), vi ska packa en förteckning över de från den.
* Skapa en resample nod. Anslut align1 till formen. Inställd 'av längd' metod och längd till 20,0.
* Skapa en punkt nod. Ansluta resample2 till den. Här är listan med punkter.
Nu gör vi anslutningarna till noden mediala axel.
* Anslut align1 till formen.
* Anslut resample2 till poäng.
* Återge noden mediala axel.
Vad som kommer ut är en lista med punkter som kan kopplas som par. Tanken är att vi kommer att räkna antalet poäng att veta hur många par kan göras. Parar sig ansluts till var över en liten delnätverk.
* Skapa en greve nod. * Välj slice1 och connect1 och skapa ett undernätverk för det.
* Skapa en rad nod. Skicka den tidigare räkning nod till slutet och anger steg 2.
* Skapa en slice nod. Anslut mediala axel till listan och Anslut range7 till Startindex.
* Skapa en Anslut nod. Anslut slice1 till poäng. Göra det.
* Kalla den "Mediala axel kant".
* Göra det.
En skärmdump av nätverket är överst i det här steget.