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

Finden Sie eine optimale Polygon, dass die zufällige komplexe Themen umschließt - konvexe Hülle

Einführung

Diesen Sommer bin ich auf einer Technologie-Abteilung in Västerås tätig. Ich habe in der gleichen Firma und etwa zur gleichen Büro für drei gerade Sommer gearbeitet. Die Arbeit ist sehr technisch, Spaß und Herausforderung. Im Gegensatz zu vielen anderen Sommer-Job in einem Büro, fand ich, wo ich die Verantwortung und lernen Sie mit gemeinsamen Aufgaben zu arbeiten. Insbesondere arbeite ich mit, Werkzeuge zu entwickeln, um die Berechnung der Arbeit, die meist Matlab, GUI-Programmierung und Java vereinfachen. Das neue Objekt-orientierte Stil des MatLab macht den Code sehr viel klarer als vor ein paar Jahren.

Das Problem

Neulich stand ich vor einer kleinen Herausforderung. Vereinfachte konzentrierte sie sich auf der Suche nach einem Polygon, das eine Reihe von komplexen Punkte, die in der Ebene verstreut sind umschließt. Anfangs wusste ich nicht finden, die Funktion, dass dies in MatLab, das war natürlich komisch. Ich beschloss daher, einen benutzerdefinierten Algorithmus zu finden. In diesem Beitrag werde ich beschreiben, meinen Algorithmus.

Konvext hölje

Abbildung 1. Beispiele von konvexen Fall.

Meine Alogritm

Ich beschreibe mein Algorithmus Abbildung 2. 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 angeordnet werden, können Sie die Reihenfolge und der Abstand von der Mitte, um das Problem zu lösen. Es dauert mindestens O (n log (n)), um eine lineare sortiert. Mein Algorithmus arbeitet in der unsortierten Liste und wird wohl noch mehr Zeit, ich habe keine Beweise abgeleitet.

Die Idee ist, zumindest mit meinem Punkt in der x-Richtung zu beginnen und dann den Punkt finden, an dem der k-Wert wird das Maximum. dh, zu berechnen:

max (K_i) = (Y_MIN - y_i) / (x_min - x_i) für i = [all issues] Dies gibt Ihnen die Stelle p_2..

Alle Punkte mit kleineren y-Wert als X_min ausgeschlossen werden kann. Alle Punkte mit kleineren x-Wert als p_2 könnte auch zur weiteren Lektüre ausgeschlossen werden.

K_2 gefunden, dann mit der Suche nach dem Punkt, dass minimiert:

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

Auf die gleiche Weise gefunden k_a in der Regel durch:

min (k_a-1 - (y_a-1 - y_i) / (x_a-1 - x_i)) für i = [alle nicht ausgeschlossenen Artikel]

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

Algoritm för konvext hölje

Abbildung 2. Algorithmus für die konvexe Fall.

Performance

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

Code

Der Code ist nicht öffentlich.

Matlab Solution - konvexe Hülle

Mein Algorithmus macht das Gleiche wie Matlab-Funktion convhull . Konvexen Hülle ist somit das englische Wort für ein geschlossenes Polygon oder einen konvexen Körper. Eine andere gute Quelle ist http://en.wikipedia.org/wiki/Convex_hull_algorithms erklärt, dass das theoretische Minimum Zeit zu einer konvexen Schale zu finden von der Ordnung O (n log (n)) ist.

Juli
14
2009
2

Matlab Image Resizer

Ich habe ein kleines Programm, matlab geschrieben, schrumpfende Bilder. Das ist, weil ich nicht feststellen, dass diese Funktion in jeder einfache Art und Weise irgendwo. Es sollte eine ganze Menge von Bildern in Sydney / Australien Austausch im Laufe des Jahres müssen hochgeladen werden. Wir haben Einschränkungen auf unseren Zugang, wo wir so leben, können Sie keine Bilder von 5 Mb jeder. Nachdem ich mit dem Programm in ein Format fertig war, jetzt sah ich, dass es glatt geht, viele Bilder auf einmal bearbeiten mit einem Office-Programm. Jedenfalls funktioniert das Programm gut.

Zweck

Das Programm zielte darauf ab, einfach zu reduzieren alle Bilder in einem Ordner.

Warum?

Da es schwierig ist zu bearbeiten und zu schrumpfen jedes Bild einzeln, wenn viele Bilder fixiert werden müssen.

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.


Herunterladen 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 zu gemeinsamen Berechnungen für bestimmte Arten von Einrichtungen zu tun. In diesem Programm habe ich eine Menge von grafischen Komponenten uipanel, uitree und uicontrol verwendet.

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:

>> Guide

In dem Befehl Fenster und es öffnet sich ein Fenster, in dem es möglich ist, platziert und konfiguriert die Komponenten einer Figur. Dies hat Vorteile der einfachen schnellen Anwendungen. Doch das große Problem, wenn Sie wollen, legale Software zu schreiben. Das ist, weil es schwierig ist, den Überblick über Ihre grafische Objekte zu halten. Sie sind in der exportierten Figur mit Suffix Abb. enthalten.

Legen Sie Ihre Komponenten selbst

Ich habe mein Programm ohne die Anleitung 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 bullig-Codes für Spiele wie Poker und andere Anwendungen, bei denen gibt es eine Vielfalt von Aktivitäten. Wie auch immer, zurück Schreiben von Programmen ohne den Führer. Dies wird durch die Angabe hantag um das Fenster zu gestalten geschaffen werden und die Position des Fensters erfolgen. Natürlich sind auch andere Parameter wie Farbe oder Rückruf konfiguriert, wie in der Anleitung. Ich habe meine Programme wie Matlab Objekte geschrieben und verwendet die Strategie, Komponenten des Konstruktors durch den Aufruf eines Outsourcing-Betrieb auszulagern, vorläufig benannt init gui. Ich spare mein Objekt intern in der Klasse in einer Struktur, die Halt der Griff alle Komponenten hat. Diese Struktur leitet mich, wenn ich lag der Komponenten.

  classdef aClassName <HandleEasy
    Eigenschaften
       handleToGui;
    Ende
    Methoden
       Funktion obj = aClassName (varargin)
          ...
          obj.initGui ();
          ...
       Ende
       ...
       Funktion fig = initGUI (Obj)
          Obj.handleToGui.fig = figure (...);
          Obj.handleToGui.otherComponentName = ...
          ...
       Ende
    Ende
 end% classdef 

Matlab-Funktion guihandles

Matlab hat eine Funktion namens guihandles. Es ist sehr bequem in vielerlei Hinsicht, und ich werde erklären, warum. Der Grund dafür ist, dass Sie sich keine Gedanken über das Hinzufügen Ihrer Komponenten direkt in eine Struktur, wenn man sie aus, weil guihandles (parenteral), gibt eine Struktur von Griffen für alle Kinder (Kinder), die in der Abbildung sind Sorgen. Durch den Aufruf dieser können Sie initiieren handleToGui nach all den Komponenten ausgelegt. Dies wird dann eine Struktur mit Feld ames angesichts der Tag-Namen (Tag) Komponenten gegeben worden.

Probleme mit der Matlab-Funktion guihandles

Allerdings besteht die Gefahr, mit diesem, dass ich denke, Matlab nicht gedacht haben. Alternativ ist es so, dass ich und andere haben die alle verwendet werden zu leichtfertig. Die Tatsache ist, dass die gui Griffe Griff bieten für alle Widgets in der Abbildung. Wenn Sie verschiedene Klassen für die verschiedenen Teile der Anwendung, wie z. B. einer separaten Klasse, die eine bestimmte Art von plottyta Griffen in einem Teil des Programms und eine weitere Klasse, die eine ähnliche Aufgabe hat in einem anderen Ort, den sie sich gegenseitig vernichten kann, wenn beide verwenden guihandles. Guihandles in Teilkomponenten ermöglicht die Griffe, um die Hauptfigur (einschließlich anderer Subkomponenten, die in ihm sind). Wenn die anderen Teilkomponenten der gleichen Tag-Namen einer Komponente haben, werden sie verwirrt, wenn die Komponente aufruft, was es glaubt, ist seine Komponente sein.

Verwenden Sie nicht die Matlab-Funktion guihandles

Object-Oriented Programming mir ist eine Programmiersprache Methode zum Erstellen von guter Struktur. Dies, indem jedes Objekt (Klasse) ihre Jobs intern und nur durch spezielle Schnittstellen mit der Umwelt kommunizieren. Globale Variablen guihandles gibt, ist sehr gefährlich. Das Konzept der Welt sucht in anderen Worten, für eine geringe Kopplung, hohe Kohäsion und klar definierte Module.

Geschrieben von: David Gustafsson, in: Programmieren | Tags: , , ,
Juni
24
2009
3

Formatieren Google AdSense

Ich habe Google-Anzeigen hinzugefügt, um techonomics.se für das Unternehmen Gewinn zu machen. Aber es hat zu keinem Ergebnis geführt, aber wir werden sehen.
Die Frage ist, wie Sie eine Anzeige in den ersten drei Beiträge auf Ihrem Blog zu managen? Tatsache ist, dass Sie als AdSense-Nutzern kann nur drei Anzeigen pro HTML-Seite. Haben Sie mehrere Artikel auf der Titelseite Ihres Blogs haben, kann es Zeit, um Anzeigen auf die drei höchsten angezeigt werden.
Die Lösung ist auf die index.php (oder ähnlich), wo deine Beiträge aufgelistet bearbeiten. Erstellen Sie einen Zähler, $counter = 1; am Anfang der Datei in einem tag:. Dann stellen Sie Ihre Anzeige in der while-Schleife fügt den Inhalt der Akten und Listen $counter = $counter +1 ; . Machen Sie einen Test, um $counter <= 3 beim Verfassen eines Beitrags annonsscriptet.

Hier ist, was der Code im Detail aussieht:

  <? Php
 get_header ();
 $ Counter = 1;
 ?> 
  ... 
  ? <Php if (have_posts ()): while (have_posts ()): the_post ();?> 
  ... 
  <div class=""storycontent"">
 <? Php
 if ($ counter <= 3) {
 echo ("
 <Ihr AdSense annons>
 ');
 }
 $ Counter = 1 + $ counter; 
  ?> 
  ... 

Natürlich getan Formatierungen wie mit CSS, um eine gute Platzierung der Anzeige beheben. Erstellen Sie dann ein div mit einer Klasse-Anzeige, die das richtige Format hat, und legen Sie diese um die Anzeige.
Etwas anderes, was gut ist ist es, jeden Beitrag eine Anzeige. In meinem Thema heißt einen einzigen Beitrag single.php. Hier finden Sie keine Sorgen über etwaige Zähler, ist es genug, um eine Anzeige zu setzen!

Juni
19
2009
2

Matlab-Programmierung

Ich habe mit einem Matlab-Programm während meines Sommer-Job gearbeitet. Die Stärke von Matlab ist, dass es eine sehr einfache Sprache, die eine höhere 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 Berechnungen, Simulationen und so weiter. Ein Nachteil, aufgrund der hohen Ebene der Abstraktion, ist jedoch, dass es ziemlich langsam geht. Sie müssen sorgfältig, wann Sie codieren zu denken.

Matlab gebaut ab Version 2008a von java. Es ist möglich, die meisten Funktionen in Java von Matlab-Funktion (es gibt auch andere Funktionen in der gleichen Gattung) ausgeführt wird:

  javaMethodEDT ('Klasse oder ein Objekt der Klasse', 'methodName', ..., Params) 

Von Matlab Version 2008 können Sie auch Klassen und Objekte, die eine Vereinfachung und schafft sehr Struktur. Die Syntax ist ziemlich weit von Java und vieles ist aus dem vorherigen Matlab-Versionen, die auf den ersten 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 durch die GUI in Form von z. B. Bäume und Kontrollen gehen. Diese werden von Matlab-Funktionen uicontrol und uitree, die eine Überarbeitung des Java-Komponenten, JTree und JButton, JTextField, etc. behandelt werden. In diesem Zusammenhang nehme ich das Outsourcing von Komponenten, die manuell und mit Matlab eingebaute Software Guide getan werden kann.
  • Ich werde von Matlab get-und set-Methoden geben, die ist ein wenig kompliziert, aber sehr gut bei der Arbeit mit Objekten.
  • Ich durch Matlab-Funktionen gehen auf Gegenstände zu lagern und zu erklären, warum es für klüger, die Daten in Form von Datenstrukturen zu speichern ist.
  • Schließlich habe ich auch die Absicht, sogenannte Callbacks und Funktion ode45, die nützlich bei der Lösung von Differentialgleichungen ist zu erhöhen. Ode45 kann unter anderem verwendet, um dynamische Systeme verschiedener Art zu simulieren. Ein Beispiel dafür ist das Netz bei unterschiedlichen Bedingungen.

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

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