Swedish flagChinese (Simplified) flagEnglish flagGerman flagFrench flagSpanish flagHindi flag
Juli
27
2010
2

Finden Sie eine optimale Polygon, das die zufällige komplexe Punkte umschließt - Konvexe Hülle

Einführung

Diesen Sommer bin ich auf einer Technologie Abschnitt in Västerås tätig. Ich habe bei der gleichen Firma und ungefähr zur gleichen Büro für drei gerade Sommern arbeitete. Die Arbeit ist sehr technisch, Spaß und Herausforderung. Im Gegensatz zu vielen anderen Sommer-Job in einem Büro, habe ich eine gefunden, wo ich Verantwortung und lernen Sie mit gemeinsamen Aufgaben zu arbeiten. Genauer gesagt, arbeite ich an der Entwicklung von Instrumenten, um die Berechnungen, die meist MatLab, GUI-Programmierung und Java zu vereinfachen. Das neue Objekt-orientierten Stil von MatLab macht den Code sehr viel klarer als vor ein paar Jahren.

Das Problem

Neulich habe ich stand vor einer kleinen Herausforderung. Vereinfachte es auf der Suche nach einem Polygon, das einen Satz von komplexen Punkte, die in der Ebene verstreut sind umschließt konzentriert. Anfangs wusste ich nicht finden, die Funktion, das dies tut in Matlab, was natürlich sehr seltsam. Ich beschloss daher, einen benutzerdefinierten Algorithmus zu finden. In diesem Beitrag beschreibe ich meinen Algorithmus.

Konvext hölje

Abbildung 1. Beispiele von konvexen Hülle.

Meine Alogritm

Ich werde mein Algorithmus mit Hilfe von Abbildung 2 zu beschreiben. Zunächst werde ich die Schwierigkeiten bei der Wohnungssuche. Die Sache ist die, dass alle Punkte in einer Struktur sind unsortiert. Wenn die Punkte um einen Mittelpunkt herum geordnet sind, kann man ihre Ordnung und den Abstand von der Mitte verwenden, um das Problem zu lösen. Allerdings dauert es mindestens O (n log (n)), um eine lineare Sortierung zu machen. Mein Algorithmus arbeitet in der unsortierten Liste und wird wohl noch mehr Zeit, denn ich habe keine Beweise abgeleitet.

Die Idee ist sicherlich mit meinem Punkt in x-Richtung zu starten und dann den Punkt finden, an dem der K-Wert wird das Maximum. dh herauszufinden:

max (k_i) = (Y_MIN - y_i) / (x_min - x_i) für i = [alle Artikel] Dies gibt Ihnen die Stelle P_2..

Alle Punkte mit weniger y-Wert als X_min ausgeschlossen werden kann. Alle Punkte mit kleineren x-Wert als P_2 kann auch zur weiteren Lektüre ausgeschlossen werden.

k_2 wird dann durch den Punkt zu finden, die minimiert gefunden:

K_1 - (y_1 - y_i) / (x_1 - x_i) für i = [alle nicht ausgeschlossenen Punkte]

In die gleiche Weise gefunden k_a im Allgemeinen durch verarbeitet:

meine (k_a-1 - (Y_A-1 - y_i) / (X_A-1 - x_i)) für i = [alle nicht ausgeschlossen Punkte]

Die Berechnung ist für die obere Hälfte des Polygons getan, bis Sie auf den Punkt, die maximal ist in x-Richtung erhalten. Danach machte gleichen Algorithmus für die untere Hälfte der Polygon.

Algoritm för konvext hölje

Abbildung 2. Algorithmus für die konvexe Fall.

Leistung

Die Leistung des Algorithmus hängt davon ab, wie viele Punkte, die am Ende in der Polygon. Ich mache so viele linjärsök die Liste, dass es Punkte im Polygon. Dies bedeutet, dass die Komplexität O (N * Anzahl der Suche) ist. Die Anzahl der Punkte in der optimalen Polygon ist zwischen 10 und 25 je nach Ihrer Chance Punkte. Der Algorithmus ist also relativ schnell.

Code

Der Code ist nicht öffentlich.

Matlab-Lösung - die konvexe Hülle

Mein Algorithmus macht das Gleiche wie eine Matlab-Funktion convhull . Konvexe Hülle ist also das englische Wort für ein geschlossenes Polygon oder einer konvexen Körper. Eine andere gute Quelle ist http://en.wikipedia.org/wiki/Convex_hull_algorithms erklären, dass die theoretische minimale Zeit, um eine konvexe Hülle zu finden in der Größenordnung O (n log (n)) ist.

Juli
14
2009
2

Matlab Image Resizer

Ich habe ein kleines Programm in MATLAB geschrieben, schrumpfende Bilder. Das ist, weil ich nicht feststellen, dass diese Funktion in jeder einfache Art und Weise irgendwo. Es sollte eine ganze Reihe von Bildern sein, in Sydney / Australien während des Austauschs Jahr, das aufgeladen werden muss. Wir haben auf unseren Einschränkungen Zugang, wo wir so leben, können Sie nicht über Bilder von 5 MB. Nach beendete ich mein Programm in einem Format, das sah jetzt hat mir, dass es einfach ist, viele Bilder auf einmal bearbeiten mit einem Office-Programm. Jedenfalls funktioniert das Programm gut.

Zweck

Das Programm zielte darauf ab, einfach reduzieren Sie die Größe aller Bilder in einem Ordner.

Warum?

Da es mühsam zu bearbeiten und zu schrumpfen jedes Bild einzeln, wenn viele Bilder zu fixieren sind.

Was ist erforderlich, um das Programm auszuführen?

Es ist erforderlich, dass Sie eine Lizenz für MATLAB Laufzeit haben. Sind Sie ein Student, dass ich keine Probleme geben, sonst ist es leider wohl nicht frei.

Verwendung

WYSIWYG.

Verantwortung

Ich übernehme keine Verantwortung für alles, was funktioniert.


Download ImageResizer

Juni
28
2009
2

Matlab Gui mit guihandles

Ich habe mit einem Computerprogramm in Matlab gearbeitet. Die Idee dahinter ist, dass es sein muss benutzerfreundlich und effizient auf gemeinsame Berechnungen für einige Arten von Einrichtungen zu tun. In diesem Programm habe ich eine Menge von Widgets, die verwendet uipanel, uitree und uicontrol.

Viele Autoren von Tutorials für Matlab GUI empfehlen die Verwendung von Matlab eingebauten Funktion (oder vielleicht sollte ich nenne es eine Toolbox (?)) Called Guide. Typ:

Leitfaden >>

Im Befehlsfenster, und es öffnet sich ein Fenster, wo Sie zu finden und konfigurieren können die Komponenten einer Figur. Dies hat Vorteile für Single-Speed-Anwendungen. Doch das große Problem, wenn Sie wollen, legale Software zu schreiben. Das ist, weil es schwierig, den Überblick über Ihre grafische Objekte zu halten ist. Sie sind in der exportierten Figur endet in Zahlen nicht enthalten

Platzieren Sie Ihre Komponenten selbst

Ich habe mein Programm ohne den Führer geschrieben. Es ist leicht zu erstellen und bereitstellen Komponenten. Wie Sie unten sehen können, erfordert ein wenig Befehl eine Menge Codierung. Stellen Sie sich vor, wie bullige Codes für Spiele wie Poker und andere Anwendungen, wo es eine Vielfalt von Aktivitäten. Aber zurück zum Schreiben von Programmen ohne den Führer. Dies wird durch die Angabe Handle für das Fenster in die Figur gut Position im Fenster erzeugt werden soll getan. Natürlich konfiguriert andere Parameter wie Farbe oder Rückruf, genau wie in der Führung. Ich habe meine Programme wie Matlab Objekte geschrieben und verwendet die Strategie, Komponenten der Konstruktor durch Aufruf einer Funktion auslagern Lieferung, vorläufig namens init-GUI. Ich spare mein Objekt intern in der Klasse in einer Struktur, die halten etwaiger Hebel an den Komponenten hat. Diese Struktur I zu initiieren, wenn ich aus legen die Komponenten.

  classdef aClassName <handleEvent
    Eigenschaften
       handleToGui;
    Ende
    Methoden
       functionName obj = aClassName (varargin)
          ...
          obj.initGui ();
          ...
       Ende
       ...
       functionName Abb. = initGUI (Obj)
          Obj.handleToGui.fig = Zahl (...);
          Obj.handleToGui.otherComponentName = ...
          ...
       Ende
    Ende
 end% classdef 

Matlab functionName guihandles

Matlab hat eine Funktion namens guihandles. Es ist ziemlich einfach in vielerlei Hinsicht, und ich werde erklären, warum. Der Grund ist, dass Sie sich keine Gedanken über das Hinzufügen Ihrer Komponenten direkt in eine Struktur, wenn Sie sie aus, weil guihandles (Elternteil), stellt eine Struktur von Griffen für alle Kinder (Kinder), die in der Abbildung sind Sorgen. Mit der Forderung nach diesem können Sie initiieren handleToGui nachdem alle Komponenten angelegt. Dies wird dann zu einer Struktur mit Feld ames angesichts der Tag-Namen (Tag) Komponenten gegeben worden.

Probleme mit den Matlab-Funktion guihandles

Allerdings besteht die Gefahr, dass mit diesem Ich denke Matlab hat nicht gedacht. Alternativ ist es so, dass ich und andere haben das alles zu leichtfertig verwendet. Tatsache ist, dass die GUI-Griffe Griffe für alle Widgets in der Abbildung geben. Wenn Sie verschiedene Klassen für die verschiedenen Teile der Anwendung, wie z. B. eine separate Klasse, die eine bestimmte Art von plottyta Griffe in einem Teil des Programms und eine andere Klasse, die einen ähnlichen Vorgang in einem anderen Ort, den sie sich gegenseitig vernichten kann, wenn beide verwenden guihandles tut. Guihandles in Unterkomponente ermöglicht die Griffe an der Hauptfigur (einschließlich anderer Sub-Komponenten, die in ihm sind). Wenn die zweite Teilkomponente hat den gleichen Tag-Namen einer beliebigen Komponente, werden sie verwirrt, wenn die Komponente aufruft, was es zu sein glaubt, das Bauteil ist.

Verwenden Sie nicht die Matlab-Funktion guihandles

Objektorientierte Programmierung mit mir ist eine Programmiersprache Methode zum Erstellen von guter Struktur. Dies ist, indem jedes Objekt (Klasse), um seine Aufgaben zu erfüllen und intern nur über spezielle Schnittstellen mit der Umwelt kommunizieren. Globale Variablen guihandles stellt eine potentiell tödliche Gefahr. Das Konzept der Welt sucht in anderen Worten, für eine geringe Kopplung, hohe Kohäsion und gut definierten Module.

Verfasst von David Gustafsson, in: Programmierung | Tags: , , ,
Juni
19
2009
2

Matlab-Programmierung

Ich habe mit einem Matlab-Programm während meiner Sommer-Job gearbeitet. Die Macht der Matlab ist, dass es eine sehr einfache Sprache, die einer höheren Abstraktionsebene als, sagen wir, Java ist. Denn es muss hinzugefügt werden, dass die Sprache sehr einfach ist, wenn es um Berechnungen geht, Lösung von Differentialgleichungen, numerische zählt, Simulationen und so weiter werden. Ein Nachteil, die sich aus der hohen Ebene der Abstraktion, ist jedoch, dass es eher langsam ist. Sie müssen große Sorgfalt bei der Codierung von zu nehmen.

Matlab mit der Version 2008a auf Java. Sie können die meisten Funktionen in Java durch Matlab-Funktion (es gibt auch andere Funktionen in der gleichen Gattung) treiben:

  javaMethodEDT ('Klasse oder Objekt der Klasse', 'methodName', ..., params) 

Von Matlab Version 2008 können Sie auch Klassen und Objekte, die eine Vereinfachung und schafft Struktur sehr. Die Syntax ist recht weit von Java und vieles wird von den vorherigen Versionen Matlab, die zunächst macht es ein wenig umständlich geerbt. Ich werde in einer Reihe von Artikeln präsentiert einige Tipps und Tricks für Matlab-Programmierung.

  • Ich werde über die GUI in Form von einem anderen Baum, und Kontrollen gehen. Diese Funktionen werden von Matlab uicontrol und uitree, die ein Rewrite der Java-Komponenten, JTree und JButton, JTextField usw. ist abgewickelt. In diesem Zusammenhang nehme ich bis Outsourcing von Komponenten, die manuell und mit Matlab den integrierten Software-Anleitung durchgeführt werden kann.
  • Ich werde von Matlab get-und set-Methoden geben, das ist ein bisschen kompliziert, aber sehr gut bei der Arbeit mit Objekten.
  • Ich gehe durch Matlab-Funktionen, um Objekte zu speichern und erklärt, warum es klüger ist, die Daten in Form von Datenstrukturen zu speichern.
  • Schließlich halte ich auch die sogenannten Rückrufen und Funktion ode45, was hilfreich bei der Lösung von Differentialgleichungen ist. Ode45 kann unter anderem verwendet, um dynamische Systeme verschiedener Art zu simulieren. Ein Beispiel ist die Kraft des Netzwerks das Verhalten unter verschiedenen Bedingungen.

Ich sehe mich jetzt als eine gute Matlab-Programmierer mit Erfahrung in beiden Projekten. Für weitere Informationen über mich und meine Mission, kontaktieren Sie bitte den david@techonomics.se . Ich habe F-Steuer und die Rechnung pro Auftrag oder berechnen pro Stunde.

Das Thema ist aus modifizierten Aeros 2,0 - Blogglista.se - Übersetzung erfolgt durch N2H