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

Trouver un polygone optimale qui renferme les points aléatoires complexes - enveloppe convexe

Introduction

Cet été, je travaille sur une section de technologie à Västerås. J'ai travaillé dans la même entreprise et à peu près le même bureau pendant trois étés consécutifs. Le travail est très technique, amusant et stimulant. Contrairement à beaucoup d'autres emplois d'été dans un bureau, j'ai trouvé un où j'ai la responsabilité et d'apprendre à travailler avec les tâches courantes. Plus précisément, je travaille sur le développement d'outils pour simplifier les calculs en utilisant la plupart du temps MatLab, programmation de GUI et Java. Le nouveau orientée objet style de MatLab rend le code beaucoup plus clair que il ya quelques années.

Le problème

L'autre jour, j'ai fait face à un défi de taille. Simplifié elle s'est concentrée sur la recherche d'un polygone qui renferme un ensemble de points complexes qui sont dispersés dans le plan. Au début, je n'ai pas trouvé la fonction qui fait cela dans MatLab, qui était bien sûr très étrange. J'ai donc décidé de trouver un algorithme personnalisé. Dans ce post, je vais décrire mon algorithme.

Konvext hölje

Figure 1. Des exemples de shell. Convexe

Mon Alogritm

Je décris mon algorithme est en utilisant la figure 2. Pour commencer, je vais vous expliquer la difficulté à trouver un logement. La chose est que tous les points ne sont pas triés dans une structure. Si les points sont ordonnés autour d'un point central, on peut utiliser leur ordre et la distance du centre de résoudre le problème. Cependant, il faut au moins O (n log (n)) pour faire un tri linéaire. Mon algorithme fonctionne dans la liste non triés et sera probablement encore plus de temps, car je n'ai pas tiré la moindre preuve.

L'idée est certainement de commencer par mon point de vue dans la direction x et ensuite trouver le point à partir duquel la valeur de k devient le maximum. c'est à dire comprendre:

max (K_i) = (y_min - y_i) / (x_min - x_i) pour i = [tous les articles] Cela vous donne le point de p_2..

Tous les points de moins de valeur y X_min peut être omis. Tous les points ayant une valeur plus petite que x p_2 peut également être exclu pour en savoir plus.

K_2 se trouve alors en trouvant le point qui minimise:

k_1 - (y_1 - y_i) / (x_1 - x_i) pour i = [tous les points ne sont pas exclus]

De même trouvé k_a généralement par:

min (k_a-1 - (y_a-1 - y_i) / (x_a-1 - x_i)) pour i = [tous les points ne sont pas exclues]

Le calcul est fait pour la moitié supérieure du polygone jusqu'à ce que vous arriver au point qui est au maximum dans la direction x. Par la suite, le même algorithme de la moitié inférieure du polygone.

Algoritm för konvext hölje

Figure 2. Algorithme pour le cas convexe.

Performance

La performance de l'algorithme dépend de combien de points qui finissent dans le polygone. Je fais linjärsök autant la liste qu'il pointe dans le polygone. Cela signifie que la complexité est en O (N * nombre de recherche). Le nombre de points dans le polygone optimale se situe entre 10 et 25 en fonction de vos points de hasard. L'algorithme est donc relativement rapide.

Code

Le code n'est pas public.

Matlab solution - la coque convexe

Mon algorithme fait la même chose en fonction Matlab convhull . Convexe est donc le mot anglais pour un polygone fermé ou un corps convexe. Une autre bonne ressource est http://en.wikipedia.org/wiki/Convex_hull_algorithms expliquant que le temps théorique minimale pour trouver une coque convexe est de l'ordre (n log (n)) O.

Juillet
14
2009
2

Matlab Image Resizer

J'ai écrit un petit programme pour matlab, le rétrécissement des images. C'est parce que je n'ai pas trouvé cette fonctionnalité de façon simple quelque part. Il devrait être tout à fait beaucoup de photos à Sydney / Australie au cours de l'année d'échange qui doit être rechargée. Nous avons des limites sur notre accès où nous vivons si vous ne pouvez pas avoir des photos de 5 Mo chacune. Après que j'ai fini mon programme dans un format qui a maintenant tourné vers moi qu'il est facile d'éditer des images à la fois nombreux avec un programme de bureaux. Quoi qu'il en soit, le programme fonctionne très bien.

But

Le programme vise tout simplement à réduire la taille de toutes les images dans un dossier.

Pourquoi?

Comme il est fastidieux de modifier et de réduire chaque image séparément lors de nombreuses images sont à fixer.

Ce qui est nécessaire pour exécuter le programme?

Il est nécessaire que vous avez une licence pour matlab exécution. Etes-vous un étudiant que je vais pas y avoir de problèmes, sinon il est malheureusement sans doute pas libre.

Utiliser

WYSIWYG.

Responsabilité

Je ne prends pas la responsabilité de tout ce qui fonctionne.


Télécharger ImageResizer

Juin
28
2009
2

Matlab interface graphique avec guihandles

J'ai travaillé avec un programme informatique dans Matlab. L'idée derrière cela est qu'il doit être convivial et efficace pour faire des calculs communs pour certains types d'installations. Dans ce programme, j'ai utilisé un lot de widgets que uipanel, uitree et uicontrol.

Beaucoup d'écrivains de tutoriels pour Matlab interface graphique vous recommandons d'utiliser Matlab fonction intégrée (ou peut-être je devrais appeler cela une boîte à outils (?)) Intitulé Guide. Type:

Guide >>

Dans la fenêtre de commande et il ouvre une fenêtre où vous pouvez localiser et configurer les composants d'une figure. Cela présente des avantages pour des applications à une seule vitesse. Cependant, le gros problème si vous voulez écrire un logiciel légitime. C'est parce qu'il est difficile de garder une trace de vos objets graphiques. Ils sont inclus dans le chiffre exporté se terminant en chiffres

Placez vos composants vous

J'ai écrit mon programme sans utiliser le guide. Il est facile de créer et de déployer des composants. Comme vous pouvez le voir ci-dessous, exige une commande peu beaucoup de codage. Imaginez comment les codes costauds pour des jeux comme poker et d'autres applications où il ya une diversité d'activités. Quoi qu'il en soit, revenir à l'écriture de programmes sans utiliser le guide. Cela se fait en réglant la poignées de fenêtre à créer dans la figure et la position de la fenêtre. Bien sûr, d'autres paramètres tels que la couleur ou de rappel configuré, tout comme l'intérieur du guide. J'ai écrit mes programmes comme des objets Matlab et a utilisé la stratégie de sous-traiter des composants du constructeur en appelant une fonction de livraison, provisoirement nommé initialisation gui. Je enregistrer mon objet en interne dans la classe dans une structure qui a la main sur les leviers pour les composants. Cette structure-je lancer lorsque je pose les composants.

  aClassName classdef <poignée
    Propriétés
       handleToGui;
    fin
    Méthodes
       obj = function aClassName (varargin)
          ...
          obj.initGui ();
          ...
       fin
       ...
       Figure fonction = initGui (Obj)
          = Chiffre Obj.handleToGui.fig (...);
          Obj.handleToGui.otherComponentName = ...
          ...
       fin
    fin
 Classdef fin% 

Guihandles fonction MATLAB

Matlab possède une fonction appelée guihandles. Il est assez facile à bien des égards, et je vais vous expliquer pourquoi. La raison en est que vous n'avez pas à vous soucier de l'ajout de vos composants directement dans une structure quand vous les mettez en raison guihandles (parent), fournit une structure de poignées pour tous les enfants (les enfants) qui sont dans la figure. En appelant pour cela, vous pouvez lancer handleToGui après que tous les composants disposés. Cela devient alors une structure avec un champ ames donné le nom de balise (Tag) des composants ont été donnés.

Problèmes avec les guihandles fonction MATLAB

Cependant, il ya un risque avec ce que je pense que Matlab a pas pensé. Sinon, c'est pour que moi et d'autres ont utilisé la trop négligemment. Le fait est que les poignées gui fournissent les poignées pour tous les widgets dans la figure. Si vous avez des classes différentes pour les différentes parties de votre application, tels que une classe séparée qui gère un type particulier de plottyta dans une partie du programme et une autre classe qui effectue une tâche similaire dans un autre endroit où ils peuvent se détruire mutuellement si les deux sont à l'aide guihandles. Guihandles dans un sous-permet les poignées pour le personnage principal (y compris d'autres sous-composantes qui sont en elle). Si le second a le sous-nom de la balise même de tout composant, ils seront confus lorsque le composant invoque ce qu'elle croit être le composant.

Ne pas utiliser les guihandles fonction MATLAB

Object-Oriented Programming pour moi, c'est une méthode de programmation pour la création d'une bonne structure. C'est en permettant à chaque objet (classe) de s'acquitter de ses tâches à l'intérieur et ne communiquent grâce à des interfaces spécifiques avec l'environnement. Mondiales guihandles des variables fournit un risque potentiellement mortel. Le concept du monde cherche en d'autres termes, pour un couplage faible, une forte cohésion et le bien-modules définis.

Rédigé par David Gustafsson, dans: Programmation | Tags: , , ,
Juin
19
2009
2

Programmation Matlab

J'ai travaillé avec un programme Matlab au cours de mon emploi d'été. La puissance de Matlab, c'est que c'est un langage très simple qui est un niveau d'abstraction plus élevé que, disons, Java. Car il faut ajouter que la langue est très simple quand il s'agit d'effectuer des calculs, résoudre des équations différentielles, des comtes, des simulations numériques et ainsi de suite. Un inconvénient, résultant du niveau élevé d'abstraction, cependant, est qu'il est plutôt lent. Vous devez prendre grand soin de lors du codage.

Matlab construit avec la version 2008a sur java. Vous pouvez conduire la plupart des fonctionnalités de Java en fonction de Matlab (il ya aussi d'autres fonctions du même genre):

  javaMethodEDT («classe ou un objet de classe ',' methodName ', ..., Params) 

De Matlab version 2008, vous pouvez également créer des classes et objets, ce qui simplifie et crée la structure même. La syntaxe est assez loin de java et beaucoup est hérité des versions précédentes de Matlab, ce qui rend d'abord un peu maladroite. Je vais dans une série d'articles présentant quelques trucs et astuces pour la programmation sous Matlab.

  • Je vais passer l'interface graphique sous la forme d'un autre arbre, et les contrôles. Ces fonctions sont gérées par Matlab et uicontrol uitree, qui est une réécriture de l'composants Java, JTree et JButton, JTextField, etc. Dans ce contexte, je prends l'externalisation de composants, qui peut être fait manuellement et avec un guide de Matlab logiciel intégré.
  • Je vais revenir à des méthodes de Matlab get et set, qui est un peu compliqué mais très bon quand on travaille avec des objets.
  • Je passe par les fonctions Matlab pour sauvegarder les objets et explique pourquoi il est plus sage de sauvegarder les données sous forme de structures de données.
  • Enfin, je considère aussi les rappels et les soi-disant fonction ode45, ce qui est utile pour résoudre des équations différentielles. Ode45 peut notamment être utilisé pour simuler des systèmes dynamiques de différents types. Un exemple est le comportement du réseau électrique à des taux différents.

Je me vois maintenant comme un bon programmeur Matlab avec une expérience dans deux projets. Pour plus d'informations sur moi et ma mission, s'il vous plaît contacter le david@techonomics.se . J'ai f impôt et le projet de loi par affectation ou une charge à l'heure.

Le thème est modifié à partir Aeros 2.0 - Blogglista.se - La traduction est faite par N2H