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

Hitta ett optimalt polygon som omsluter slumpmässiga komplexa punkter – Konvext hölje

Inledning

I sommar jobbar jag på en teknikavdelning i Västerås. Jag har jobbat på samma företag och på ungefär samma kontor under tre raka somrar. Arbetet är väldigt tekniskt, roligt och utmanande. Till skillnad från många andra sommarjobb på kontor har jag hittat ett där jag får ansvar och får jobba med vanliga arbetsuppgifter. Konkret så jobbar jag med att utveckla verktyg för att förenkla beräkningsarbete med hjälp av till största delen MatLab, GUI-programmering och Java. Den nya objektorienterade stilen i MatLab gör koden betydligt mer tydlig än för några år sedan.

Problemet

Här om dagen ställdes jag inför en liten utmaning. Förenklat gick det ut på att hitta ett polygon som omsluter en samling med komplexa punkter som ligger spridda i planet. Till en början hittade jag inte funktionen som gör detta i MatLab, vilket förstås var konstigt. Jag bestämde mig därför för att hitta en egen algoritm. I detta inlägg skall jag beskriva min algoritm.

Konvext hölje

Figur 1. Exempel på konvext hölje.

Min Alogritm

Jag ska beskriva min algoritm med hjälp av figur 2. Till att börja med skall jag förklara svårigheten med att hitta höljet. Grejen är att alla punkter ligger osorterade i en struktur. Om punkterna sorteras kring en centrumpunkt kan man använda deras ordning och avståndet från centrum för att lösa problemet. Det tar dock minst O(n log(n)) att göra en linjär sortering. Min algoritm jobbar på den osorterade listan och tar säkert ännu mer tid; jag har inte härlett något bevis.

Tanken är i alla fall att börja med min punkten i x-led och därefter hitta den punkt till vilken k värdet blir maximalt. dvs räkna ut:

max(k_i) = (y_min – y_i)/(x_min – x_i) för i = [alla punkter]. Detta ger dig punkten p_2.

Alla punkter med mindre y-värde än X_min kan uteslutas. Alla punkter med mindre x-värde än p_2 kan också uteslutas för vidare genomläsning.

k_2 hittas sedan genom att hitta den punkt som minimerar:

k_1 – (y_1 – y_i)/(x_1 – x_i) för i = [alla icke uteslutna punkter]

På samma sätt hittas k_a generellt genom:

min(k_a-1 – (y_a-1 – y_i)/(x_a-1 – x_i)) för i = [alla icke uteslutna punkter]

Uträkningen görs för övre halvan av polygonen tills man kommer till punkten som är maximal i x-led. Därefter görs samma algoritm för den undre halvan av polygonen.

Algoritm för konvext hölje

Figur 2. Algoritm för konvext hölje.

Prestanda

Prestandan av algoritmen beror på hur många punkter som hamnar i polygonet. Jag gör lika många linjärsök i listan som det blir punkter i polygonet. Det innebär att komplexiteten är O(N*antalet sök). Antalet punkter i det optimala polygonet blir mellan 10 och 25 beroende på dina slumppunkter. Algoritmen är alltså relativt snabb.

Kod

Koden är inte publik.

MatLabs lösning – convex hull

Min algoritm gör samma sak som MatLabs funktion convhull. Convex hull är alltså det Engelska ordet för en omslutande polygon eller ett konvext hölje. En annan bra resurs är http://en.wikipedia.org/wiki/Convex_hull_algorithms som förklarar att den teoretiska minimum tiden för att hitta ett konvext hölje är av storleksordningen O(n log(n)).

Jun
02
2010
2

Vedbod/garage ritning online

Efter att ha fått otroligt många google sök på vedbod ritning (över 5000 på ett år) gör jag nu ritningen tillgänglig online via mitt SlideShare konto. Ritningen jag beskrev i mitt tidigare inlägg föreställer en stor vedbod kombinerad med garage. Byggnaden är idag färdigställd helt enligt ritning.

Använd gärna min ritning. Skicka mig gärna ett mail, skriv en kommentar eller länka till mig.

Vedbod- eller garage ritning

Jag gjorde ritningen under tiden jag hade tillgång till modelleringsprogrammet Solid Works. Funderar du på en liten annan design och är sugen på att rita ditt eget projekt så kan du alltid prova att ladda ner test-versionen av Chief Architect. Jag har inte testat detta själv men sett en demo av programmet som jag tycker verkar lovande!

Författad av David Gustafsson in: Ekonomi, Ritning, Teknik | Etiketter:, ,
Maj
15
2010
2

Office Live Workspace/ Office Web apps – Kanske den slutgiltiga lösningen för dokumenthantering

Example på en Google grupp för mitt projekt i Innovation och Entreprenörsskap

Example på en Google grupp för mitt projekt i Innovation och Entreprenörsska

Office Live Workspace är Windows sena svar på dokumenthantering på webben. Kanske känner du till Google-docs eller Google-groups? Med Google-docs kan du editera och lagra filer direkt på nätet. Flera personer kan arbeta i samma dokument samtidigt, vilket är en väldigt bra tanke för projektarbeten. Alla känner väl till problematiken med versionshantering som uppstår när alla gruppmedlemmar sitter med en varsin lokal version som skall fogas samman. Inkorgen tenderar ofta att snabbt bli full. Tyvärr kräver Google-docs en bra internetanslutning och ett glatt humör eftersom tjänsten ofta strular. En annan stor nackdel med Google-docs är formateringen som är bristfällig. Arbetsgången blir därför ofta att använda Google-docs som en anslagstavla för information och idéer istället för hela projektet igenom.

Google-groups löser problematiken med en full inkorg genom att dela de senaste versionerna på nätet. Gränssnittet stödjer uppladdning av filer och gruppdiskussioner. För mig har detta blivit att föredra framför Google-docs struliga editering.

Huvudproblemet är egentligen att 100 % av alla studenter och företagsanställda jobbar med Microsoft Office som skrivbordsverktyg och att Microsoft inte har erbjudit någon allmän tjänst för att jobba med dokument i projekt. För ungefär ett år sedan fick jag dock syn på betaversionen av Microsoft Office Live Workspace i samband med att jag installerade Word 2007. Det fungerade inte speciellt bra vid det tillfället så jag lät det vara. För 1 timma sedan bestämde jag mig dock för att testa Office Live Workspace igen i samband med att jag fick ett mail från Microsoft.

Här är några av de häpnadsväckande funktioner jag upptäckte och genast tänker börja använda.

Spara dina dokument direkt på nätet

Ny meny for Office Live

Ny meny for Office Live

Genom ditt live konto kan du nu (eller har kunnat sedan ett år tillbaka) spara dina dokument/information på nätet. Detta har framförallt en stor fördel; din information är säker. Visserligen ligger informationen på Microsofts server, vilket många kanske ogillar, men om din dator skulle gå sönder finns i alla fall dina dokument kvar. Att ha dokumenten på nätet innebär också att du kan jobba från flera olika datorer utan att behöva använda följande metoder:

  • Bära med sig en USB sticka
  • Maila dokument till dig själv
  • Ladda upp och ner via Google-docs

Office Live Workspace fungerar ungefär som Google-docs bara att du slipper följande:

  • Logga in på Google-docs
  • Ladda ner din fil
  • Skriva och jobba några timmar
  • Ladda upp den nya filen på Google-docs
  • Ta bort den gamla filen

Office Live Workspace gör allt detta, förutom ”skriva några timmar” åt dig. Du slipper all formatering och de tråkigheter som följer med Google-docs.

Office Live Workspace funkar för alla Office format, Power Point, Word och Excel.

Hur får jag Office Live Workspace?

Tro det eller ej men Office Live Workspace är, precis som Google, gratis! Allt du behöver göra är att:

Hantera dina Office Live dokument

När du har skaffat ditt Microsoft Live-id går du till ditt Office Live Workspace genom att skriva följande sökväg:

hantera-filer-i-office-live

Hantera filer med Office Live Workspace

Se till att byt ut <Microsoft-live-id> mot ditt Live-id.

Väl i ditt Office Live Workspace kan du hantera dina dokument. Du kan till exempel spara, visa, gruppera i mappar och dela med grupper. Något som inte är möjligt är att editera dina dokument på Webben. Detta måste du än så länge göra lokalt i din Office-version på datorn. För dig som har Office 2010 finns dock lösningen redan nu; Sky Drive.

Det fina med Office Live Workspace är gruppdelningsfunktionen. Du väljer att visa vissa mappar av ditt Workspace med de personer som är delaktiga i projektet. Precis som i Google-groups kan du kommentera och ha diskussioner med din grupp. Till skillnad från Groogle-groups hanterar du alla dina filer och grupper på samma ställe, i ditt Workspace, istället för att ha en portal för varje grupp!

Office Sky Drive

För dig som har Office 2010 kan du redan nu redigera dina dokument på nätet, precis som i Google-docs. Du använder då något som heter Office Web Apps. Fråga är hur bra detta är? Jag har tyvärr inte testat eftersom jag har 2007 versionen av Office. Med Office Sky Drive är tanken att du ska ha ditt Office-skrivbord på nätet. Idag finns 25 GB lagringsutrymme att använda, vilket är mycket mer än de 100 MB som Google-groups erbjuder.

Nackdelar

Än så länge är Office Live Workspace bara i betaversion. På min dator är tjänsten lite slö eftersom jag har dålig internetanslutning. Sparar jag ett dokument med lite bilder i (1MB) tar det ca 1 minut innan dokumentet ligger sparat på webben. En annan nackdel är att många inte känner till tjänsten samt att den kräver en Office-installation. Detta upprör givetvis den minoritet som inte använder Office. Men för er finns ju Google-docs fortfarande kvar.

Med största sannolikhet bör Office Live Workspace konkurrera ut Google-docs och Google-groups så fort tjänsten släpps ur sin betaversion och folk börjar använda den. Microsoft äger marknaden för dokumenthantering. Open Office eller LaTeX är gratis och helt okej, speciellt om jag pratar med mina kollegor inom Computer Science.  Men faktum är att om du vara seriös inom dokumenthantering så finns det bara en programvara som gäller och det är Microsoft Office för Windows.

Jul
14
2009
2

Matlab Image Resizer

Jag har skrivit ett litet program för matlab som förminskar bilder. Detta eftersom jag inte hittade den funktionen på något enkelt sätt någonstans. Det bör bli ganska många bilder i Sydney/Australien under utbytesåret som måste laddas upp. Vi har begränsningar på vår uppkoppling där vi bor så det går inte att ha bilder på 5 Mb per styck. Efter att jag blivit klar med programmet i det utförande det nu har såg jag dock att det går smidigt att redigera många bilder samtidigt med ett officeprogram. Hur som helst så fungerar programmet bra.

Syfte

Programmet syftat till att enkelt förminska alla bilder i en mapp.

Varför?

Eftersom det är jobbigt att editera och förminska var bild för sig när många bilder skall fixas.

Vad krävs för att köra programmet?

Det krävs att du har en licens på matlab runtime. Är du student som jag skall det inte vara några problem, annars är det tyvärr nog inte gratis.

Användning

WYSIWYG.

Ansvar

Jag tar inget ansvar för att någonting fungerar.


Ladda ner ImageResizer

Jun
28
2009
2

Matlab Gui med guihandles

Jag har jobbat med ett beräkningsprogram i Matlab. Tanken med detta är att det skall vara användarvänligt och effektivt att göra vanliga beräkningar för vissa typer av anläggningar. I detta program har jag använt mig av en hel del grafiska komponenter som uipanel, uitree och uicontrol.

Många författare av tutorials för Matlab GUI rekommenderar att använda Matlabs inbyggda funktion (eller jag kanske ska kalla det för toolbox (?)) som heter guide. Skriv:

>>guide

I kommandofönstret och du får upp ett fönster där det går att placera och konfigurera komponenter i en figur. Detta har sina fördelar för enkla snabba applikationer. Dock har det stora problem om du vill skriva seriösa program. Detta eftersom det är svårt att ha kontroll på dina grafiska objekt. De bakas in i den exporterade figuren med ändelsen fig.

Placera dina komponenter själv

Jag har skrivit mitt program utan att använda guide. Det är lätt att skapa och placera ut komponenter. Som ni kan se nedan, krävs en bit kommando en massa kodning. Föreställa sig hur biffiga koderna för spel som poker och andra tillämpningar där det finns en mångfald av verksamheter. Anyway, tillbaka till att skriva program utan att använda guide. Detta görs genom att ange hantag till fönstret figuren skall skapas i samt positionen i fönstret. Givetvis kan även andra parametrar som färg eller callback konfigureras, precis som inifrån guide. Jag har skrivit mina program som Matlab objekt och använt strategin att lägga ut komponenterna i konstruktorn genom att anropa en utläggningsfunktion, förslagsvis med namnet init gui. Jag sparar mina objekt internt i klassen i en struktur som har tag i alla handtag till komponenterna. Denna struktur initierar jag när jag lägger ut komponenterna.

classdef aClassName < handle
   properties
      handleToGui;
   end
   methods
      function obj = aClassName(varargin)
         ...
         obj.initGui();
         ...
      end
      ...
      function fig = initGui(Obj)
         Obj.handleToGui.fig = figure(...);
         Obj.handleToGui.otherComponentName = ...
         ...
      end
   end
end % classdef

Matlabs function guihandles

Matlab har en funktion som heter guihandles. Den är ganska smidig på många sätt och jag ska förklara varför. Anledningen är att du inte behöver bry dig om att lägga dina komponenter direkt i en struktur när du placerar ut dem eftersom guihandles(parent), ger en struktur med handtag till alla barn (children) som finns i figuren. Genom att kalla på denna kan du initiera handleToGui efter att alla komponenter lagts ut. Denna blir då en struktur med fieldnames givet till de taggnamn (Tag) komponenterna har givits.

Problem med Matlabs function guihandles

Det finns dock en risk med detta som jag tror att Matlab inte har tänkt på. Alternativt är det så att jag och andra har använt funktionen alltför oförsiktigt. Det är nämligen så att gui handles ger handtag till alla grafiska komponenter i figuren. Om du har olika klasser för olika delar av ditt program, t.ex. en separat klass som hanterar en viss typ av plottyta i en del av programmet och en annan klass som gör en liknande uppgift på ett annat ställe kan dessa förstöra för varandra om båda använder guihandles. Guihandles i en subkomponent ger handtagen till hela huvudfiguren (inklusive andra subkomponenter som ligger i den). Om den andra subkomponenten har samma taggnamn på någon komponent kommer dessa att sammanblandas när den aktuella komponenten anropar vad den tror är sin komponent.

Använd inte Matlabs function guihandles

Objektorienterad programmering är för mig en programmeringsmetod för att skapa god struktur. Detta genom att låta varje objekt (klass) sköta sina uppgifter internt och endast kommunicera genom bestämda gränssnitt med omgivningen. Globala variabler som guihandles ger är livsfarligt. I begreppsvärlden strävar man med andra ord efter låg coupling, hög cohesion och väl avgränsade moduler.

Författad av David Gustafsson in: Programmering | Etiketter:, , ,

Temat är modifierat från Aeros 2.0 - Blogglista.se - Översättning är gjord av N2H