<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6016594</id><updated>2012-01-13T14:30:35.005Z</updated><category term='infosphere'/><category term='scr2'/><category term='ai'/><category term='books'/><category term='nature'/><category term='canon'/><category term='algorithms'/><category term='scribd'/><category term='webmail'/><category term='cs'/><category term='video'/><category term='lsystems'/><category term='email'/><category term='morphing'/><category term='elgg'/><category term='moveistorm'/><category term='c++'/><category term='orthonormal'/><category term='dcs'/><category term='rant'/><category term='helvellyn'/><category term='weather'/><category term='tesco'/><category term='algorithmic'/><category term='l-systems'/><category term='Feature'/><category term='lego'/><category term='morons'/><category term='java'/><category term='sicsa'/><category term='talk'/><category term='engineering'/><category term='bridge'/><category term='concave'/><category term='holiday'/><category term='graphics'/><category term='glasgow university library nurbs'/><category term='growth'/><category term='blender ligthbox model render template three point lighting'/><category term='facades'/><category term='diet'/><category term='Sony cw'/><category term='doeswhatitsaysonthetin'/><category term='gpu'/><category term='voronoi'/><category term='speedtree'/><category term='report'/><category term='citysculpt'/><category term='gates'/><category term='flickr'/><category term='twak'/><category term='phy2d'/><category term='terrain'/><category term='design'/><category term='cw'/><category term='ubuntu'/><category term='ambiguous'/><category term='depth from defocus'/><category term='svn'/><category term='bikes'/><category term='somethingfornothing'/><category term='import'/><category term='kings'/><category term='group project'/><category term='suckage'/><category term='nurture'/><category term='cambridge'/><category term='procedural geometry'/><category term='decay'/><category term='evaluation'/><category term='year'/><category term='biology'/><category term='animation'/><category term='gah'/><category term='lisp clisp lush jacol java Makefile'/><category term='morphospace'/><category term='fallout'/><category term='morphogeni fields'/><category term='mrbike'/><category term='physics'/><category term='image'/><category term='muller'/><category term='settlers'/><category term='az'/><category term='council'/><category term='antics3d'/><category term='siteplan'/><category term='startup'/><category term='morphology'/><category term='plants'/><category term='asu'/><category term='netbeans'/><category term='copyright'/><category term='stopwastingmytime'/><category term='clyde'/><category term='dirtytricks'/><category term='tesco value bridge'/><category term='spotify'/><category term='emergent'/><category term='publications'/><category term='fish'/><category term='mudslingin'/><category term='marvin'/><category term='metamorphosis'/><category term='technic'/><category term='robust'/><category term='beard loading twak'/><category term='giant'/><category term='ilm'/><category term='old projects'/><category term='wtf'/><category term='user generated content'/><category term='library'/><category term='bike'/><category term='procex'/><category term='depth map'/><category term='moviestorm'/><category term='vecmath'/><category term='cities'/><category term='sheep'/><category term='reverse'/><category term='COMS'/><category term='gpu cloud'/><category term='lindenmayer'/><category term='frequency map'/><category term='src'/><category term='camera'/><category term='tuple3d'/><category term='jdk'/><category term='400d'/><category term='trufree'/><category term='argh'/><category term='cloud'/><category term='glasgow'/><category term='algorithm'/><category term='cycles'/><category term='autostitch'/><category term='Bier'/><category term='gpucloud'/><category term='geometry'/><category term='urban'/><category term='paper draft'/><category term='COMS20805'/><category term='city'/><category term='stormr'/><category term='shape grammar'/><category term='teleostei'/><category term='buildings'/><category term='morphogens'/><category term='architecture'/><category term='whywouldiwanttoknowthat'/><category term='value'/><category term='mudslinging'/><category term='non-flat terrain'/><category term='sunflow'/><category term='sity'/><category term='blender'/><category term='importer'/><category term='idv'/><category term='weighted'/><category term='20805'/><category term='ucsc'/><category term='photos'/><category term='strobe'/><category term='complexity'/><category term='evolution'/><category term='form'/><category term='straight skeleton'/><category term='phd'/><category term='procedural'/><category term='python'/><category term='wss'/><category term='script'/><category term='bristol'/><category term='windows'/><category term='layout'/><category term='Phyllotaxis'/><category term='beauty'/><category term='thunderbird'/><category term='procedural extrusions.'/><category term='phoenix'/><category term='papers'/><category term='phys2d'/><category term='riverside'/><category term='computer science'/><category term='morphogenic fields'/><category term='tent'/><category term='rocks.'/><category term='worst case'/><category term='RMI Corba lisp java crazyarse IDL'/><category term='random'/><category term='ugc'/><category term='cityengine'/><category term='weighted straight skeleton'/><category term='procedural extrusions'/><category term='games'/><category term='owa'/><category term='first'/><category term='hdr'/><category term='based'/><category term='hownotodothings'/><category term='demofest'/><category term='tco'/><category term='student'/><category term='source'/><category term='scr'/><category term='obj'/><category term='twak.org'/><category term='ipo'/><category term='infinite loop'/><category term='matrix'/><category term='basis'/><category term='imap'/><category term='arizona'/><category term='house'/><category term='symmetry'/><category term='happytoast'/><category term='cmps160'/><category term='phd instanities. procedural'/><title type='text'>twak's blog</title><subtitle type='html'>{graphics, bike, code, chocolate}+</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://twak.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default?start-index=101&amp;max-results=100'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>204</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6016594.post-3283444346108942069</id><published>2011-12-24T19:37:00.001Z</published><updated>2012-01-13T14:30:35.015Z</updated><title type='text'>back from Kaust</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/6402162151/" title="Kaust panorma by twak, on Flickr"&gt;&lt;img alt="Kaust panorma" height="64" src="http://farm7.staticflickr.com/6102/6402162151_0d686d9e9d_z.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Before the holidays I had a short stint working out at&amp;nbsp;&lt;a href="http://gmsv.kaust.edu.sa/" target="_blank"&gt;GMSV&lt;/a&gt;@&lt;a href="http://www.kaust.edu.sa/" target="_blank"&gt;Kaust&lt;/a&gt;,&amp;nbsp;King Abdullah University of Science and Technology in Saudi. I've written down a few notes about life at this crazy place:-&lt;br /&gt;&lt;br /&gt;My initial impression was of the the amazing academic facilities. There are great offices, a visualization suite, 3d&amp;nbsp;printing facilities and a &lt;a href="http://en.wikipedia.org/wiki/Shaheen_(supercomputer)" target="_blank"&gt;super computer&lt;/a&gt; (which they seem to be trying to find a use for). As you'd expect for a university with a $10bn endowment, the buildings are beautiful - sweeping open atriums and harbour-views from many of the offices.&lt;br /&gt;&lt;br /&gt;The campus itself has the feel of American suburbia - all speed bumps and sprinklers. Very nice, very&amp;nbsp;liveable,&amp;nbsp;but a little fake if you're European. While I was there I lived in several places -&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;The Kaust Inn (&lt;a href="http://www.flickr.com/photos/twak/sets/72157628592217573/" target="_blank"&gt;photos&lt;/a&gt;) - the campus hotel, same as any hotel anywhere. Watch out for the rooms at the back which point towards the grand mosque and its 5.30am prayer calls.&lt;/li&gt;&lt;li&gt;A one bedroom flat (&lt;a href="http://www.flickr.com/photos/twak/sets/72157628116573286/" target="_blank"&gt;photos&lt;/a&gt;) - A one bedroom flat on the island. Loads of space for entertaining guests, a good sized kitchen, and a study. Plenty enough room for a (European?!) couple.&lt;/li&gt;&lt;li&gt;A four bedroom house (&lt;a href="http://www.flickr.com/photos/twak/sets/72157628011604017/" target="_blank"&gt;photos&lt;/a&gt;) - Towards the end of my stay the research group rented one of the big colonial-style houses on the beach. (Due to some technicalities I had it to myself for most of my time there). This is a fantastic place that would normally be reserved for full Professors and their families. A sofa for every day of the week, waking up to eat breakfast overlooking the beach and the waves breaking on the reef.&lt;/li&gt;&lt;/ul&gt;The university has done a fantastic job of marketing and advertising itself. It is hard to find something on campus that isn't &lt;a href="http://www.flickr.com/photos/twak/sets/72157628389235343/" target="_blank"&gt;branded with the university's "unity seeds" logo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Kaust made me reassess one of my old prejudices - &lt;i&gt;old universities are good universities&lt;/i&gt;. Although I must have always realised that this was false, this place is a brilliant data point proving the contrary. The campus is three years old, has a formidable faculty and has forged (bought) alliances with the great and the good (&lt;a href="http://www.kaust-aea.cam.ac.uk/" target="_blank"&gt;Cambridge&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.kaust-cu.cornell.edu/" target="_blank"&gt;Cornell&lt;/a&gt;, &lt;a href="http://www.maths.ox.ac.uk/occam/" target="_blank"&gt;Oxford&lt;/a&gt;, &lt;a href="http://camp.stanford.edu/" target="_blank"&gt;Stanford&lt;/a&gt;...)&lt;br /&gt;&lt;br /&gt;I think a spell at Kaust would look very good on anyone's CV. In particular for people looking for a fast track to high level research, or as a cheap way to get a graduate degree (the two year long Master's courses comes with a ~USD2000/mo scholarship).&lt;br /&gt;&lt;br /&gt;There's several moral considerations that people should be concious of in Saudi. As well as the well known country-wide issues of &lt;a href="http://www.flickr.com/photos/twak/6473222227" target="_blank"&gt;civil liberties&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.bbc.co.uk/news/world-middle-east-15079620" target="_blank"&gt;women's rights&lt;/a&gt; (which are better documented elsewhere), there are also issues that are very pronounced on Campus -&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;I was also&amp;nbsp;surprised&amp;nbsp;at how many times I had to sign a bit of paper that threatened to kill me. Both the visa and customs paperwork make it clear that the death penalty is in use. While slightly tarnishing&amp;nbsp;the&amp;nbsp;Arabian&amp;nbsp;hospitality of lore, this is still true of plenty of other countries (cough cough USA). This was something that was always in my mind when travelling to Saudi and added to the traveller's&amp;nbsp;anxiety&amp;nbsp;more than it should. My concerns seem to be unfounded - Sharia law isn't enforced on the campus, and I'm sure that 90% of the academic staff would quit if anyone lost a hand after being accused of theft (writing of the investment in the universitiy overnight).&lt;/li&gt;&lt;li&gt;The campus is kept clean and&amp;nbsp;spotless&amp;nbsp;by an army of (relatively) poorly paid foreigners. Mainly Indian and&amp;nbsp;Filipino; These guys are driven in from Jeddah every morning, or live in gritty looking housing on the other side of campus. I guess while I realise that the world is a very unfair place, and I have my share of sweat-shop trainers, I wasn't expecting to have this reality thrown at me every day.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/6402046249/" title="employee housing? by twak, on Flickr"&gt;&lt;img alt="employee housing?" height="244" src="http://farm7.staticflickr.com/6045/6402046249_20c6c833b0_z.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;li&gt;Saudi is historically suspicious, if not outright hostile, to outsiders. I did find myself asking if this kind of knowledge transfer is really moral if the country doesn't want to integrate with the rest of the world. For example there are no tourist visas available to Saudi, unlike many other Middle-Eastern countries, and most of the foreign workers find themselves living in gated communities away from the locals. The attitude to foreign workers seems to work, get paid, stay quiet, then get out.&lt;/li&gt;&lt;li&gt;However green the campus &lt;a href="http://www.constructionweekonline.com/article-8765-largest-leed-platinum-project-in-the-world/1/print/" target="_blank"&gt;claims&lt;/a&gt; to be, the building refuse discarded on the&amp;nbsp;other side&amp;nbsp;of the motorways says otherwise. It is very unnatural&amp;nbsp;to live the (24-7-air-con) American dream in the middle of the desert, and however well designed the campus' buildings are, there must be a significant environmental cost. Add to this the 100 mile drive to escape the campus, or air travel to escape the desert (at regular intervals if you want to remain sane), and it is possibly not the most environmentally sound living location.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: left;"&gt;The campus is modeled on American suburbia - after you pass the tank traps and security checks you find yourself in a very safe feeling environment. Palm trees (watered by the eternally present sprinkler systems) line the streets, and there's plenty of green open spaces (a couple of parks and a golf course). The supermarket is 15 minutes walk from anywhere on campus and is stocked to placate people from most parts of the world - Froot Loops for the Americans, Leerdammer and Emmental for the europeans, a reasonable wheat-free section and even beef-bacon for those with pig-withdrawal&amp;nbsp;symptoms. Of course there's no beer, and occasional supply problems (the campus ran out of peanut m&amp;amp;m's!). Most critically, there was no dark chocolate - a certain prerequisite for doing&amp;nbsp;research of any quality...&lt;br /&gt;&lt;br /&gt;The feeling of cargo-cult westernism seems to&amp;nbsp;permeate&amp;nbsp;a lot of the campus. For&amp;nbsp;example&amp;nbsp;the workers in the supermarket wear disposable gloves when working with raw meat, but don't take the gloves off to pass you a piece of cheese. The fast food places in the malls in Jeddah (90 minutes on the frequent Kaust buses) are the slowest I've ever seen.&amp;nbsp;The airport is another great example - there's been no checks for liquids, and was marched in a group of 20 passengers backwards through security (and the metal detectors) after a flight was cancelled. There's also the occasional &lt;a href="http://www.flickr.com/photos/twak/6524357871" target="_blank"&gt;path to nowhere&lt;/a&gt;, or bathroom sinks positioned to make the toilet impossible to sit on if you're over 5ft tall. This is a &lt;a href="http://dan.lecocq.us/wordpress/category/kaust/" target="_blank"&gt;great blog&lt;/a&gt; detailing life on the early Kaust campus, including the &lt;a href="http://dan.lecocq.us/wordpress/2009/11/26/flood/" target="_blank"&gt;epic floods&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;My number one gripe was the feeling of being stuck on campus. As a gated community, there was a lot to do on the campus - a medium sized gum, windsurfing, snorkling trips, and a coed (racy!) beach. People who had families, and spent their time&amp;nbsp;socializing&amp;nbsp;with&amp;nbsp;(sober)&amp;nbsp;friends, seemed to get on fine with the setup. However I'm used to heading out at weekends and blowing of steam on 150km &lt;a href="http://twak.blogspot.com/2008/09/landfall.html" target="_blank"&gt;bike rides&lt;/a&gt;, and there was nothing that I found to come close to this - the roads were too large (and unsafe - almost all the cars looked like they'd been in some sort of collision in the last 6mo) to cycle on, and there were no real organised outdoor&amp;nbsp;activities&amp;nbsp;(no hiking, orienteering, or even yachting). If you so much as sail the rental dingy more than a few hundred meters from the beach, the coastguard comes and picks you up. While there's a great choice of stuff to do on campus, it is just that - a choice between several watersports. After a few weeks, all this left me feeling more than a bit trapped.&lt;br /&gt;&lt;br /&gt;Still, when all is said and done, Kaust&amp;nbsp;(not to be confused with &lt;a href="http://www.ecust.edu.cn/" target="_blank"&gt;ECUST&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.ust.hk/eng/index.htm" target="_blank"&gt;HKUST&lt;/a&gt;, &lt;a href="http://www.knust.edu.gh/" target="_blank"&gt;KNUST&lt;/a&gt;&amp;nbsp;or&amp;nbsp;&lt;a href="http://www.kust.edu.pk/" target="_blank"&gt;KUST&lt;/a&gt;)&amp;nbsp;is a refreshing change to trying to do academia in the UK, where career advancement is difficult and basic funding is in question after the government&amp;nbsp;&lt;a href="http://www.dpmms.cam.ac.uk/~bt219/epsrc.html" target="_blank"&gt;pulled funding for most of the mathematics postdocs&lt;/a&gt;. The campus, and its &lt;a href="http://www.flickr.com/photos/twak/6383455009" target="_blank"&gt;sunsets&lt;/a&gt;, are really beautiful, and well worth visiting!&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/6527721217/" title="Moon, Beacon by twak, on Flickr"&gt;&lt;img alt="Moon, Beacon" height="320" src="http://farm8.staticflickr.com/7035/6527721217_3d24b1c509_z.jpg" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-3283444346108942069?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/3283444346108942069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2011/12/back-from-kaust.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/3283444346108942069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/3283444346108942069'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2011/12/back-from-kaust.html' title='back from Kaust'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-8661797001174543656</id><published>2011-12-17T19:25:00.001Z</published><updated>2011-12-17T19:45:44.783Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='publications'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><title type='text'>Procedural Generation of Parcels in Urban Modeling</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;Eurographics 2012, to appear&lt;/b&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;a href="http://www.cs.purdue.edu/homes/cvanegas/" target="_blank"&gt;C. Vanegas&lt;/a&gt;&amp;nbsp;&amp;amp;&amp;nbsp;&lt;a href="http://twak.org/" target="_blank"&gt;T. Kelly&lt;/a&gt;, &lt;a href="http://trainfever.urbanweber.ch/dokuwiki/doku.php?id=start" target="_blank"&gt;B. Weber&lt;/a&gt;, &lt;a href="http://www.ia.arch.ethz.ch/halatsch/" target="_blank"&gt;J. Halatsch&lt;/a&gt;, &lt;a href="http://www.cs.purdue.edu/homes/aliaga/" target="_blank"&gt;D. Aliaga&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.vision.ee.ethz.ch/~pmueller/" target="_blank"&gt;P. Muller&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;[ &lt;a href="http://dcs.gla.ac.uk/~tkelly/bits/procedural_parcels/procedural_parcels.pdf"&gt;pdf&lt;/a&gt;&amp;nbsp;] [ &lt;a href="http://dcs.gla.ac.uk/~tkelly/bits/procedural_parcels/appendix.pdf" target="_blank"&gt;additional materials&lt;/a&gt; ] [&amp;nbsp;&lt;a href="http://www.esri.com/software/cityengine/30-day-trial.html" title="(sic)"&gt;implementation&lt;/a&gt;&amp;nbsp;]&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/6526863797/sizes/o/" style="margin-left: 1em; margin-right: 1em;" title="teaser by twak, on Flickr"&gt;&lt;img alt="teaser" src="http://farm8.staticflickr.com/7164/6526863797_c8b0d9ced1_z.jpg" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;We present a method for interactive procedural generation of parcels within the urban modeling pipeline. Our approach performs a partitioning of the interior of city blocks using user-specified subdivision attributes and style parameters. Moreover, our method is both robust and persistent in the sense of being able to map individual parcels from before an edit operation to after an edit operation - this enables transferring most, if not all, customizations despite small to large-scale interactive editing operations. The guidelines guarantee that the resulting subdivisions are functionally and geometrically plausible for subsequent building modeling and construction. Our results include visual and statistical comparisons that demonstrate how the parcel configurations created by our method can closely resemble those found in real-world cities of a large variety of styles. By directly addressing the block subdivision problem, we intend to increase the editability and realism of the urban modeling pipeline and to become a standard in parcel generation for future urban modeling methods.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/529g5dxkOlg" width="560"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;iframe class="scribd_iframe_embed" data-aspect-ratio="0.706697459584296" data-auto-height="true" frameborder="0" height="600" id="doc_82135" scrolling="no" src="http://www.scribd.com/embeds/75941705/content?start_page=1&amp;amp;view_mode=list&amp;amp;access_key=key-kqz9vlcphfqoycn2a1y" width="100%"&gt;&lt;/iframe&gt;&lt;script type="text/javascript"&gt;(function() { var scribd = document.createElement("script"); scribd.type = "text/javascript"; scribd.async = true; scribd.src = "http://www.scribd.com/javascripts/embed_code/inject.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(scribd, s); })();&lt;/script&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Other resources:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Location of &lt;a href="http://maps.google.co.uk/maps?q=Philadelphia,+PA,+United+States&amp;amp;hl=en&amp;amp;ll=39.989517,-75.231435&amp;amp;spn=0.009979,0.019784&amp;amp;sll=53.800651,-4.064941&amp;amp;sspn=15.79107,40.517578&amp;amp;vpsrc=6&amp;amp;t=h&amp;amp;z=16" target="_blank"&gt;teaser&lt;/a&gt;, f&lt;a href="http://maps.google.co.uk/maps?ll=41.791313,-88.166978&amp;amp;spn=0.015934,0.033023&amp;amp;sll=41.791433,-88.165119&amp;amp;sspn=0.016638,0.032015&amp;amp;gl=uk&amp;amp;vpsrc=6&amp;amp;t=k&amp;amp;z=16" target="_blank"&gt;igure 10&lt;/a&gt;, a&lt;a href="http://maps.google.co.uk/maps?q=Pasadena,+CA,+USA&amp;amp;hl=en&amp;amp;ll=34.183566,-118.101783&amp;amp;spn=0.018443,0.033023&amp;amp;sll=41.797936,-88.173523&amp;amp;sspn=0.265672,0.511551&amp;amp;vpsrc=6&amp;amp;gl=uk&amp;amp;hnear=Pasadena,+Los+Angeles,+California,+United+States&amp;amp;t=m&amp;amp;z=16" target="_blank"&gt;ppendix B&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Original 3D images: &lt;a href="http://www.flickr.com/photos/twak/6204711910" target="_blank"&gt;first&lt;/a&gt;, &lt;a href="http://www.flickr.com/photos/twak/6204707072" target="_blank"&gt;second&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-8661797001174543656?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/8661797001174543656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2011/12/procedural-generation-of-parcels-in.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/8661797001174543656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/8661797001174543656'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2011/12/procedural-generation-of-parcels-in.html' title='Procedural Generation of Parcels in Urban Modeling'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/529g5dxkOlg/default.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-2178403102155994824</id><published>2011-09-14T20:03:00.004Z</published><updated>2011-09-14T20:29:49.479Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='siteplan'/><category scheme='http://www.blogger.com/atom/ns#' term='procex'/><category scheme='http://www.blogger.com/atom/ns#' term='procedural'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><title type='text'>siteplan source release</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/6147665705/" title="rect3075 by twak, on Flickr"&gt;&lt;img src="http://farm7.static.flickr.com/6084/6147665705_ec376a4dd5_m.jpg" width="240" height="240" alt="rect3075" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I'm very happy to finally announce the long overdue release of SitePlan, my procedural extrusions implementation. There is information about the project &lt;a href="http://code.google.com/p/siteplan/wiki/PageName"&gt;here&lt;/a&gt; (or just click &lt;a href="http://dcs.gla.ac.uk/~tkelly/citysculpt/siteplan/launch.jnlp"&gt;here&lt;/a&gt; to run; java executable; run at your own risk).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Please use the software! The source code is &lt;a href="http://code.google.com/p/siteplan/"&gt;here&lt;/a&gt;. This is a &lt;a href="http://twak.blogspot.com/2011/04/interactive-architectural-modeling-with.html"&gt;research project&lt;/a&gt; and it would really help me if you emailed &lt;a href="http://dcs.gla.ac.uk/~tkelly/"&gt;me&lt;/a&gt; screen shots of your project and a description of what you used it for.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's a very clumsy demonstration video of me using the software:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;object width="640" height="390"&gt;&lt;param name="movie" value="http://www.youtube.com/v/BrCDKrBS9To?version=3&amp;amp;hl=en_GB&amp;amp;hd=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/BrCDKrBS9To?version=3&amp;amp;hl=en_GB&amp;amp;hd=1" type="application/x-shockwave-flash" width="640" height="390" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And some of the kinds of things you can create if you invest a little more time.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/4998728536/" title="50 by twak, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4105/4998728536_748924325d_z.jpg" width="640" height="640" alt="50" /&gt;&lt;/a&gt;&lt;div&gt;With any luck I'll have the slides from Siggraph converted into video any week now...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-2178403102155994824?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/2178403102155994824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2011/09/siteplan-source-release.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/2178403102155994824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/2178403102155994824'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2011/09/siteplan-source-release.html' title='siteplan source release'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm7.static.flickr.com/6084/6147665705_ec376a4dd5_t.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-2024442213243976151</id><published>2011-05-26T13:19:00.003Z</published><updated>2011-05-26T13:24:33.847Z</updated><title type='text'>Zurich &amp; Procedural Inc</title><content type='html'>&lt;div&gt;I'm finally settled and interning at &lt;a href="http://www.procedural.com/"&gt;Procedural&lt;/a&gt; in Zurich for the Summer :) These guys are just about the only people commercial world of procedural urban modeling.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://www.procedural.com/fileadmin/images/logo.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 350px; height: 50px;" src="http://www.procedural.com/fileadmin/images/logo.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div&gt;My first impressions of Zurich are that it has a lot in common with half-life...&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;object type="application/x-shockwave-flash" width="400" height="225" data="http://www.flickr.com/apps/video/stewart.swf?v=71377" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&amp;amp;photo_secret=2357c489ac&amp;amp;photo_id=5722919025" height="225" width="400"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;iframe width="560" height="349" src="http://www.youtube.com/embed/CAqbdtsK6NI" frameborder="0" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5749579959/" title="again with the half-life zurich by twak, on Flickr"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); -webkit-text-decorations-in-effect: none; "&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/twak/5749579959/" title="again with the half-life zurich by twak, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2485/5749579959_e9c28b2fb4.jpg" width="375" height="500" alt="again with the half-life zurich" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-2024442213243976151?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/2024442213243976151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2011/05/zurich-procedural-inc.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/2024442213243976151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/2024442213243976151'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2011/05/zurich-procedural-inc.html' title='Zurich &amp; Procedural Inc'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/CAqbdtsK6NI/default.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-974550628891018289</id><published>2011-04-14T12:12:00.004Z</published><updated>2011-10-05T17:51:13.804Z</updated><title type='text'>uk epsrc ict pioneers</title><content type='html'>&lt;div style="text-align: left;"&gt;A couple of weeks back I won the 'Transforming Society' award from the EPSRC's UK ICT Pioneers contest. Not sure I'll ever transform society, but it was a fun event, with lots of interesting people to chat to.&lt;/div&gt;&lt;br /&gt;Another poster:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5566033684/sizes/o" title="city sculpt - ict pioneers poster by twak, on Flickr"&gt;&lt;img alt="city sculpt - ict pioneers poster" height="221" src="http://farm6.static.flickr.com/5052/5566033684_d126fde314.jpg" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;And some video-with-pretty-lights:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/olsuvLzQPow?rel=0&amp;amp;hd=1" title="YouTube video player" width="480"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Press coverage &lt;a href="http://www.bcs.org/content/conWebDoc/39506"&gt;here&lt;/a&gt;, &lt;a href="http://www.sicsa.ac.uk/sicsa-news/SICSA-News-Feed/sicsastomkellywinsukictpioneeraward"&gt;here&lt;/a&gt; and &lt;a href="http://www.epsrc.ac.uk/newsevents/news/2011/Pages/ictpioneerawards.aspx"&gt;here&lt;/a&gt;. Was kind of fun for a Sicsa student to win a prize at an Epsrc event ;)&lt;/div&gt;&lt;br /&gt;Shout out to &lt;a href="http://info.ee.surrey.ac.uk/Personal/Z.Kalal/"&gt;Zdenek&lt;/a&gt; for making the&lt;a href="http://www.reddit.com/r/technology/comments/ghsvg/predator_a_smart_camera_that_learns"&gt; front page of reddit&lt;/a&gt; with his winning &lt;a href="http://www.youtube.com/watch?v=1GhNXHCQGsM&amp;amp;feature=player_embedded&amp;amp;ref=nf"&gt;entry&lt;/a&gt; :)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/5555222417/" title="IMG_7833 by twak, on Flickr"&gt;&lt;img alt="IMG_7833" height="333" src="http://farm6.static.flickr.com/5294/5555222417_1bef16d271.jpg" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;The best thing is that I'm funded by sicsa, a Scottish competitor to Epsrc!&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4312202256/" title="sicsa logo by twak, on Flickr"&gt;&lt;img alt="sicsa logo" height="165" src="http://farm5.static.flickr.com/4055/4312202256_cd07f282f7_z.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-974550628891018289?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/974550628891018289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2011/04/uk-epsrc-ict-pioneers.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/974550628891018289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/974550628891018289'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2011/04/uk-epsrc-ict-pioneers.html' title='uk epsrc ict pioneers'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm6.static.flickr.com/5052/5566033684_d126fde314_t.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-8868881609528711856</id><published>2011-04-11T11:07:00.012Z</published><updated>2011-12-17T19:43:28.427Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='publications'/><title type='text'>Interactive Architectural Modeling with Procedural Extrusions</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;ACM Transactions on Graphics, volume 30. issue 2. pages 14:1-14:15.2011&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;[ &lt;a href="http://dx.doi.org/10.1145/1944846.1944854"&gt;doi &lt;/a&gt;| &lt;a href="http://www.dcs.gla.ac.uk/people/personal/tkelly/bits/proc_ex_life/tog.pdf"&gt;pdf&lt;/a&gt; | &lt;a href="http://www.dcs.gla.ac.uk/~tkelly/bits/procex.pptx"&gt;pptx&lt;/a&gt; | &lt;a href="http://code.google.com/p/siteplan/"&gt;code&lt;/a&gt; | &lt;a href="http://dcs.gla.ac.uk/~tkelly/citysculpt/siteplan/launch.jnlp"&gt;run&lt;/a&gt; ]&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; border-collapse: collapse;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; border-collapse: collapse;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate;"&gt;We present an interactive procedural modeling system for the exterior of architectural models. Our modeling system is based on procedural extrusions of building footprints. The main novelty of our work is that we can model difficult architectural surfaces in a procedural framework, e.g. curved roofs, overhanging roofs, dormer windows, interior dormer windows, roof constructions with vertical walls, buttresses, chimneys, bay windows, columns, pilasters, and alcoves. We present a user interface to interactively specify procedural extrusions, a sweep plane algorithm to compute a two-manifold architectural surface, and applications to architectural modeling.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3955170096/" title="house of horrors by twak, on Flickr"&gt;&lt;img alt="house of horrors" height="400" src="http://farm4.static.flickr.com/3248/3955170096_e0942cef03.jpg" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Example-video (not finished in time to be refereed...)&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/KE8vOvlwuVs?rel=0&amp;amp;hd=1" title="YouTube video player" width="480"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe class="scribd_iframe_embed" frameborder="0" height="500" id="doc_24987" ratio="0.772727272727273" scrolling="no" src="http://www.scribd.com/embeds/49207598/content?start_page=1&amp;amp;view_mode=list&amp;amp;access_key=key-243x8xky5n9iaszyiwdv" width="100%"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-8868881609528711856?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/8868881609528711856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2011/04/interactive-architectural-modeling-with.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/8868881609528711856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/8868881609528711856'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2011/04/interactive-architectural-modeling-with.html' title='Interactive Architectural Modeling with Procedural Extrusions'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3248/3955170096_e0942cef03_t.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-5891907468393643144</id><published>2011-04-04T10:16:00.004Z</published><updated>2011-04-04T10:32:54.915Z</updated><title type='text'>3d environment construction times</title><content type='html'>I've been having real difficulty trying to find real-world figures for how long it takes artists to create 3d environments. Does anyone out there have experience creating these environments regularly?&lt;br /&gt;&lt;br /&gt;The kind of information I'm looking for:&lt;div&gt;&lt;ul&gt;&lt;li&gt;an image of the constructed scene, &lt;/li&gt;&lt;li&gt;the tools used (Maya, Max, Sketchup...),&lt;/li&gt;&lt;li&gt;an estimate of the number of hours using each tool.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;These figures would really help the motivation of procedural tools for the rapid construction of cities. With a bit of luck (and a few more years research...) creating virtual repetitive architecture manually will be a thing of the past.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3899225480/" title="now thats what I call architecture by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3452/3899225480_36c148fdf1.jpg" width="500" height="333" alt="now thats what I call architecture" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-5891907468393643144?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/5891907468393643144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2011/04/3d-environment-construction-times.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/5891907468393643144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/5891907468393643144'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2011/04/3d-environment-construction-times.html' title='3d environment construction times'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3452/3899225480_36c148fdf1_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-696515542901804007</id><published>2011-03-28T17:55:00.010Z</published><updated>2011-11-27T13:07:30.486Z</updated><title type='text'>some videos of procedural extrusions.</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Renders finished on some around procedural extrusions last week (&lt;a href="http://twak.blogspot.com/2011/04/interactive-architectural-modeling-with.html"&gt;paper&lt;/a&gt;). This is a technique for the procedural modeling of buildings. A fade of the same set of 6,000 footprints synthesized from Atlanta.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/KE8vOvlwuVs?rel=0" title="YouTube video player" width="480"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;A natural step is a perturbation of the plan of a building at a height. By growing the shape of the step, we create more robust geometry:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/BH-C-P5WpAQ?rel=0&amp;amp;hd=1" title="YouTube video player" width="480"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;We can use this footprint to grow features of the building, such as this dormer window. The important point here, is that even though we ask the algorithm to position the step in strange places, the result is always "quite" valid and "quite" architectural. The result is always a well-formed mesh.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/B-EVK8zfa6M?rel=0" title="YouTube video player" width="480"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;We can animate the floorplan to create a wide range of architectural forms.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/eMr7voMHIE0?rel=0&amp;amp;hd=1" title="YouTube video player" width="480"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;And if you spend more time using the interactive tool, you can make some really intricate examples (all modelled from photos/plans).&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/Z0CKLCqI7uQ" width="480"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;These are the stretchy elements that we stick onto the architectural shells when we're done - (note that you should only let them stretch in certain ways)&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/k5ioEuB24zs" width="480"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Shoddy rendering for Siggraph-fast forward video:&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/vhX79At0vng" width="480"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-696515542901804007?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/696515542901804007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2011/03/some-videos-of-procedural-extrusions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/696515542901804007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/696515542901804007'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2011/03/some-videos-of-procedural-extrusions.html' title='some videos of procedural extrusions.'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/KE8vOvlwuVs/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-7849358354083110148</id><published>2011-02-20T19:10:00.015Z</published><updated>2011-03-30T23:20:14.373Z</updated><title type='text'>how to publish a paper</title><content type='html'>In celebration of finally getting my work into a decent journal, I decided to have a look back to see how the paper developed over time.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;City Architecture Generation ( Master's Dissertation 2006 | &lt;a href="http://www.dcs.gla.ac.uk/people/personal/tkelly/thesis.pdf"&gt;pdf&lt;/a&gt; )&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Way back in the past I was doing a degree at bristol, and wrote my dissertation on an interesting concept for architecture generation. This original document is very flawed, and the results quite rough, however the code (just about) worked. I seem to remember it being a few months work. I got a decent enough grade for it at the time, so was happy enough.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The important thing is it gave me enough of an insight into a new &amp;amp; useful technique. I went off into work in the real world for a few years, and thought about the project again every now and then. Then I decided to head back to academia, and start over again with a PhD...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The fun results are on page 75.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;object id="doc_673349165732546" name="doc_673349165732546" height="600" width="100%" type="application/x-shockwave-flash" data="http://d1.scribdassets.com/ScribdViewer.swf" style="outline:none;"&gt;  &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="FlashVars" value="document_id=49207884&amp;amp;access_key=key-2liv02z4tsz1xe56i4sk&amp;amp;page=1&amp;amp;viewMode=list"&gt;   &lt;embed id="doc_673349165732546" name="doc_673349165732546" src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=49207884&amp;amp;access_key=key-2liv02z4tsz1xe56i4sk&amp;amp;page=1&amp;amp;viewMode=list" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="600" width="100%" wmode="opaque" bgcolor="#ffffff"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Extrusion Skeleton for Procedural Architectural Modeling ( Eurographics 2009 | &lt;/b&gt;&lt;a href="http://www.dcs.gla.ac.uk/people/personal/tkelly/bits/proc_ex_life/euro.pdf" style="font-weight: bold; "&gt;pdf&lt;/a&gt;&lt;b&gt; ) &lt;/b&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;&lt;i&gt;rejected&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;For the 9 months or so, I messed around with a few systems, and finally got the straight-skeleton system working to the point where I was reasonably happy with it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;We decided a couple of weeks before the deadline to really go for the Eurographics submission.  We made great progress in two weeks, but the reviewers rightly rejected it as being sloppy.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;object id="doc_289779526971999" name="doc_289779526971999" height="600" width="100%" type="application/x-shockwave-flash" data="http://d1.scribdassets.com/ScribdViewer.swf" style="outline:none;"&gt;  &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="FlashVars" value="document_id=49207572&amp;amp;access_key=key-202lxjtx78r7qu51s33e&amp;amp;page=1&amp;amp;viewMode=list"&gt;   &lt;embed id="doc_289779526971999" name="doc_289779526971999" src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=49207572&amp;amp;access_key=key-202lxjtx78r7qu51s33e&amp;amp;page=1&amp;amp;viewMode=list" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="600" width="100%" wmode="opaque" bgcolor="#ffffff"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;The summary we got back from CGF:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;"The paper presents a simple interactive procedural method to create a variety of architectural shapes. The core of the method generalizes the existing ''straight skeleton'' algorithm for computing roof shapes, by (a) allowing different slopes on each edge of the input polygon, and (b) by allowing edits on the polygon ''during'' the algorithm. An easy to use interface is proposed. &lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;The reviewers consider that this paper proposes a number of incremental but very useful additions to existing methods in the area. These additions are carefully selected and blend well together, the method is nicely integrated in a functional interactive systems and produces impressive results. &lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Unfortunately, the paper has major problems: the presentation is confusing, the algorithmic description is sloppy and contains several errors, and the method has not been carefully evaluated.  Cleaned up, the reviewers think this paper could be useful to the community. However the required revisions are major and the paper cannot be considered &lt;/i&gt;&lt;i&gt;for the Eurographics conference."&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Other comments:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;"I definitely miss references to interactive sketching systems, such as SESAME and Sketch-up, and to have a discussion on this issues. Since the main focus of the paper is on interactive design, the real comparison is with interactive systems, not only grammar-based systems."&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;"The proposed extensions to straight skeletons seem to be of limited novelty. Some of the extensions (like multiple footprints and the avoidance of ''angle restrictions'') appear to be done before. Other extensions (multiple wall profiles, plan edits and robust computation) might be novel. However, they are mostly straightforward and represent only a minor contribution for a Eurographics paper."&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;"This is actually very good except where it isn't."&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;b&gt;Interactive Architectural Modeling with Procedural Extrusions ( Siggraph Asia 2010 | &lt;a href="http://www.dcs.gla.ac.uk/people/personal/tkelly/bits/proc_ex_life/asia.pdf"&gt;pdf&lt;/a&gt; ) &lt;span class="Apple-style-span"&gt;&lt;i&gt;rejected&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The next deadline we wanted to try for was Sigg-Asia. The big step here was getting it to work over a large input set to make the pretty first figure. We made an attempt to add some comparisons to existing modeling techniques. As ever I ran out of time trying to submit, and didn't manage a video (the editor kept crashing at the last minute).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4602438414/" title="21 feet by twak, on Flickr"&gt;&lt;img src="http://farm2.static.flickr.com/1306/4602438414_db20282870_m.jpg" width="240" height="160" alt="21 feet" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the reviews I took a lot of heat for the lack of an evaluation and the picture of my co-author hidden in the paper. But the thing that really killed it was us pretending that we had a perfect geometric algorithm when there were (rare) situations where it would fail.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;object id="doc_459700181732584" name="doc_459700181732584" height="600" width="100%" type="application/x-shockwave-flash" data="http://d1.scribdassets.com/ScribdViewer.swf" style="outline:none;"&gt;  &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="FlashVars" value="document_id=49207552&amp;amp;access_key=key-g6yabxdjezi9p0asguq&amp;amp;page=1&amp;amp;viewMode=list"&gt;   &lt;embed id="doc_459700181732584" name="doc_459700181732584" src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=49207552&amp;amp;access_key=key-g6yabxdjezi9p0asguq&amp;amp;page=1&amp;amp;viewMode=list" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="600" width="100%" wmode="opaque" bgcolor="#ffffff"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Reviewer summary:&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;"1. The paper doesnt provides an algorithm in the proper sense of the word. You present a set of heuristics that works on a large set of models. This can be very useful from the modeling perspective as the user is in the loop to fix the degenerate results. Please try to make this clear early on, and in the review cycle we want to agree on this change in exposition style.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;2. In computational geometry the stress is to present provable algorithms. Hence, in many cases the algorithms end up complicated to implement to address various degenerate inputs. This is not the case for the modeling scenario where the user can update the inputs in case of failures. Again this distinction should be clear in the paper.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;3. Please remove figure 25, it weakens the paper.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;4. Please perform a proper evaluation. Take a large number 50-100 floor plans from some publicly available repository, and use your framework to come up with buildings there. It will be excellent if you can use google streetview or like to take existing building profiles and try to replicate them. In your rebuttal you already mentioned about cities where such complicated roof structures are common. We feel the work will have an important effect in this area, so we want to see this in a form that is easy to understand and judge."&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Other comments:&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;"&lt;/b&gt;You need to be very careful about using a single word or term for each concept: you can't have a priority queue that becomes a priority list; you can't have a wall-angle that becomes a weight, and so on. "&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;"I've suggested that the introduction should discuss an experiment that tests the generality of your system. Providing this support for your claim of a good working system --- support with solid factual evidence --- would be the best service you could possibly perform. The reviewers agreed that the way to do this is to take a collection of house-plans (for example, go to XXX.com"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"&gt;"&lt;span class="Apple-style-span" style="border-collapse: collapse; "&gt;The algorithm is interesting, but the scope is rather restricted. While it is true slanted roof structures and similar extrusions (figure 22) make the models realistic, but it is unclear if such a specialized and general algorithm is required. It may be sufficient to have a template based model. "&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;"Overall this paper presents a powerful system able to generate complex building geometry that can be edited interactively. My concerns are with the amount of manual effort that is needed and with how well all (most?) special cases are handled. The former is empirically shown to be reasonable - ok. The latter is more unclear."&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;"The main problem with this paper is in the GOAL -- not of the work, but of the paper itself."&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;"&lt;/b&gt;(I apologize for any typos or unclearness in these notes; I have wrist problems which make me not want to take the time to do any more editing than necessary.)"**&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Interactive Architectural Modeling with Procedural Extrusions ( Transactions on Graphics 2011 | &lt;a href="http://www.dcs.gla.ac.uk/people/personal/tkelly/bits/proc_ex_life/tog.pdf"&gt;pdf&lt;/a&gt; ) &lt;span class="Apple-style-span"&gt;&lt;i&gt;accepted&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We got an offer to publish our work in TOG after the Siggraph rejection, if I made the suggested corrections. This meant that I spent a lot of time on evaluation (playing with our application) - however when I was done I had a much better idea of the weaknesses and strengths of the system. I followed the suggestions of one of the previous reviews to use an online library of floor plans. In hindsight this was probably a mistake because:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Online libraries only seem to exist for plans without locations - and without interesting boundary constraints, many features of the project weren't appreciated.&lt;/li&gt;&lt;li&gt;The online library didn't give us copyright permission to also show the library of plan/images we used for the modeling process. The reviewers were able to see it, but we weren't able to publish them. Available &lt;a href="http://www.dcs.gla.ac.uk/people/personal/tkelly/bits/proc_ex_life/euro.pdf"&gt;here&lt;/a&gt; (40Mb).&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;There was also a lot of effort done to tighten up the technical writing in the middle of the paper. One challenge was to choose an appropriate depth of explanation - too deep and you end up explaining too much, too shallow and you invite many additional questions. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The other challenge was keeping the terminology consistent throughout(!). This becomes non-trivial after so many paper drafts, and the fact the implementation (the source code) uses an entirely different set of terminology.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;object id="doc_743945274296832" name="doc_743945274296832" height="600" width="100%" type="application/x-shockwave-flash" data="http://d1.scribdassets.com/ScribdViewer.swf" style="outline:none;"&gt;  &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="FlashVars" value="document_id=49207598&amp;amp;access_key=key-243x8xky5n9iaszyiwdv&amp;amp;page=1&amp;amp;viewMode=list"&gt;   &lt;embed id="doc_743945274296832" name="doc_743945274296832" src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=49207598&amp;amp;access_key=key-243x8xky5n9iaszyiwdv&amp;amp;page=1&amp;amp;viewMode=list" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="600" width="100%" wmode="opaque" bgcolor="#ffffff"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course, there are always new problems that come up with the concepts when you keep digging, one is detailed in a &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html"&gt;previous blog post&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;Just for reference, here are the edits made by the ACM copy editors before the final article was drawn up. Apparently paragraphs should start on the same line, and never use "Fig. X" in the body of text, always "Figure X":&lt;br /&gt;&lt;br /&gt;&lt;iframe class="scribd_iframe_embed" src="http://www.scribd.com/embeds/51939554/content?start_page=1&amp;amp;view_mode=list&amp;amp;access_key=key-1zeznmnkwo97rod7hpkh" height="true" ratio="" scrolling="no" id="doc_23572" width="100%" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Finally I would like to thank the many reviewers who helped us scrape this paper together. Especially the few guys that stood up for this work! It's been an exercise in learning how these things are really done, and how they turn out under time pressure. Hopefully the next one will be a little easier on us all :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;** - never say this in anonymous reviews, it leads to whoever-you-are being known as "wrist guy" for the months while we redraft the paper.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-7849358354083110148?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/7849358354083110148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2011/02/how-to-publish-paper.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7849358354083110148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7849358354083110148'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2011/02/how-to-publish-paper.html' title='how to publish a paper'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1306/4602438414_db20282870_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-20730537852286497</id><published>2011-02-09T20:03:00.009Z</published><updated>2011-02-10T12:43:18.674Z</updated><title type='text'>fixing moodle</title><content type='html'>&lt;div&gt;As a PhD student I take pride in doing a job properly. And putting more effort into avoiding work than doing it in the first place. Therefore I am proud to present the sketch of a method to download a (java) assignment from the University of Glasgow's moodle site, run it against a marker, and create a pdf file (via &lt;a href="http://www.latex-project.org/"&gt;latex&lt;/a&gt;) of the output for marking.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This process isn't easy or well polished. It will take a bit of hacking to get it to work for you. But it'll probably save you time over a few weeks of marking. It's hard wired to work on the first assignment for &lt;a href="http://dcs.gla.ac.uk/~pat/ads2/exercises.html"&gt;Patrick's ADS2 course&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;From &lt;a href="http://www.gla.ac.uk/services/moodle/collegeofscienceandengineering/"&gt;moodle&lt;/a&gt;, we need two things. The first is a class list, log into the moodle course, view grades, and set the "visible groups" to your tutor group. Then download the webpage (save as...) as &lt;span class="Apple-style-span"&gt;class.php&lt;/span&gt; in a folder.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/5431852632/" title="Screenshot-3 by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5256/5431852632_f3f0c4fcff.jpg" width="500" height="296" alt="Screenshot-3" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.flickr.com/photos/twak/5431852632/" title="Screenshot-3 by twak, on Flickr"&gt;&lt;/a&gt;The second thing you need are all the files. To grab these, use the tool &lt;a href="http://www.downthemall.net/"&gt;Download them All&lt;/a&gt;! for the &lt;a href="http://www.mozilla.com/en-US/firefox/"&gt;firefox&lt;/a&gt; web browser. Navigate to the page assignment page, and click "view 999 submitted assignments", and use the "show submitted assignments" field (at the bottom) to put all the submissions on one page.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now we start Download them all:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/5431852642/" title="Screenshot-ADS2: Exercise 1: A Small Face Book - Mozilla Firefox by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5257/5431852642_7fb04ffeb5.jpg" width="500" height="162" alt="Screenshot-ADS2: Exercise 1: A Small Face Book - Mozilla Firefox" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.flickr.com/photos/twak/5431852642/" title="Screenshot-ADS2: Exercise 1: A Small Face Book - Mozilla Firefox by twak, on Flickr"&gt;&lt;/a&gt;And we're given the following box. We need to download all &lt;span class="Apple-style-span"&gt;.java&lt;/span&gt; and (sometimes) &lt;span class="Apple-style-span"&gt;.zip&lt;/span&gt; files for this assignment, so we set the "fast-filtering" field accordingly. We also want to specify the file-names to include the url, so we set the "renaming mask" to &lt;span class="Apple-style-span"&gt;*curl*_*name*.*ext*&lt;/span&gt;. Then click start, and wait for the magic.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/5431852636/" title="Screenshot-4 by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5291/5431852636_d778419649.jpg" width="500" height="441" alt="Screenshot-4" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If any students have zipped their work, you currently have to unzip it and find the file they should have submitted manually. The name it using the moodle naming convention (obvious from the other files in the directory!).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.flickr.com/photos/twak/5431852636/" title="Screenshot-4 by twak, on Flickr"&gt;&lt;/a&gt;We now setup the java program and run it. The code is here (&lt;a href="http://www.dcs.gla.ac.uk/people/personal/tkelly/bits/demoodlifier/Tidy.java"&gt;file&lt;/a&gt;, &lt;a href="http://paste.org/pastebin/view/28653"&gt;paste.org&lt;/a&gt;), you need to change:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;class.php&lt;/span&gt; to whatever the class-list file you downloaded is called&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;"/home/twak/Downloads/ads2/fims.moodle.gla.ac.uk/file.php/158/moddata/assignment/50"&lt;/span&gt;to wherever the assignments were downloaded to&lt;/li&gt;&lt;li&gt;setup a subfolder with the assignment in it. I've called it "&lt;span class="Apple-style-span"&gt;./problem"&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;"javac -cp problem problem/FBook.java"&lt;/span&gt; to whatever command you use to compile their code with&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;"java  -cp problem" Marker&lt;/span&gt; to whatever command you want to run on the code&lt;/li&gt;&lt;li&gt;you may want to edit "&lt;span class="Apple-style-span"&gt;pdflatex output.tex"&lt;/span&gt; to your favourite latex command to create the final output.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Issues with the script:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Quite untested at the moment. Use at your own risk.&lt;/li&gt;&lt;li&gt;Assignments not run in a sandbox - malicious code can blow your system away.&lt;/li&gt;&lt;li&gt;The script doesn't currently truncate overly-long outputs. I've had students work go into infinite loops when attached to a printer before...&lt;/li&gt;&lt;li&gt;It should really be a single greasemonkey script to run...but this would have taken more effort.&lt;/li&gt;&lt;li&gt;For a script that's used on the Advanced Data Structures and Software Engineering courses, the code is really awful.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-20730537852286497?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/20730537852286497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2011/02/fixing-moodle.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/20730537852286497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/20730537852286497'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2011/02/fixing-moodle.html' title='fixing moodle'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm6.static.flickr.com/5256/5431852632_f3f0c4fcff_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-3754007434684541420</id><published>2011-01-21T12:49:00.007Z</published><updated>2011-01-21T13:11:48.189Z</updated><title type='text'>straight skeleton for polygon simplification</title><content type='html'>We can simplify shapes using the straight skeleton:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/5375360132/" title="simplify_outlines by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5286/5375360132_3749bfb4e2.jpg" width="500" height="142" alt="simplify_outlines" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;If we grow (offset) the polygon (a) we remove reflex corners(c), and if we shrink it we remove convex corners(b) (for lack of a better phrase). If we apply both offsets in sequence we have a fairly robust polygon simplification tool (d).&lt;br /&gt;&lt;br /&gt;There are several drawbacks with the straight skeleton as a simplification tool. It does not introduce new edges to the polygon, so polygons that do not contain an edge with a good approximation for the local region are not simplified well. "Very" reflex corners have a disproportionate effect on the result. However this may be rectified using a variation of the &lt;a href="http://dx.doi.org/10.1007/978-3-540-30140-0_71"&gt;linear axis&lt;/a&gt;. The computational complexity is also higher than that of existing algorithms.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If we view the process as 3d roofs, we get the following diagrams for interior-offset, exterior offset and a combination of both:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://farm6.static.flickr.com/5088/5375357230_70a687b69c.jpg" width="500" height="230" alt="simplify" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;The advantages are that it is very conceptually simple, robust to any input shape and can effect genus change in the process of simplification. The weighted straight skeleton would also allow different weights to be applied to different edges. Perhaps this could be used to preserve particular features? The theory extends (easily?) into higher dimensions.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-3754007434684541420?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/3754007434684541420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2011/01/straight-skeleton-for-polygon.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/3754007434684541420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/3754007434684541420'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2011/01/straight-skeleton-for-polygon.html' title='straight skeleton for polygon simplification'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm6.static.flickr.com/5286/5375360132_3749bfb4e2_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-2857409801082475293</id><published>2011-01-18T17:37:00.018Z</published><updated>2011-11-26T08:34:40.753Z</updated><title type='text'>degeneracy in the weighted straight skeleton</title><content type='html'>The following is something I wrote for an internal progress report. It describes a variant of the weighted straight skeleton that allows inwards and outwards moving edges. It follows my thoughts on the subject until I get stuck. (It was created with &lt;a href="http://www.latex2html.org/"&gt;latex2html&lt;/a&gt;, which didn't do a very tidy job of conversion, sorry!). Other blog posts on the skeleton can be found &lt;a href="http://twak.blogspot.com/2009/10/skeleton-index-page.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" class="Apple-style-span"&gt;the straight skeleton&lt;/span&gt;&lt;p&gt;The straight skeleton (SS) is a 2d graph generated from an arbitrary polygon. Each of the edges of the polygon move towards the interior at a constant speed. Occasionally the topology of the polygon changes  as an edge shrinks to zero length, or similar.&lt;br /&gt;The movement of the corners of the polygon traces out the arcs (edges) of the graph. This 2d graph may be interpreted as a &lt;a href="http://www.ams.org/mathscinet-getitem?mr=1392429"&gt;3d &lt;span class="textit"&gt;roof&lt;/span&gt;&lt;/a&gt; to allow easy comparison between the standard, unweighted straight skeleton and the more complex weighted straight skeleton (WSS), introduced later. &lt;/p&gt;&lt;p&gt;In this section we introduce the SS using the roof model over the domain of real numbers. Later we will discuss an implementation that is robust over a floating point system.&lt;/p&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 14:&lt;/strong&gt;&lt;br /&gt;Straight skeleton terminology.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5366991573/" title="skel_terms by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5246/5366991573_94ba47b19d.jpg" width="500" height="159" alt="skel_terms" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;To distinguish between the under constrained term "polygon'' and a similar structure with additional constraints, we introduce a &lt;span class="textit"&gt;plan&lt;/span&gt;, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_terms"&gt;14&lt;/a&gt;. A plan is a  planar partition (a straight line planar embedding of a planar graph) that divides a plane into a finite &lt;span class="textit"&gt;inside&lt;/span&gt; and infinite &lt;span class="textit"&gt;outside&lt;/span&gt; regions. &lt;/div&gt;&lt;/div&gt;&lt;p&gt;A plan has corners and edges, these are embedded in a plane parallel to the xy-plane (the ground plane), so that all corners of a plan have the same z (height) value. We require that the boundaries of a plan are a non-intersecting collection of oriented polygons. The inside is on the left-hand side of each oriented edge. The loops of edges are typically oriented counter-clockwise, but polygons describing holes are oriented clockwise. Additional bounded regions may be recursively located inside a hole. &lt;/p&gt;&lt;p&gt;A sweep plane that rises vertically from the &lt;span class="textit"&gt;input plan&lt;/span&gt;. This sweep plane defines an &lt;span class="textit"&gt;active plan&lt;/span&gt; that defines the cross sections of the output. The output of the system is a series of &lt;span class="textit"&gt;faces&lt;/span&gt; that make up the 3d output, the &lt;span class="textit"&gt;shell&lt;/span&gt;. The edges of the faces are named &lt;span class="textit"&gt;arcs&lt;/span&gt; after &lt;a href="http://www.ams.org/mathscinet-getitem?mr=1392429"&gt;Aichholzer et al.&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;As the SS is constructed, the sweep plane rises and the active plan shrinks. In the unweighted straight skeleton, all the edges move with a constant speed towards the interior of the polygon. The movement of each edge over the active plan defines a plane, the &lt;span class="textit"&gt;direction plane&lt;/span&gt; in 3d. Each face lies in one of these direction planes. At all times in this process we must ensure that the active plan remains remains &lt;span class="textit"&gt;well formed&lt;/span&gt;. That is:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The enclosed region remains to the left of every directed edge.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;No edge intersects another edge, except at the corners.&lt;/li&gt;&lt;li&gt;Every enclosed region is has a finite, non-zero area.&lt;/li&gt;&lt;li&gt;There may be a finite number of enclosed regions, that is zero or more.&lt;/li&gt;&lt;li&gt;No parallel, overlapping edges exist .&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;To ensure these properties remain intact, we detect when more than two edges intersect and we make topological changes to the active plan. Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_inverted"&gt;15&lt;/a&gt; shows that if we do nothing, the plan may becomes badly formed. We call these &lt;span class="textit"&gt;events&lt;/span&gt;, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_intro"&gt;16&lt;/a&gt;. &lt;span class="textit"&gt;Edge events&lt;/span&gt; occur as the length of an edge shrinks to zero. When an edge shrinks to zero the direction planes defined by three consecutive (linked by corners) edges collide (Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_intro"&gt;16&lt;/a&gt;, 3). &lt;span class="textit"&gt;Split events&lt;/span&gt; take place when two adjacent direction planes, and one non adjacent direction plane collide (Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_intro"&gt;16&lt;/a&gt;, 2). These split the region bounded by the active plan into two parts.&lt;br /&gt;&lt;/p&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 15:&lt;/strong&gt;&lt;br /&gt;Left: the anti-clockwise oriented input plan. Middle: The active plan at a split event (orange). Right: Without a split event, a portion of the active plan become badly formed. There are self-intersections at a and b, and the red region is defined by a clockwise loop; That is, the edges define an unbounded region outside the red area.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5366991271/" title="skel_inverted by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5201/5366991271_5421176c36.jpg" alt="skel_inverted" width="500" height="157" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 16:&lt;/strong&gt;&lt;br /&gt;Left: the straight skeleton is given by arcs (blue lines) tracing the verticies of a shrinking polygon (black lines). Each edge moves with a constant speed towards the interior of the polygon, and as it does the topology of the polygon changes in several different ways (dark green lines), during &lt;span class="textit"&gt;events&lt;/span&gt;. Right 1-3: The skeleton is calculated as a sequence of these events. Right 4: We can view the skeleton as a 3d structure with polygonal faces. The final skeleton, without the intermediate shrinking stages is shown at the bottom of the figure.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5367603280/" title="skel_intro by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5203/5367603280_71ebe383ce.jpg" alt="skel_intro" width="500" height="308" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 17:&lt;/strong&gt;&lt;br /&gt;Split (b) and edge events (a) that occur as a polygon shrinks.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5366992785/" title="skel_unweighted_intro by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5128/5366992785_6c6cb096ae.jpg" alt="skel_unweighted_intro" width="500" height="205" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style=""&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;The local changes that take place during an event must be consistent on a global scale.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The plan must remain well formed globally.&lt;/li&gt;&lt;li&gt;As the edges involved in the event continue to move across the active plan immediately after the event, they must not intersect each other.  (This is made easier by the sector property introduced later.)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Given a ``random'' or irregular input plan these two (split and edge) events are the only features we are likely to see, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_complex_three_event"&gt;18&lt;/a&gt;. This is because the skeleton of irregular polygons do not have events where more than 3 faces meet at one point. We can describe these in terms of the local area around the edge intersection point, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_unweighted_intro"&gt;17&lt;/a&gt;. Here we see the local active plan region before, during and after edge events (a), split events (b) as well as peaks (c &amp;amp; d).&lt;br /&gt;&lt;/p&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;br /&gt;&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5366992407/" title="wss_complex_three_event by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5161/5366992407_96d9d52e2d.jpg" alt="wss_complex_three_event" width="500" height="343" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;Figure 18&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style=""&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;However in contrived &lt;span class="textit"&gt;degenerate&lt;/span&gt; situations, we may see more than three edges colliding at a point, the previous work leaves these types of line intersection badly defined, Sec. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#sec:antosfp"&gt;3.2&lt;/a&gt;. We may see several connected edges collapsing, (Fig &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_unweighted_intro_2"&gt;19&lt;/a&gt;, a) or multiple split-like events occurring at the same time (Fig &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_unweighted_intro_2"&gt;19&lt;/a&gt;, b). We note that in all situations, the region collapsing at any time is locally topologically equivalent to a disc immediately before the event. The disc may be bounded on some sides, and unbounded on others. This collapsing topology in SS events is always a disc as other features that may create a higher genus enclosed shape around the event could only away recede from the event as the sweep plane rises.&lt;br /&gt;&lt;/p&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;br /&gt;&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5367604522/" title="skel_unweighted_intro_2 by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5282/5367604522_46253cb791.jpg" alt="skel_unweighted_intro_2" width="500" height="370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;Figure 19:&lt;/span&gt; In degenerate situations, more than three edges will collapse at one&lt;br /&gt;time (a,b &amp;amp; e). We also note that sometimes the active plan collapses to a loop&lt;br /&gt;of two (c,e &amp;amp; e). We show these coincident edges as curved lines, with asterisks.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Later we will describe a &lt;span class="textit"&gt;general intersection event&lt;/span&gt; which combines edge and split events, as well as the more general situations.&lt;/div&gt;&lt;p&gt;&lt;br /&gt;Fig &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_unweighted_intro_2"&gt;19&lt;/a&gt;, c,d and e, shows an example of the active plan becoming a region with only two edges and zero area. A more complete example is shown in &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_loop_two"&gt;20&lt;/a&gt;. After all the events at a certain height parallel edges may cause the active plan to become partially or entirely composed of these zero-area regions. We resolve this, following &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CBoQFjAA&amp;amp;url=http%3A%2F%2Fwww.dma.fi.upm.es%2Fmabellanas%2Ftfcs%2Fskeleton%2Fhtml%2Fdocumentacion%2Fstraight%2520skeletons%2520implementation.pdf&amp;amp;rct=j&amp;amp;q=felkel%20straigth%20skeleton&amp;amp;ei=fRs3TZ-xKoK6hAeNtpzsAg&amp;amp;usg=AFQjCNF1aQOIfCGsyvllRB7bAPzdvNaUOQ&amp;amp;sig2=UU6uSeUx_cFKOdmEUr5m_A&amp;amp;cad=rja"&gt;Felkel et al.&lt;/a&gt;, by using the &lt;span class="textit"&gt;loop of two&lt;/span&gt; rule. Whenever parallel edges are adjacent before an event we ensure that after the event they are connected together, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_unweighted_intro_2"&gt;19&lt;/a&gt;, c,d and e, ``during''. After creating such an connection we then check the loop to see if it has only 2 edges if so it is removed from the active plan, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_unweighted_intro_2"&gt;19&lt;/a&gt;, ``after''. This ensures a global consistency of the plan, given only event processing on a local information.&lt;br /&gt;&lt;/p&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 20:&lt;/strong&gt;&lt;br /&gt;A more complex example of a straight skeleton, left, that creates a zero area plan, right. Note that the curved line segments are in reality straight, but drawn curved to represent the topology.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5367603854/" title="skel_loop_two by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5009/5367603854_debc713f34.jpg" alt="skel_loop_two" width="500" height="269" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;Another interesting case occurs when adjacent edges in the active plan become consecutive, the &lt;span class="textit"&gt;parallel consecutive edge&lt;/span&gt; (PCE) problem. Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_linear_ambig"&gt;21&lt;/a&gt; demonstrates such a case. Existing &lt;a href="http://www.ams.org/mathscinet-getitem?mr=1392429"&gt;work&lt;/a&gt; leaves it undefined as to whether two edges that become colinear at a later point in the execution of the algorithm create a single face (the &lt;span class="textit"&gt;merge&lt;/span&gt; solution), or remain multiple faces (the &lt;span class="textit"&gt;separate solution&lt;/span&gt;. It is interesting to note that the same work seems to exclude such PCE in the input, however there is no easy way to tell if parallel edges will become consecutive as the skeleton is constructed. By symmetry we would expect to see PCEs in the input computed using the same solution.&lt;br /&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 21:&lt;/strong&gt;&lt;br /&gt;Several borderline cases where we may wish define more rigorously what constitutes an edge and what constitutes a face, the PCE problem. Left: The merge rule, middle: the separate rule, right: when there are PCE in the input do we apply the merge or separate rule?&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://www.flickr.com/photos/twak/5366990425/" title="skel_linear_ambig by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5205/5366990425_a656ee711e.jpg" alt="skel_linear_ambig" width="500" height="135" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;If two PCE are combined using the separate rule (Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_linear_ambig"&gt;21&lt;/a&gt; a, in contrast to b) then the assertion that every input edge creates a face is correct, but then it is non trivial to describe this new arc between these two adjacent faces. We could define a special case for this situation, which defines the vertex to move perpendicularly to the edges involved, but this seems inelegant. However if we apply the merge rule (Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_linear_ambig"&gt;21&lt;/a&gt; b) then the assertion that one edge becomes one face is wrong.&lt;br /&gt;&lt;br /&gt;We can generalise the split and edge events into a &lt;span class="textit"&gt;generalised intersection event&lt;/span&gt; (GIE). There is no particular reason that these events must be solved in this manner - many other ways to ensure the plan remains well formed can be imagined - however the GIE is consistent with the rules for the active plan, and with the intuition that the active plan always shrinks.&lt;br /&gt;&lt;br /&gt;We begin by defining &lt;span class="textit"&gt;chains&lt;/span&gt; of edges that are involved in an event, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_chains"&gt;22&lt;/a&gt;. A chain is a list of consecutive edges that are colliding at the event. They are ordered corresponding to the edge's direction. These form the partial boundary to our possibly bounded topological disc region of the active plan that is collapsing at the event.&lt;br /&gt;&lt;/p&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 22:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Two regions of active plans corresponding to Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_unweighted_intro_2"&gt;19&lt;/a&gt; b on the left and Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_unweighted_intro_2"&gt;19&lt;/a&gt; a on the right. We can group the edges involved in an event into chains (red, yellow and blue edges) by asking which edges are  consecutive.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5367604838/" title="skel_chains by twak, on Flickr"&gt;&lt;img style="width: 322px; height: 136px;" src="http://farm6.static.flickr.com/5207/5367604838_bee6dde901.jpg" alt="skel_chains" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 23:&lt;/strong&gt;&lt;br /&gt;As three chains approach an event (a, orange), we can imagine their eventual topology by viewing the active plan if no event takes place (c). We observe that the last edge in the previous chain and the first edge in the following chain become adjacent, also that every chain is split into two (e).&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5366991789/" title="skel_gie_intro by twak, on Flickr"&gt;&lt;img style="width: 424px; height: 216px;" src="http://farm6.static.flickr.com/5164/5366991789_432d8f8ea5.jpg" alt="skel_gie_intro" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;In the case of the SS we can order the chains themselves around the event's location, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_gie_intro"&gt;23&lt;/a&gt; d. That is the chains are ordered in a cyclic list. Immediately before the event the location of the event is always within the region bounded by the active plan. We can note that after an event the last edge in the preceding chain, and the first edge in the following chain become adjacent, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_gie_intro"&gt;23&lt;/a&gt; c and e.&lt;br /&gt;&lt;p&gt;Therefore to process a GIE:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="textit"&gt;Intra chain step:&lt;/span&gt; Within each chain, any edges in the middle (not the first or the last edge in a chain) shrink to 0-length and are removed from the active plan. This leaves only chains of length one or two remain.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="textit"&gt;One chain step:&lt;/span&gt; Chains of 1 edge are split at the location of the event. All chains are now of length 2.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="textit"&gt;Inter chain step:&lt;/span&gt; We connect adjacent chains in the cyclic list, that is we connect the start of the last edge in the previous chain to the end of the first edge in the following chain. This splits each chain in it's middle. All chains are still of length two.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="textit"&gt;Loops of two step:&lt;/span&gt; Regions of the active plan defined only by a polygon with two edges (of zero area) are removed from the active plan.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="textit"&gt;PCE step:&lt;/span&gt; We resolve newly parallel consecutive edges according to the merge or separate solutions.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;the weighted straight skeleton&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The weighted straight skeleton (WSS) is a variation of the straight skeleton. Each edge is allowed to move with an independent speed towards the interior or exterior of the bounded region as the sweep plane rises. As I hope later portions of this document will prove, the WSS is a useful tool for a number of different modeling applications. The WSS lies at the heart of the procedural extrusion modeling system introduced in Sec. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#sec:proceduralextrusions"&gt;7.3&lt;/a&gt;.&lt;br /&gt;&lt;p&gt;The construction of the WSS is identical to the SS for nearly all events. There are, however, a number of cases that arise that are poorly defined. These lead to the conclusion that there are a large class of WSS-like constructions which are similar, except in their behaviour when certain degenerate events arise. We have already seen one example in the case of the SS, the parallel consecutive edge situation, which can be solved using either the merge or separate rules. These &lt;span class="textit"&gt;degenerate cases&lt;/span&gt; appear in two classes - &lt;span class="textit"&gt;line degeneracies&lt;/span&gt;, of which the PCE is one, and &lt;span class="textit"&gt;point degeneracies&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Although degenerate cases do not occur frequently, it is hard to defend the use of the WSS when a complete algorithm for all possible plans cannot be given.&lt;br /&gt;&lt;br /&gt;To enable independently weighted edges we must introduce another property of every input edge, theta, an angle which measures its slope towards the interior of the polygon. We use the terms angles and weights interchangeably. Because the edges may not move with infinitely fast speed, we limit theta such that -pi/2 is less than theta which is less than pi/2.&lt;br /&gt;&lt;/p&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 24:&lt;/strong&gt;&lt;br /&gt;In the WSS, every input edge is also associated with an angle that defines the slope of the associated face.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5366993463/" title="wss_terms by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5048/5366993463_bd49f13d1e.jpg" alt="wss_terms" width="500" height="207" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;The WSS enables many more shapes to be expressed. For example the active plan can grow, as well as shrink. This property means that certain WSS may not terminate when calculated, that is they continue to grow to an infinite area. It is very hard to determine if a given WSS will terminate if it contains any values of theta greater than 0, without attempting to calculate the skeleton itself. The shells of all possible WSS are are superset of all possible SS. The possible WSS events are also a superset of the SS events. Given a random input plan, we are likely to see only events involving three edges again. However the degenerate cases become much more intricate.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3&gt;&lt;span style="font-weight: bold;font-size:100%;"&gt;line degeneracies&lt;/span&gt;&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;The parallel consecutive edge problem of the SS, can again be observed in the WSS. This may occur in the same manner as the SS, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_linear_ambig"&gt;21&lt;/a&gt;. The edges which cause the degeneracy no longer need to parallel so there are a larger range of input plans that lead to PCEs in the active plan, Fig &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_linear_ambig_1"&gt;25&lt;/a&gt;.  This degenerate case arises when two (or more) neighbouring edges in the active plan become colinear on the same side of a region. This happens, for example, when edges previously separating the colinear edges are eliminated. We may also arrive in this situation if the input contains PCEs.&lt;br /&gt;&lt;/p&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 25:&lt;/strong&gt;&lt;br /&gt;A plan that leads to a PCE, a. We must choose between the red (middle) or yellow (right) faces to dominate.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5366993057/" title="wss_linear_ambig_1 by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5043/5366993057_593a969654.jpg" alt="wss_linear_ambig_1" width="500" height="173" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;If the two neighbouring and colinear edges bound different sides of a region the output is an arc representing a ridge and the computation proceeds as normal, assured that at the opposite end of the ridge the two edges will collide again via the loop of two rule. This is not an degenerate event and we can distinguish the regular ``roof ridge'' case from an degenerate event by making use of the fact that we use oriented edges to describe a plan. When the edges have the same orientation (they bound the same side of a region) we are not able to determine the direction of the output arc, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_linear_ambig_1"&gt;25&lt;/a&gt;.&lt;br /&gt;&lt;p&gt;We may look to situations where the edges are nearly parallel for guidance. As the angle between the edges approaches 180 degrees from different directions, we get suddenly different results. Either one or the other edge will be predominant. This singularity means that the limiting case is of little help when resolving the degeneracy.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;The individual degenerate events need to be solved consistently from a global standpoint, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_linear_ambig_2"&gt;26&lt;/a&gt; middle. We suggest the approach of choosing one edge to replace the others, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_linear_ambig_2"&gt;26&lt;/a&gt; right. There are situations, similar to the SS PCE where multiple edges with the same weight at the same place, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_linear_ambig_3"&gt;27&lt;/a&gt;, left and right.&lt;br /&gt;&lt;/p&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 26:&lt;/strong&gt;&lt;br /&gt;A PCE that requires global coordination to resolve. If the event at a, and b do not coordinate, we may end up with non-enclosed regions on the plan (middle). We pick one edge globally to dominate, right.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5366991675/" title="wss_linear_ambig_2 by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5127/5366991675_7a8e012e47.jpg" alt="wss_linear_ambig_2" width="500" height="173" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This requirement for a global operation sets the WSS apart from the SS which can be defined using local operations, such as the loop of two rule.&lt;br /&gt;&lt;p&gt;Our strategy to resolve this degeneracy replaces the set of PCEs with a single edge. After collecting all colinear events which occur at a single height, we use a ordering derived from the angles of the edges to select one or more edges with the same angle, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_linear_ambig_2"&gt;26&lt;/a&gt; right, to replace the others. We then use the merge solution to combine these faces to one, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_linear_ambig_3"&gt;27&lt;/a&gt;, middle.Typical orders are volume maximising (lowest theta first in ordering) or minimising (highest theta first in ordering).&lt;br /&gt;&lt;/p&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 27:&lt;/strong&gt;&lt;br /&gt;A WSS PCE, that is very similar to the SS PCE, except that global coordination is again required. Middle: we use the merge solution to combine faces with equal angle. Right: There are many alternate consistent resolution systems apart from the one presented here, that may use variants of the separate solution.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5366993593/" title="wss_linear_ambig_3 by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5163/5366993593_ac0a51dcbf.jpg" alt="wss_linear_ambig_3" width="500" height="173" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This PCE resolution method is one of a large number of alternatives. We can imagine other schemes, Fig &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_linear_ambig_3"&gt;27&lt;/a&gt;, right, but find ours the simplest practical approach.&lt;br /&gt;&lt;h3&gt;&lt;span style="font-weight: bold;font-size:100%;"&gt;&lt;a name="SECTION00052200000000000000"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3&gt;&lt;span style="font-weight: bold;font-size:100%;"&gt;&lt;a name="SECTION00052200000000000000"&gt;point degeneracies&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/h3&gt;If all the edges are moving with a positive theta, the the SS GIE introduced in Sec. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#sec:wss_ss"&gt;4.1&lt;/a&gt; is still suitable. When this is the case, the collapsing area is again locally equivalent to the topological disc. However there are a complex set of increasingly degenerate events, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_example_topology"&gt;28&lt;/a&gt;, shows one possible event with many edges colliding. Here we can see chains of edges representing bounded, as well as unbounded areas, loops, and &lt;span class="textit"&gt;enclosed chains&lt;/span&gt; (Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_enclosing_chain"&gt;29&lt;/a&gt;), all colliding at one point. Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_union_vs_gie"&gt;39&lt;/a&gt; gives an example of the GIE failing to process an event.&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 28:&lt;/strong&gt;&lt;br /&gt;Left: The active plan just before an event. A complex set of chains are collide at a single event (orange). Right: after the intra-chain step and one-chain step we are left with a simplified topology. Note that the curved edges marked with an asterisk represent the topology of two colinear edges.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5366990625/" title="wss_example_topology by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5129/5366990625_b414dc6a05.jpg" alt="wss_example_topology" width="500" height="169" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 29:&lt;/strong&gt;&lt;br /&gt;We say the chain a encloses chain b, since b is on the interior relative to the intersection point (orange).&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5366990483/" title="wss_enclosing_chain by twak, on Flickr"&gt;&lt;img style="width: 300px; height: 208px;" src="http://farm6.static.flickr.com/5088/5366990483_256e90cbb5.jpg" alt="wss_enclosing_chain" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;We wish to have a consistent solution to these degenerate events, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_options"&gt;30&lt;/a&gt;. That is, the plan remains is well formed (as defined above) after the event, and remains well formed until the subsequent event takes place. We have been unable to find a elegant solution to the problem. What we present here is a ``engineered'' solution that is as consistent as possible with the existing definition of the unweighted skeleton. Other characteristics that we find desirable may include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Similarity to the straight skeleton.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Consistency with the straight skeleton when all angles are a positive constant.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Invariance to rotation of the plan. This is one of the properties of the straight skeleton, and it is desirable that it still holds.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 30:&lt;/strong&gt;&lt;br /&gt;Above: four chains collide at an event (orange). The desired plan topology after the event is unclear. We must keep the input edges (red) in the same locations to remain consistent with the remainder of the plan. Below: there are many possible options for the topology change at the event, we show the active plan a time after the event for clarity. Some using existing edges, others create new edges (initially these new edges are zero length, but subsequently grow) during the event.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5367602782/" title="wss_options by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5001/5367602782_f8271306ba.jpg" alt="wss_options" width="500" height="254" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;A set of arbitrary loops of edges in an active plan may form an event at a single location, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_loops_go"&gt;31&lt;/a&gt;, given the correct set of weights. Alternately the edges may be part of a larger event, as in Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_example_topology"&gt;28&lt;/a&gt;.&lt;br /&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 31:&lt;/strong&gt;&lt;br /&gt;Degenerate events can occur such that arbitrary loops (nested or unnested) can collapse to a point. This is due to the inclusion of weights in the skeleton.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5367604752/" title="wss_loops_go by twak, on Flickr"&gt;&lt;img style="width: 292px; height: 202px;" src="http://farm6.static.flickr.com/5130/5367604752_633e87b2c9.jpg" alt="wss_loops_go" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;To simplify this situation is that we can apply the SS intra chain step and one chain step, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_example_topology"&gt;28&lt;/a&gt; right, to remove edges that shrink to zero length. This includes the loops of edges; As they approach an event they shrink to zero length and area, and as such we may remove them from the active plan, and not consider them further in the event handling.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;We now define several descriptions of the WSS that help us. The major axis, approaching edges and the sector properties.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;The &lt;span class="textit"&gt;major axis&lt;/span&gt; defines the direction that all chains of length one take. There may be more than one chain of length one in the WSS, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_example_topology"&gt;28&lt;/a&gt;. We can show that it impossible to have more than one orientation of 1-chains in a single event, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_major_axis"&gt;32&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 32:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;At an event (orange) we may not have more than one orientation of chains of length one. If this were the case (above), there would be a point (red) which the 1-chains (green and blue) arrived at before the event. There would, therefore, have been another (red) event which combines these edges before they arrive at the first event (orange).&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5367603380/" title="wss_major_axis by twak, on Flickr"&gt;&lt;img style="width: 326px; height: 152px;" src="http://farm6.static.flickr.com/5163/5367603380_f1f3f1e5ce.jpg" alt="wss_major_axis" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;At an event all the edges involved in the collision approach the location at an angle defined by the edge's current orientation. Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_ordered_point"&gt;34&lt;/a&gt;, left, shows the orientation-ordered points for Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_example_topology"&gt;28&lt;/a&gt;. Any edges that do not approach according to their angle must have been removed by an earlier collision, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_ordered_point"&gt;34&lt;/a&gt;, right. This property is known as the GE approaching edges property. This refers to the fact that the angle between consecutive edges around an intersection is equal to, or greater than, zero.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;The situation that complicates further processing is approaching edges with the same angles. That is when two parallel edges, with different directions approach an event from the same side. The area between these edges approaches zero near the event, and should be removed by the loop of two rule. Therefore we remove these adjacent, parallel edges with the same orientation at the event, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_equal_approach_killer"&gt;33&lt;/a&gt;. After we remove these lines, we can say that the event has the G approaching edges property as all the angles between adjacent approaching edges are greater than zero.&lt;br /&gt;&lt;/p&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 33:&lt;/strong&gt;&lt;br /&gt;After the intra-chain step we remove all the zero area chains, giving us the topology shown (top, left). We show the chains just before the event for clarity. The black lines connect (asterisked) edges which would become adjacent and parallel at the event. We convert these pairs of edges into single chains as shown. We either use the interior bias (top right) or exterior bias (bottom left). After the corresponding events at remote sites, we will remove these chains using the loops of two rule (bottom right).&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5367603070/" title="wss_equal_approach_killer by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5203/5367603070_61a1429588.jpg" alt="wss_equal_approach_killer" width="500" height="335" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;To remove the edges, and keep the global-consistency property defined above, we must make a local choice, that is globally consistent, Fig. 33b. In a similar manner to the loop of two rule in the SS, we connect these pairs of adjacent lines. At the other end of these parallel edges, another event at the same height must make consistent choices, such that we never have two coincident, overlapping, edges in the active plan, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_equal_approach_killer"&gt;33&lt;/a&gt;.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/5370534528/" title="wss_linear_align by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5170/5370534528_9bf532d5c2.jpg" alt="wss_linear_align" width="500" height="410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Figure 33b:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style="text-align: center;"&gt; Given a plan (top left) that leads to a number of events (top middle, red blue and yellow circles) at the same height, which share a single edge (top middle, edge a), there are several possible solutions. We wish to avoid creating parallel, colinear edges that will immediately self-intersect again (top right), that is we must have a globally coordinated solution. Where there are an odd number of parallel edges approaching an intersection from the same direction we introduce two globally consistent options; Interior bias (bottom left) or exterior bias (bottom right).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This situation presents another choice. More than two approaching edges can have the same angle, Fig &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_equal_approach_killer"&gt;33&lt;/a&gt;. If there are an even number of such edges at one angle, the adjacent pairs of edges can be connected together. However if there are an odd number of edges, we have to choose which adjacent pairs to merge. Here we present two solutions:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="textit"&gt;interior bias:&lt;/span&gt; The pairs of lines surrounding an interior region of the plan are removed.&lt;/li&gt;&lt;li&gt;&lt;span class="textit"&gt;exterior bias:&lt;/span&gt; The pairs of lines surrounding an exterior region of the plan are removed.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 34:&lt;/strong&gt;&lt;br /&gt;As the chains of edges in the WSS approach the event (orange) they become ordered (left). If this were not the case (right), they would have intersected during an separate earlier event (red).&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5366992225/" title="wss_ordered_point by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5044/5366992225_6c353fc7e1.jpg" alt="wss_ordered_point" width="500" height="223" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;Another interesting fact can be observed by not handling an event, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_sector"&gt;35&lt;/a&gt;. If we ignore the rest of the plan away from the event, we may see that after the event the chains remain in the same configuration. That is the intersections of any edges remain at the same angle relative to the event location, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:skel_sector_2"&gt;36&lt;/a&gt;, until another event may occur. We can see that this is true by recalling that the edges move in a direction parallel to themselves at a constant angle. They also all pass through the event location at the event at the same time. Therefore any intersections between these lines also move with constant speed directly away from the event location, that is they keep the same angle. We refer to this property as the &lt;span class="textit"&gt;sector property&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;The sector property can also be observed before an event, but after any preceding events. We can therefore view it as the trivial statement "between events, no events occur''.&lt;br /&gt;&lt;/p&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 35:&lt;/strong&gt;&lt;br /&gt;The plan (green, blue and yellow areas) undergoes an event (orange). The sector property states that relative locations of the active plan corners remains unchanged after the event (after 1, through after 2).&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5367603982/" title="wss_sector by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5123/5367603982_d81144edcd.jpg" alt="wss_sector" width="500" height="134" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 36:&lt;/strong&gt;&lt;br /&gt;After an event (orange), any intersection between two edges, such as a corner, remains at constant angle, alpha, relative to the event location. This gives rise to the sector property.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5367602844/" title="skel_sector_2 by twak, on Flickr"&gt;&lt;img style="width: 330px; height: 191px;" src="http://farm6.static.flickr.com/5206/5367602844_0d8c391ab7.jpg" alt="skel_sector_2" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;At this point we (I!) am unclear how to handle the chains further. In the examples we have tried, there is always a solution that does not introduce any new (initially 0-length) edges into the active plan during the event, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_hand_examples"&gt;37&lt;/a&gt;. However there is no way that I have found of consistently calculating this solution topology. While some sort of search technique may give the correct answer, we feel that there is probably be a more elegant solution.&lt;br /&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 37:&lt;/strong&gt;&lt;br /&gt;Several example events and solutions that do not require 0-length edges to be introduced into the active plan. The chains (green dashed lines) are shown after the event (orange). The ideal solutions are shown in purple.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5366993263/" title="wss_hand_examples by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5202/5366993263_0e847c3349.jpg" alt="wss_hand_examples" width="500" height="285" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;&lt;a name="SECTION00052300000000000000"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;&lt;a name="SECTION00052300000000000000"&gt;multiple union approach&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;Therefore I present an engineered alternative system that does introduce zero length edges, the &lt;span class="textit"&gt;multiple union&lt;/span&gt; approach. We analyse the topology immediately after an event. Note that by the sector property, this topology of the chains is independent of time after the event. Therefore we define an ordering over the chains so that they can be added or subtracted from the &lt;span class="textit"&gt;output topology&lt;/span&gt;. We use 2d geometry operations to build up this topology.&lt;br /&gt;&lt;p&gt;We start by ordering the chains into enclosed &lt;span class="textit"&gt;levels&lt;/span&gt; of chains they contain before the event, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_numbered_union"&gt;38&lt;/a&gt;. The levels are enumerated from the location of the event, towards the deepest level. If the location (before the event) is inside (respectively outside) the region the output topology is initialised to be an inside (outside) region. Using the chains after the event, we iterate over the level, starting with the lowest-ordered level chains and add or subtract the union of all chains at that level them from the output topology, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_gie_example"&gt;40&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 38:&lt;/strong&gt;&lt;br /&gt;The levels of two different events. Note how the location of the event changes the definition of the levels. A chain's level is one if it is adjacent to the event, otherwise it is one higher than the enclosing chain.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5367602664/" title="wss_numbered_union by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5003/5367602664_e94b01574f.jpg" alt="wss_numbered_union" width="500" height="156" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Because the angles between consecutive chains around a point is always greater that zero, we can be sure that the output topology will be compatible with the global active plan.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;While this is one solution to this relatively rare problem, there are situations where the result isn't equivalent to the SS, and other quite strange topologies can occur, Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_union_vs_gie"&gt;39&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 39:&lt;/strong&gt;&lt;br /&gt;In the WSS, the GIE and the multiple union procedure  have different advantages. In the top example, the GIE creates the best output, without 0 length edges, while in the bottom example it creates an undesirable inverted (red) region on now badly formed active plan. The multiple union procedure adds additional zero length edges in the first example, but always creates valid geometry (top and bottom examples). Compare to "perfect" manual results in Fig. &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#fig:wss_hand_examples"&gt;37&lt;/a&gt;.&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5367605276/" title="wss_union_vs_gie by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5168/5367605276_c2ac235bf3.jpg" alt="wss_union_vs_gie" width="500" height="220" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="CENTER"&gt;&lt;table&gt;&lt;caption align="BOTTOM"&gt;&lt;strong&gt;Figure 40:&lt;/strong&gt;&lt;br /&gt;An example multiple union calculation. Given an input plan (a), several edges (marked with an asterisk) may collide (orange point). The edges involved can be split into levels, just before the event (b). After the event we can view the topology without intersections (d: green chains bound interior regions, white chains bound exterior regions). We can then use an union operation on those chains in the first level (e), before calculating the union of those chains in level 2 (f, yellow). We can then subtract the second level from the first (g). Because of the sector property, this new topology of edges will not intersect immediately after the event. It is also still compatible with the global geometry (h).&lt;br /&gt;&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="CENTER"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/5367603772/" title="wss_gie_example by twak, on Flickr"&gt;&lt;img src="http://farm6.static.flickr.com/5082/5367603772_210526ff29.jpg" alt="wss_gie_example" width="452" height="500" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-2857409801082475293?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/2857409801082475293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/2857409801082475293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/2857409801082475293'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html' title='degeneracy in the weighted straight skeleton'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm6.static.flickr.com/5246/5366991573_94ba47b19d_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-6775923152563624793</id><published>2011-01-17T13:38:00.001Z</published><updated>2011-01-17T13:38:27.257Z</updated><title type='text'>xkcd</title><content type='html'>&lt;div style="padding: 3px; text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/5363193289/" title="photo sharing"&gt;&lt;img src="http://farm6.static.flickr.com/5048/5363193289_afe8c10060.jpg"  alt="xkcd" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;well it's either waiting for it to render, or to compile. &lt;br /&gt;&lt;br /&gt;modified from the great http://xkcd.com/303/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-6775923152563624793?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/6775923152563624793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2011/01/xkcd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/6775923152563624793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/6775923152563624793'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2011/01/xkcd.html' title='xkcd'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm6.static.flickr.com/5048/5363193289_afe8c10060_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-7961165877541604596</id><published>2010-11-26T18:57:00.007Z</published><updated>2011-01-11T15:40:02.099Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sicsa'/><category scheme='http://www.blogger.com/atom/ns#' term='procedural extrusions'/><category scheme='http://www.blogger.com/atom/ns#' term='citysculpt'/><category scheme='http://www.blogger.com/atom/ns#' term='demofest'/><title type='text'>SICSA Demofest 2009 video/poster</title><content type='html'>&lt;div&gt;Catch a bit of (2 year old) hyperbole from me at around 39 seconds (&lt;a href="http://www.youtube.com/watch?v=Zsf9mqnLXZ0"&gt;on 'tube&lt;/a&gt;):&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;object width="500" height="385"&gt;&lt;embed src="http://www.youtube.com/v/Zsf9mqnLXZ0?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;The poster I presented is below (&lt;a href="http://www.blogger.com/www.dcs.gla.ac.uk/~tkelly/bits/city_sculpt_glasgow.pdf"&gt;pdf&lt;/a&gt;) - it is an attempt to put a commercial spin on the work that shows the future promise of the work (with about GBP 10^7 in funding)&lt;/div&gt;&lt;br /&gt;&lt;object id="doc_850688164425690" name="doc_850688164425690" height="500" width="100%" type="application/x-shockwave-flash" data="http://d1.scribdassets.com/ScribdViewer.swf" style="outline:none;"&gt;  &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="FlashVars" value="document_id=44090837&amp;amp;access_key=key-1ryam4ou7b5cbgxouy62&amp;amp;page=1&amp;amp;viewMode=list"&gt;   &lt;embed id="doc_850688164425690" name="doc_850688164425690" src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=44090837&amp;amp;access_key=key-1ryam4ou7b5cbgxouy62&amp;amp;page=1&amp;amp;viewMode=list" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="600" width="100%" wmode="opaque" bgcolor="#ffffff"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-7961165877541604596?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/7961165877541604596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2010/11/sicsa-demofest-2009-videoposter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7961165877541604596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7961165877541604596'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2010/11/sicsa-demofest-2009-videoposter.html' title='SICSA Demofest 2009 video/poster'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-8686900661489266003</id><published>2010-11-22T16:05:00.009Z</published><updated>2010-11-22T21:10:11.876Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='straight skeleton'/><category scheme='http://www.blogger.com/atom/ns#' term='weighted straight skeleton'/><category scheme='http://www.blogger.com/atom/ns#' term='procedural extrusions.'/><title type='text'>Recursive weighted skeleton</title><content type='html'>Given the weighted straight skeleton, and two features&lt;div&gt;&lt;ul&gt;&lt;li&gt;The ability to change the speed of an edge at a certain time (height/offset depending on your model) (lets call this an edge direction event)&lt;/li&gt;&lt;li&gt;The ability to add edges on a particular edge at a certain time (lets call this a plan edit)&lt;/li&gt;&lt;/ul&gt;We can devise a language that allows the plan edits after a sequence of edge direction events. The question is - can this language be recursive? Turns out the answer is yes:&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;object width="500" height="400"&gt;&lt;param name="movie" value="http://www.youtube.com/v/FuFWJjtnn5Q?fs=1&amp;amp;hl=en_GB&amp;amp;hd=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/FuFWJjtnn5Q?fs=1&amp;amp;hl=en_GB&amp;amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="400"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Here's another more discrete &lt;a href="http://www.youtube.com/watch?v=dp18aa6wPk0"&gt;variant&lt;/a&gt;. &lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;This is interesting because of it's similarity to two different types of automata - fractals (such as the &lt;a href="http://en.wikipedia.org/wiki/Koch_snowflake"&gt;Koch snowflake&lt;/a&gt;) and cellular automata (such as the &lt;a href="http://en.wikipedia.org/wiki/Conway's_Game_of_Life"&gt;game of life&lt;/a&gt;). Because the speed of edges can be forward or backward we can create edge direction events to model growth and decay - this is somewhat like the game of life. And because our language allows recursion we can model fractal shapes...&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;I get the feeling that system has the persistence and transmission of information to create high (&lt;a href="http://en.wikipedia.org/wiki/A_New_Kind_of_Science"&gt;Wolfram&lt;/a&gt;) classes of behaviour according to Wolfram. Will need a better implementation to go hunting for them...&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-8686900661489266003?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/8686900661489266003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2010/11/recursive-weighted-skeleton.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/8686900661489266003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/8686900661489266003'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2010/11/recursive-weighted-skeleton.html' title='Recursive weighted skeleton'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-6108859710331374859</id><published>2010-06-18T17:41:00.005Z</published><updated>2010-06-26T01:09:26.055Z</updated><title type='text'>ssd's and ubuntu</title><content type='html'>So I got fed up with waiting for my new computer to boot or java to find the hundreds of files it needs, I decided to blow my spoils from a recent conference victory on a SSD hard disk for my desktop machine.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First surprise - it came in a flat envelope - thought it was a mistake at first, and they'd sent me an OEM cd, but sure enough it was an Intel 80Gb (SSDSA2MH080G2C1 to be precise...) . These things are really small, packaged in not much and must be quite robust.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Second surprise - well not really surprise, the speed boost is pretty noticeable. Overclocking takes second place to getting one of these on your development machine - top video is with my old HDD (320Gb WD Caviar drive), bottom with the Intel SSD.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/EGHVHmK_yYc&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/EGHVHmK_yYc&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So running ubuntu, there are two things I discovered people talked about - erase block alignment and trim support. Because I'll forget what I did this time, I'll note it in this blog, however I suspect that by the time anyone uses this, there will be a better guide available.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Erase block alignment&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As explained &lt;a href="http://www.nuclex.org/blog/personal/80-aligning-an-ssd-on-linux"&gt;here&lt;/a&gt;, when a SSD deletes data, but nuking entire erase blocks. On my intel &lt;strike&gt;disk disc&lt;/strike&gt; drive the erase block size is 128K (128 * 2^10 bytes, different drives, such as the OCZ use different e/block sizes), so we want the sectors of the drive to align to this boundary. I used the instructions &lt;a href="http://www.ocztechnologyforum.com/forum/showthread.php?54379-Linux-Tips-tweaks-and-alignment&amp;amp;p=373226#post373226"&gt;here&lt;/a&gt; to use the live Ubuntu CD and fdisk to ensure this was the case.&lt;/div&gt;&lt;div&gt;Then I reinstalled ubuntu and booted her up.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Trim support&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://en.wikipedia.org/wiki/TRIM"&gt;Trim&lt;/a&gt; is an operating system function that tells a drive when pages are no longer in use, and can be handed back to the SSD's page-allocation system. But the default version of Ubuntu (currently lucid/10.04) uses kernel version 2.6.32, so there's no trim support. The instructions &lt;a href="http://usablesoftware.wordpress.com/2010/05/26/switch-to-a-newer-kernel-in-ubuntu-10-04/"&gt;here&lt;/a&gt; give a painless way to upgrade the kernel to 2.6.34, once ubuntu is installed.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/4712315219/" title="IMG_4846 by twak, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4014/4712315219_eae8f4f48a.jpg" alt="IMG_4846" width="500" height="333" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/4712953700/" title="IMG_4844 by twak, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4065/4712953700_1df7de3580.jpg" alt="IMG_4844" width="333" height="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-6108859710331374859?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/6108859710331374859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2010/06/ssds-and-ubuntu.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/6108859710331374859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/6108859710331374859'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2010/06/ssds-and-ubuntu.html' title='ssd&apos;s and ubuntu'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm5.static.flickr.com/4014/4712315219_eae8f4f48a_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-5721627045959264332</id><published>2010-06-17T11:31:00.014Z</published><updated>2011-05-05T11:04:10.851Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='straight skeleton'/><category scheme='http://www.blogger.com/atom/ns#' term='weighted straight skeleton'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><category scheme='http://www.blogger.com/atom/ns#' term='source'/><title type='text'>weighted straight skeleton source release</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;[&lt;/span&gt;&lt;a style="font-style: italic;" href="http://twak.blogspot.com/2009/10/skeleton-index-page.html"&gt;more skeleton blog posts&lt;/a&gt;&lt;span style="font-style: italic;"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The straight skeleton shrinks in the boundary of a polygon, whilst tracing out the corners to create a roof-like structure. Thus is quite useful for building things like roofs or offset surfaces. I never did find an impelmentation that wasn't &lt;a href="http://www.cgal.org/"&gt;CGAL&lt;/a&gt;'s, so here's a floating point implementation.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3486701678/" title="rect26802 by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3636/3486701678_68febb7bc6.jpg" alt="rect26802" height="433" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;The weighted skeleton allows the edges to move at different speeds. You could even assign negative weights to edges.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/2twcln3_7Y8&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/2twcln3_7Y8&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You can run it by clicking &lt;a href="http://dcs.gla.ac.uk/~tkelly/bits/wss/launch.jnlp"&gt;here&lt;/a&gt; (java webstart, binary code, run at your own risk).&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Left drag the little orange squares at the corners  of the cross&lt;/li&gt;&lt;li&gt;Right drag to move the view&lt;br /&gt;&lt;/li&gt;&lt;li&gt;To change the weights drag the big orange circles&lt;/li&gt;&lt;li&gt;Control-click to add corners&lt;/li&gt;&lt;li&gt;Shift-click to remove corners&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There are known bugs (for example the polygons in the UI overlap, there will be cases where it doesn't tessellate).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use alt-while-dragging to snap to grid&lt;/li&gt;&lt;/ul&gt;Google code project (java) is &lt;a href="http://campskeleton.googlecode.com/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Here's an example of how to skeleton a simple triangle. Points are defined counter clockwise. If you only want the 2d projection, discard the final (z) co-ordinate of the output-faces.&lt;/div&gt;&lt;/div&gt;&lt;pre&gt;&lt;span class="Apple-style-span"  &gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;        Corner&lt;br /&gt;        c1 = new Corner ( 0,0),&lt;br /&gt;        c2 = new Corner (100,-100 ),&lt;br /&gt;        c3 = new Corner (100,0 );&lt;br /&gt;      &lt;br /&gt;       Machine directionMachine = new Machine ();&lt;br /&gt;      &lt;br /&gt;       loop1.append(new Edge ( c1,c2 ) );&lt;br /&gt;       loop1.append(new Edge ( c2, c3 ) );&lt;br /&gt;       loop1.append(new Edge ( c3, c1 ) );&lt;br /&gt;      &lt;br /&gt;       for (Edge e : loop1)&lt;br /&gt;        e.machine = directionMachine;&lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;       Skeleton skel = new Skeleton (out, true);&lt;br /&gt;       skel.skeleton();&lt;br /&gt;      &lt;br /&gt;       for ( Face face : skel.output.faces.values() )&lt;br /&gt;       {&lt;br /&gt;           System.out.println("face:");&lt;br /&gt;           for (Loop &lt;point3d&gt; lp3 : face.points)&lt;br /&gt;            for (Point3d pt : lp3)&lt;br /&gt;             System.out.println(pt);&lt;br /&gt;       }&lt;br /&gt;&lt;/point3d&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-5721627045959264332?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/5721627045959264332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2010/06/weighted-straight-skeleton-source.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/5721627045959264332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/5721627045959264332'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2010/06/weighted-straight-skeleton-source.html' title='weighted straight skeleton source release'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3636/3486701678_68febb7bc6_t.jpg' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-1647954983052674686</id><published>2010-06-16T14:10:00.005Z</published><updated>2010-06-16T22:00:50.050Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='dcs'/><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><category scheme='http://www.blogger.com/atom/ns#' term='glasgow'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>equipment funding in academia</title><content type='html'>So coming from industry to academia, the 50% pay cut was announced up front - fair enough - I can get up at any time after 11am, and only have to be in one place for an hour every week. But I didn't realise how hard it would be to get equipment and software that was trivially available in the commercial world. If you can make a case to your manager that a 30" monitor will save you &lt;a href="http://www.macworld.co.uk/news/index.cfm?NewsID=16131&amp;amp;RSS"&gt;an hour a week&lt;/a&gt;, it is more effort for them to reject the request (a 30 minute meeting costs more than the requested hardware), than to grant it - hence hardware and software are a non-issue.&lt;br /&gt;&lt;br /&gt;But it turns out I had made an assumption that inviting someone to study graphics at a university meant that there would be equipment available to do graphics research of a globally publishable quality. I'm not talking about Cray supercomputers, I'm talking a decent current gaming pc (£1,500) to be able to do real-time graphics. Turns out that &lt;a href="http://dcs.gla.ac.uk/"&gt;Glasgow's department of computer science&lt;/a&gt; starts PhD students off with really poor hardware:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/4706043416/sizes/l/in/photostream/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 547px; height: 163px;" src="http://farm2.static.flickr.com/1273/4706043416_c771c1a766_b.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and upgrade them if they complain enough - there's no money available for upgrades (all the budgets are maxed out in the current environment), so they shuffle graphics card and memory around the department to whoever needs them more. This was the specs of the machine that I was given when I started at the end of 2008, they don't come close to what I'd describe as "industry standard software development platform", closer to what you need to run office software:-&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4705733669/" title="PhD Starting October 08 got this machine by twak, on Flickr"&gt;&lt;img src="http://farm5.static.flickr.com/4069/4705733669_82a42f92a9.jpg" alt="PhD Starting October 08 got this machine" height="248" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;So that's no dedicated graphics card, and 19" monitor - most people in the vision group (who spend their days with 15 windows open, examining many images), still use this gear. Frankly I doubt this equipment cost £500 at that time, my similar machine (with a £200 graphics card, but without the £100 monitor) cost £600 &lt;span style="font-style: italic;"&gt;a year earlier&lt;/span&gt;. And okay there are servers available - but mostly these are funded by individual research grants, rather than being open for all PhD students - and most importantly servers make it difficult to do the kind of real-time processing that graphics demands.&lt;br /&gt;&lt;br /&gt;After complaining (and as way of apology for loosing my computer) I got a computer equivalent to that £600 machine - but most almost all students don't have industry experience, don't know what a development environment looks like, and don't complain loudly enough.&lt;br /&gt;&lt;br /&gt;For example the last graphics paper I wrote had a nice render and an accompanying video. Either setting up the rendering of large scenes or editing video require a decent local computer, especially to compete in computer graphics at an international level.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4601440639/" title="atlantis by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3596/4601440639_9855bbbe7e.jpg" alt="atlantis" height="141" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Considering there's so little money required for decent hardware (£3000 over 3 years is probably sufficient, even for heavy graphics), compared to the cost of salaries (£40,000 over three years) it leaves a feeling that the department doesn't value PhD time. However when you start to look at where the hardware funding comes from, (for example &lt;a href="http://www.sicsa.ac.uk/"&gt;Sicsa&lt;/a&gt; pays &lt;a href="http://dcs.gla.ac.uk/"&gt;Glasgow&lt;/a&gt; £2000 a year for my hardware), it looks like it's being lost in the University's &amp;amp; Department's bureaucracy black-hole.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4448264767/" title="dcs workstation by twak, on Flickr"&gt;&lt;img style="width: 376px; height: 251px;" src="http://farm3.static.flickr.com/2727/4448264767_3a9395523c.jpg" alt="dcs workstation" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;my dept pc - we're not talking state of the art here&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I've ended up building my own gear for use at home - bit of a sad outcome, but guess I don't have to put Glasgow on any of the papers I write now ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-1647954983052674686?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/1647954983052674686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2010/06/equpment-funding-in-academia.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/1647954983052674686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/1647954983052674686'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2010/06/equpment-funding-in-academia.html' title='equipment funding in academia'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1273/4706043416_c771c1a766_t.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-1750030955056454384</id><published>2010-03-31T16:30:00.006Z</published><updated>2010-06-16T14:46:33.592Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='copyright'/><category scheme='http://www.blogger.com/atom/ns#' term='procedural'/><category scheme='http://www.blogger.com/atom/ns#' term='Phyllotaxis'/><category scheme='http://www.blogger.com/atom/ns#' term='geometry'/><title type='text'>copyright vs procedural content</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 203px; height: 400px;" src="http://4.bp.blogspot.com/_wceYeHJ7bn0/SqQDbZMcJeI/AAAAAAAAAqs/_QWGhNYyOQA/s400/hirstdixon241006_228x450.jpg" alt="" id="BLOGGER_PHOTO_ID_5378427624141628898" border="0" /&gt;&lt;div style="text-align: left;"&gt;In 2006 the Damien Hurst was accused (&lt;a href="http://entertainment.timesonline.co.uk/tol/arts_and_entertainment/article610811.ece"&gt;via&lt;/a&gt;) of copying a design ("valium", top) from Robert Dixon ("true daisy", bottom). Hurst is a quite well known millionaire (valium's 500 prints &lt;a href="http://74.125.95.132/search?q=cache:SntTNVmcwpEJ:www.eyestorm.com/secondary_works/detail/Damien_Hirst/41667.html+hirst+valium+phyllotaxis&amp;amp;cd=5&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;gl=us"&gt;sold&lt;/a&gt; for "four and five figure sums") and Dixon a relatively unknown computer/geometric artist. At first glance it looks like Hurst just coloured in, flipped and cropped Dixon's work, but looking a bit deeper it gets more interesting. &lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Dixon's work is based on the patterns of spiral &lt;a href="http://algorithmicbotany.org/papers/abop/abop-ch4.pdf"&gt;Phyllotaxis&lt;/a&gt;, a natural phenomena that describes (among other things) the arrangement of needles on a pinecone and pattern of seeds on a sunflower head.&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/raeallen/96236067/" title="IMGP0618 - cu - sunflower head by RaeA, on Flickr"&gt;&lt;img src="http://farm1.static.flickr.com/16/96236067_c0b42423ae.jpg" alt="IMGP0618 - cu - sunflower head" height="425" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;by &lt;a href="http://www.flickr.com/photos/raeallen/96236067/"&gt;RaeA&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;This is a old mathematical pattern that can be expressed as an formula, and was well known enough to be commented on by &lt;a href="http://en.wikipedia.org/wiki/Phyllotaxis"&gt;da Vinci&lt;/a&gt;. Because of this Dixon was able to write code (similar to &lt;a href="http://www.google.com/notebook/public/08290972596615143165/BDQNLQgoQ6bbxndgj#NDQgiQgoQq5WMqOQj"&gt;mine&lt;/a&gt;, that produced my diagrams below) to generate his pattern. &lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Simply, Phyllotaxis is a spiral pattern of points. Although many different spacings are possible, the fantastic thing is that nature always chooses the same spacing. My diagram below shows a few possible spacings, and one jumps out as being "correct" as it covers the space most evenly. This is the pattern that is used by nature, Dixon and Hurst.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/3115930730/" title="phyllotaxis by twak, on Flickr"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/twak/3115930730/" title="phyllotaxis by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3062/3115930730_f81a2d622f.jpg" alt="phyllotaxis" height="500" width="198" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;But the question is - should he be able to claim copyright on it? and is Hurst's work derivative of it? Copyright law say yes - Dixon has some claim over this figure, as he created it (no matter it's source) and has a copyright claim. The law just asks that he has the work is "original, and exhibits a degree of labour, skill or judgement". Maybe he was the first to use circles of that diameter to represent the pattern. So if I can build a general machine that with some parameter imitates Dixon's machine - does Dixon own the output of that machine?&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/paDOS9R8UF8&amp;amp;hl=en_GB&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/paDOS9R8UF8&amp;amp;hl=en_GB&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="385" width="480"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Okay, so I built the above machine after viewing Dixon's work, at some point it probably outputs something that looks enough like Dixon's work. This is a real headache for me as a programmer - is the output of my program derivative? does Dixon own the copyright to the program he's never seen?&lt;br /&gt;&lt;br /&gt;One answer is that I should block particular frames that contain copyrighted images. To do this in this single instance, I would have to describe Dixon's work in the program to stop it infringing. The program would then contain copyrighted material and be illegal. To do it in the general instance, for all copyrighted spiral patterns, I would need to do an international prior-art search, which would cost vastly more than the two hours it took to create the above video.&lt;br /&gt;&lt;br /&gt;There are excuses for copyright, for example if you can prove you didn't know about the existing image, that you didn't "copy" it, then the use is mostly covered under &lt;span style="font-style: italic;"&gt;fair deal&lt;/span&gt; (or &lt;span style="font-style: italic;"&gt;fair use&lt;/span&gt; in the USofA). But some inventions are covered by the more powerful patents - in this case even if you come up with the idea independently yourself, the first person to be awarded the pattern hold all rights to it.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;In situations like this, Intellectual Property (IP) lap feels very wrong, this is an algorithmic pattern, and if I'm allowed to copyright it, or copyright a video of all possible versions of it, there is nothing left for the rest of the world to use.&lt;br /&gt;&lt;br /&gt;If I can write a program that recreates your patented "invention" or copyrighted "original" object do you own that program? If I can write a program that will write that program, given a certain command (&lt;span style="font-style: italic;"&gt;abracadabra&lt;/span&gt;!), do you own that word? do you own/control the first program &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; the second program? are both programs illegal (under &lt;a href="http://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act"&gt;DMCA&lt;/a&gt;-like legislation they probably are). Does this mean that any program that can recreate patented work is illegal? does this include a computer compiler (probably not)?&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;At the moment these ideas are unlikely, and limited to toy examples. But in ten years, when anyone can ask the computer to create a program that lets you edit photos ("now I want a circular brush!"), and that program infringes on hundreds of patents, it seems like IP law will have to change.&lt;br /&gt;&lt;br /&gt;Another reason to burst the IP bubble sooner rather than later? A previous post on copyright can be found &lt;a href="http://twak.blogspot.com/2009/03/copyright-vs-fun-rant.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-1750030955056454384?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/1750030955056454384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2010/03/procedural-content-vs-copyright.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/1750030955056454384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/1750030955056454384'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2010/03/procedural-content-vs-copyright.html' title='copyright vs procedural content'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_wceYeHJ7bn0/SqQDbZMcJeI/AAAAAAAAAqs/_QWGhNYyOQA/s72-c/hirstdixon241006_228x450.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-975272646035735656</id><published>2010-03-22T18:27:00.004Z</published><updated>2010-03-22T18:30:39.654Z</updated><title type='text'>rapid prototyping procedural buildings</title><content type='html'>via &lt;a href="http://www.boingboing.net/2010/03/20/modular-3d-printed-g.html"&gt;boing boing&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.cowtowncomputercongress.org/the-gothic-cathedral-playset/"&gt;These guys&lt;/a&gt; have a set of templates you can send off to a rapid &lt;a href="http://www.shapeways.com/"&gt;prototyper&lt;/a&gt; (&lt;a href="http://reprap.org/"&gt;or yourself&lt;/a&gt;) to build a kit-set for your own cathedral. You choose which sections you want printed&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_wceYeHJ7bn0/S6e1YPbwkqI/AAAAAAAAAvI/-KjrbNaQGrg/s1600-h/parts_spread_out_display_medium.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_wceYeHJ7bn0/S6e1YPbwkqI/AAAAAAAAAvI/-KjrbNaQGrg/s400/parts_spread_out_display_medium.jpg" alt="" id="BLOGGER_PHOTO_ID_5451525302019723938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Then glue them together yourself -&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_wceYeHJ7bn0/S6e06nTK61I/AAAAAAAAAvA/UFEtnupy3TA/s1600-h/front_low_display_medium.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 314px;" src="http://2.bp.blogspot.com/_wceYeHJ7bn0/S6e06nTK61I/AAAAAAAAAvA/UFEtnupy3TA/s400/front_low_display_medium.jpg" alt="" id="BLOGGER_PHOTO_ID_5451524793030077266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is what procedural architecture is all about - what they have here is a simple shape grammar! We're not far from the situation of having designs where you can define an arbitrary floor plan and style on a website, and download a solid file you can get printed. Or how about having it printed big enough to be a dog house? or somewhere to live in the summer? I can't wait for the first lorry to arrive with a procedurally generated building on the back :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-975272646035735656?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/975272646035735656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2010/03/rapid-prototyping-procedural-buildings.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/975272646035735656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/975272646035735656'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2010/03/rapid-prototyping-procedural-buildings.html' title='rapid prototyping procedural buildings'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_wceYeHJ7bn0/S6e1YPbwkqI/AAAAAAAAAvI/-KjrbNaQGrg/s72-c/parts_spread_out_display_medium.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-6836668693839566699</id><published>2010-03-19T14:04:00.019Z</published><updated>2011-12-17T19:42:06.770Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='publications'/><category scheme='http://www.blogger.com/atom/ns#' term='depth from defocus'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='frequency map'/><category scheme='http://www.blogger.com/atom/ns#' term='depth map'/><title type='text'>exploring frequency responses for focus</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;In the name of badly rushed science for &lt;a href="http://www.sicsaconf.org/"&gt;conference deadlines&lt;/a&gt; I present the accumulation of a couple of week's evenings messing around learning about frequency space.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[tl;dr] This paper got accepted, and I "presented" it at the &lt;a href="http://sicsaconf.org/"&gt;Sicsa 2010&lt;/a&gt; conference. Here's the &lt;a href="http://vimeo.com/15059860"&gt;video&lt;/a&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;iframe frameborder="0" height="300" src="http://player.vimeo.com/video/15059860" width="400"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/taurusaficionado/2619509269/" title="Double Spectrum Analyzer by wblo, on Flickr"&gt;&lt;img alt="Double Spectrum Analyzer" src="http://farm4.static.flickr.com/3036/2619509269_520086c82a.jpg" width="300" /&gt;&lt;/a&gt;(via &lt;a href="http://www.flickr.com/photos/taurusaficionado/"&gt;wblo&lt;/a&gt;)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;While I'd always seen the little bars on music amplifiers, I'd never thought of images being represented in the same way. The bars represent the frequencies being played back at any one time. The low frequencies (slower moving bars, normally to the right) are the deep sounds, and the high frequencies (fast bars on the left) are the high sounds. It turns out they have a nice analogue in the image plane, but because we don't look at at every pixel in a photo in order from start to end over 3 minutes we never see them.&lt;br /&gt;&lt;br /&gt;If we identify the important areas of an image for each frequency (DoG pyramid/"monolith"), we can animate over the frequency (high frequencies first, then the low ones):&lt;br /&gt;&lt;br /&gt;&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/dyd6_BXT6IU&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/dyd6_BXT6IU&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="385" width="480"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We can then see that a single point in the image has different intensities at different frequencies, as the shade of grey at a point changes. So there's one of the little bar-graphs for each pixel. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;I built a little application that lets you see these graphs and the spatial frequencies in an image. It's quite fun to play with, you can start it by clicking &lt;a href="http://www.dcs.gla.ac.uk/~tkelly/bits/fmap/launch.jnlp"&gt;here&lt;/a&gt; (java webstart, binary file, run at your own risk, source code below). Wait for it to load the preview images, select one, wait for it to build the map (lots of waiting here...) and then use the right-drag to move around, wheel to scroll, and the left button to show a frequency preview for a particular location. Move the mouse out of the frame to see the representative frequency map from the work.&lt;br /&gt;&lt;br /&gt;As you drag the point around the lil bars change to show you what the frequency content is like in that area of the image.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4444881199/" title="tripping_crow by twak, on Flickr"&gt;&lt;img alt="tripping_crow" height="220" src="http://farm5.static.flickr.com/4034/4444881199_9bdd39b872.jpg" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This was neat, and I had to do something with it, so I built a hoodicky that takes a single image and recovers the depth map from the focus of a single image. I assume that stuff in focus is near the camera, and stuff out of focus is a long way away - photography just like your Mum used to do. It turns out that not too much work has been done in this region, these &lt;a href="http://www.springerlink.com/content/a171glv3640845wt/"&gt;guys&lt;/a&gt; even got a book article out about it last year.&lt;br /&gt;&lt;br /&gt;So just to late to be hot news... but interesting none-the-less. So I decided to twist the concept a bit and use it for blur aware image resizing. The motivation being that you need big (expensive) lenses to take photos with a shallow Depth of Field, but when you resize these images, you loose that depth of field:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4446504746/" title="sicsa_hierarchy by twak, on Flickr"&gt;&lt;img alt="sicsa_hierarchy" height="247" src="http://farm3.static.flickr.com/2762/4446504746_baa22694b3.jpg" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In the smaller images, more of the logo appears to be in focus, but it's the same image, just scaled a bit.&lt;br /&gt;&lt;br /&gt;So we want something that keeps that proportion of each frequency the same as you scale the image. So basically it's a thing that keeps foreground/background separation when scaling an image. We can use the focus of an image (closely connected to it's frequencies) to determine the depth, as this video shows.&lt;br /&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" data="http://www.flickr.com/apps/video/stewart.swf?v=71377" height="225" type="application/x-shockwave-flash" width="400"&gt; &lt;param name="flashvars" value="intl_lang=en-us&amp;amp;photo_secret=019a7225dd&amp;amp;photo_id=4544263338"&gt; &lt;param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=71377"&gt; &lt;param name="bgcolor" value="#000000"&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&amp;amp;photo_secret=019a7225dd&amp;amp;photo_id=4544263338" height="225" width="400"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;In the following, a, b and d are normal scaling, while c &amp;amp; e use the depth map we've calculated using the frequency map.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4444881195/" title="woman by twak, on Flickr"&gt;&lt;img alt="woman" height="500" src="http://farm3.static.flickr.com/2702/4444881195_64d84913be.jpg" width="458" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This uses the frequencies on the edges of the photo to classify the segmented image. This shows the same kind of thing at the top, and the segment-frequency map bottom left, and the recovered depth map bottom right.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4444881197/" title="crow_results by twak, on Flickr"&gt;&lt;img alt="crow_results" height="500" src="http://farm5.static.flickr.com/4016/4444881197_1f8b63974c.jpg" width="497" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;More results (SICSA are the people who pay half my rent...):&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4444881193/" title="sicsa_results by twak, on Flickr"&gt;&lt;img alt="sicsa_results" height="500" src="http://farm5.static.flickr.com/4045/4444881193_f215a53978.jpg" width="259" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Here a,b,c are standard scalings and d,e are from my algorithm.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4444881187/" title="lbird_results by twak, on Flickr"&gt;&lt;img alt="lbird_results" height="500" src="http://farm5.static.flickr.com/4011/4444881187_ff675fca30.jpg" width="499" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Results are better than I expected for the few days I spent putting this thing together, but the basic problem is there are two or three parameters that need to be tuned for each image to take into account the noise of the image and the bias towards foreground/background classification. Good working prototype, lots of effort required to do this for real.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The write up looks like this (&lt;a href="http://www.dcs.gla.ac.uk/~tkelly/bits/fmap/bokeh.pdf"&gt;non scribd pdf&lt;/a&gt;, src below), I'm a bit certain some of the equations are wrong - but this is computer science, no one actually reads equations do they?&lt;br /&gt;&lt;br /&gt;&lt;object data="http://d1.scribdassets.com/ScribdViewer.swf" height="600" id="doc_766657997651150" name="doc_766657997651150" style="outline-color: -moz-use-text-color; outline-style: none; outline-width: medium;" type="application/x-shockwave-flash" width="100%"&gt;  &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="FlashVars" value="document_id=28620508&amp;amp;access_key=key-2btlajpgjau0cblsed9a&amp;amp;page=1&amp;amp;viewMode=list"&gt;   &lt;embed id="doc_766657997651150" name="doc_766657997651150" src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=28620508&amp;amp;access_key=key-2btlajpgjau0cblsed9a&amp;amp;page=1&amp;amp;viewMode=list" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" bgcolor="#ffffff" height="600" width="100%"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Source code is &lt;a href="http://www.dcs.gla.ac.uk/~tkelly/bits/fmap/bokeh.zip"&gt;here&lt;/a&gt;. Java. I think it uses Apache licensed stuff, that that's how it should be treated, but I scrounged a fair bit of code, who knows where it's from... Main class should be FrequencyMap, and after setting up an image in that class you'll need to play around with the four constants at the top:&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;fMapThreshhold: Increase if not enough red (high freq) in the freq map, decrease if noise is being counted as red&lt;/li&gt;&lt;li&gt;scaleFac: usually okay to leave alone. If you want a frequency map with more levels, decrease this, keeping it above one.&lt;/li&gt;&lt;li&gt;filterRadius: noise reduction on edge classification. Increase to classify more edges as higher frequency&lt;/li&gt;&lt;li&gt;Q: increase to increase the number of segmentations.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;It will write files out to the disk. Use at your own risk.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;[edit: 22/3/10]&lt;br /&gt;&lt;br /&gt;While out riding this weekend I figured out that it should be possible to analyse the defocused edges for evidence of higher frequencies to determine if the edge is in front of, or behind the in-focus point. More importantly if we can't see any high frequency edges in the bokeh, then it doesn't matter if that part of the edge is in front of, or behind the defocused edge...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4453744461/" title="bokeh_determination by twak, on Flickr"&gt;&lt;img alt="bokeh_determination" height="321" src="http://farm5.static.flickr.com/4072/4453744461_4065970283.jpg" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;[edit:] woo! It's been accepted (probably because it's one of the few graphics papers from Scotland). Reviewers comments follow:&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px;"&gt;Dear Author,&lt;br /&gt;&lt;br /&gt;Thank you for your submission to the SICSA PhD Conference. We are delighted to inform you that, subject to corrections, your paper has been provisionally accepted to be presented at the conference. The comments from reviewers are included at the bottom of this email.&lt;br /&gt;&lt;br /&gt;We will be in touch with you soon regarding the nature of the corrections that must be made in order for your paper to be included. You should note that the absolute deadline for these corrections will be MAY 19th 2010. No deadline extensions can be offered.&lt;br /&gt;&lt;br /&gt;Regards&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;---------------------------------------------&lt;br /&gt;&lt;br /&gt;Paper: 21&lt;br /&gt;Title: Blur Preserving Image Resizing&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;---------------------------- REVIEW 1 --------------------------&lt;br /&gt;PAPER: 21&lt;br /&gt;TITLE: Blur Preserving Image Resizing&lt;br /&gt;&lt;br /&gt;OVERALL RATING: -1 (weak reject)&lt;br /&gt;REVIEWER'S CONFIDENCE: 1 (low)&lt;br /&gt;Audience Appeal: 4 (A typical CS honours graduate will fully understand what the paper is about, but is unlikely to understand all the details.)&lt;br /&gt;Significance: 4 (Interesting work which will probably be cited even if it does not shake the field of research.)&lt;br /&gt;Originality: 4 (A minor or incremental improvement to existing work that is not immediately obvious.)&lt;br /&gt;Presentation: 4 (The paper makes sense and the story is intelligible. However, the structure or grammar is sub-optimal, potentially making it frustrating to read.)&lt;br /&gt;Validity: 5 (Valid, practical, relevant approaches are made and are probably correct but may not be concrete.)&lt;br /&gt;Recommendation: 3 (The paper is below average, but I do not feel strongly as to whether it should be accepted or rejected.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Please provide a response to each of the following queries:&lt;br /&gt;&lt;br /&gt;1) What was the paper about?&lt;br /&gt;&lt;br /&gt;The paper presents a method for scaling images which attempts to retain the image's apparent depth of field by selectively blurring parts of the image. The amount of Gaussian blur applied to each segment is proportional to the depth of the scene at that segment. This depth information is automatically calculated from a single image using an augmented segmentation algorithm.&lt;br /&gt;&lt;br /&gt;2) What claims or hypotheses did the paper make (if any)?&lt;br /&gt;&lt;br /&gt;The paper claims that:&lt;br /&gt;&lt;br /&gt;- When images are scaled down the apparent narrow depth of field is lost.&lt;br /&gt;- It is desirable to keep the same proportion of the image with the same CoC.&lt;br /&gt;- The presented method is able to retain the apparent depth of field in an image as it is scaled down.&lt;br /&gt;- The presented method is capable of narrowing the depth of field apparent in images captured using commodity compact cameras to allow a larger aperature to be simulated.&lt;br /&gt;&lt;br /&gt;3) What are the good points of the paper? Why might it be accepted? What did the author do right?&lt;br /&gt;&lt;br /&gt;The paper introduces a significant new method which can be useful in practice (as it requires very little information and/or extra equipment). The method has been clearly presented and is understandable. Plenty of images have been provided which do add to the text. The algorithm appears to perform the intended task well.&lt;br /&gt;&lt;br /&gt;4) What are the bad points of the paper? Why might it be rejected? How might the author improve their work?&lt;br /&gt;&lt;br /&gt;The first claim (that apparent depth of field is lost when images are scaled down) has not been justified. The efficacy of the method at retaining the depth of field has not been quantitatively analysed, nor has it been compared to the bog-standard scaling algorithms or the naive blurring approaches. The method has only been demonstrated to work on a number of hand-chosen examples. The authors make a third claim in passing which has not been demonstrated or backed up in the paper.&lt;br /&gt;&lt;br /&gt;The paper should be shortened down to 10 pages. Changes could be made to sentence structure (particularly in the introduction and conclusion) to make the paper more understandable. The relationship between the presented method and previous related work could be explained in more detail.&lt;br /&gt;&lt;br /&gt;Please also provide a justification for the scores you have provided in each of the following areas:&lt;br /&gt;&lt;br /&gt;Audience Appeal (1 - bad, 6 - good):&lt;br /&gt;&lt;br /&gt;The presented method is easy to follow. Only the presentation occasionally gets in the way.&lt;br /&gt;&lt;br /&gt;Significance (1 - bad, 6 - good):&lt;br /&gt;&lt;br /&gt;Originality (1 - bad, 6 - good):&lt;br /&gt;&lt;br /&gt;It is of interest to see how the presented method relates to the existing literature on single-image depth estimation. Whilst the application area is novel, the underlying machinery may not be.&lt;br /&gt;&lt;br /&gt;Presentation (1 - bad, 6 - good):&lt;br /&gt;&lt;br /&gt;A number of grammatical and spelling errors exist. The paper is too long (14 pages). Some parts of the text feel unfinished (in particular the introduction and conclusion.&lt;br /&gt;&lt;br /&gt;Validity (1 - bad, 6 - good):&lt;br /&gt;&lt;br /&gt;The authors present a convincing technique, and also point out its potential shortcomings in the conclusion section.&lt;br /&gt;&lt;br /&gt;Recommendation (1 - bad, 6 - good):&lt;br /&gt;&lt;br /&gt;The paper, in its current form, is not ready for publication. First, the method needs to be analysed and compared quantitatively. Second, the writing, layout and presentation in general should be improved.&lt;br /&gt;&lt;br /&gt;Any other comments to make to the authors:&lt;br /&gt;&lt;br /&gt;(Changes have been capitalised)&lt;br /&gt;&lt;br /&gt;- Grammar: '... large apertures, WHICH has led ...'&lt;br /&gt;- Readability: '... That is the sharp area of focus ...'&lt;br /&gt;- Readability: '... apparent narrow depth of field is lost, figure 1 ...'&lt;br /&gt;- Readability: best to define the Circle of Confusion (CoC) *immediately* after it is introduced in Section 3.&lt;br /&gt;- Readability: the CoC could be explained more clearly in Section 3.1&lt;br /&gt;- Readability: caption for Figure 2&lt;br /&gt;- Style: figure 1, figure 2, etc should be Figure 1, Figure 2, etc&lt;br /&gt;- Style: best not to begin figure captions with labels (a, b, etc)&lt;br /&gt;- Style: there should be a space between citation numbers and preceding text:&lt;br /&gt;   '... an all-focused image[2] ...' should be '... an all-focused image [2] ...'&lt;br /&gt;- Typos: extra bracket at the end of the 2nd equation on page 4&lt;br /&gt;- Typos: '... whilst we examine the a larger frequency space.'&lt;br /&gt;- Typos: '... the frequency content of ITS border ...'&lt;br /&gt;- Citations: the first citation (Wikipedia) has not been made correctly&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;---------------------------- REVIEW 2 --------------------------&lt;br /&gt;PAPER: 21&lt;br /&gt;TITLE: Blur Preserving Image Resizing&lt;br /&gt;&lt;br /&gt;OVERALL RATING: 2 (accept)&lt;br /&gt;REVIEWER'S CONFIDENCE: 1 (low)&lt;br /&gt;Audience Appeal: 5 (Easy to follow and read with minor points remaining unclarified.)&lt;br /&gt;Significance: 4 (Interesting work which will probably be cited even if it does not shake the field of research.)&lt;br /&gt;Originality: 4 (A minor or incremental improvement to existing work that is not immediately obvious.)&lt;br /&gt;Presentation: 5 (The paper is well structured and can be fully understood. However, some sentences are badly or awkwardly written.)&lt;br /&gt;Validity: 4 (Valid, relevant approaches are made, but they are not convincing or may be a little impractical.)&lt;br /&gt;Recommendation: 5 (The paper is good and should be included.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Please provide a response to each of the following queries:&lt;br /&gt;&lt;br /&gt;1) What was the paper about?&lt;br /&gt;This paper describes an image resizing algorithm that improves quality by&lt;br /&gt;maintaining depth perspective.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2) What claims or hypotheses did the paper make (if any)?&lt;br /&gt;This paper identifies that depth perspective is lost when images&lt;br /&gt;are reduced in size resulting in a loss of quality. With a growing&lt;br /&gt;number of collaborative image viewing sites where images are initially&lt;br /&gt;viewed as a thumbnail the loss of depth perspective results in a loss&lt;br /&gt;of quality in the resized images.&lt;br /&gt;&lt;br /&gt;An algorithm is proposed for resizing images which maintains depth&lt;br /&gt;perspective. The image is segmented, each segment is classified to a&lt;br /&gt;depth using the frequency and then blurred to match the new size.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3) What are the good points of the paper? Why might it be accepted? What did the author do right?&lt;br /&gt;I enjoyed reading this paper. It is a clear, well written paper with&lt;br /&gt;a good structure that is easy to follow.&lt;br /&gt;&lt;br /&gt;The problem being addressed is clearly identified and well described&lt;br /&gt;both in the text and by example. Most readers will have practical&lt;br /&gt;experience of this issue making the paper particularly relevant to&lt;br /&gt;a general audience.&lt;br /&gt;&lt;br /&gt;The paper makes good use of numerous examples to explain each stage&lt;br /&gt;of the approach. This made it easier to understand the impact of each&lt;br /&gt;stage of the resizing process even if some of the underlying technical&lt;br /&gt;aspects were, by their nature, more difficult to follow.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4) What are the bad points of the paper? Why might it be rejected? How might the author improve their work?&lt;br /&gt;&lt;br /&gt;My biggest issue with this paper is the evaluation. A new algorithm&lt;br /&gt;is proposed with evidence of its effectiveness being left to the&lt;br /&gt;reader by the inclusion of 4 sample images that have been resized.&lt;br /&gt;I would expect to see stronger evidence to support the proposed&lt;br /&gt;approach. While a quantitative evaluation may be difficult a user&lt;br /&gt;evaluation should be possible and could provide evidence both that&lt;br /&gt;the problem is important and that the proposed approach is a&lt;br /&gt;perceived improvement.&lt;br /&gt;&lt;br /&gt;The assumption that in focus object is in the foreground appears to&lt;br /&gt;be a very limiting restriction of the approach. Although raised as&lt;br /&gt;an issue in the conclusions, this issue was not discussed in sufficient&lt;br /&gt;detail and merits more discussion on the extent to which this would&lt;br /&gt;limit the use of the algorithm.&lt;br /&gt;&lt;br /&gt;The abstract is OK as far as it goes but is too short. It should be&lt;br /&gt;expanded to give, at least, an indication of the methodology adopted.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Please also provide a justification for the scores you have provided in each of the following areas:&lt;br /&gt;&lt;br /&gt;Audience Appeal (1 - bad, 6 - good):5&lt;br /&gt;Maintaining image quality on resized images is a subject area that&lt;br /&gt;most of the audience will be able to relate to. This paper is likely&lt;br /&gt;to be understandable and of interest to a wide spectrum of a general&lt;br /&gt;audience. However, some aspects of the paper are understandably quite&lt;br /&gt;technical.&lt;br /&gt;&lt;br /&gt;Significance (1 - bad, 6 - good):4&lt;br /&gt;The problem being investigated is clearly identified and appears to&lt;br /&gt;be a genuine issue at least conceptually. However, given the lack of&lt;br /&gt;a user evaluation it is difficult to judge the importance of the&lt;br /&gt;problem and the extent to which this work solves it and improves&lt;br /&gt;the quality of image resizing.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Originality (1 - bad, 6 - good):4&lt;br /&gt;The work appears novel. Perhaps not in the broad approach used but at&lt;br /&gt;least in the combination of techniques used and for the specific&lt;br /&gt;application addressed in this paper.&lt;br /&gt;&lt;br /&gt;Presentation (1 - bad, 6 - good):5&lt;br /&gt;This paper is well written and has a good structure. Typos and minor issues&lt;br /&gt;are listed below - although very few.&lt;br /&gt;&lt;br /&gt;Validity (1 - bad, 6 - good):4&lt;br /&gt;The methodology adopted appears fine and its success is demonstrated by&lt;br /&gt;the inclusion of a number of sample images shown at different sizes.&lt;br /&gt;However it is difficult to quantify the success of the approach on a&lt;br /&gt;small number of images. A larger evaluation would provide more evidence&lt;br /&gt;to support to the approach.&lt;br /&gt;&lt;br /&gt;Recommendation (1 - bad, 6 - good):5&lt;br /&gt;Overall a solid piece of work that merits a place in the conference.&lt;br /&gt;&lt;br /&gt;Any other comments to make to the authors:&lt;br /&gt;&lt;br /&gt;Typos and minor issues:&lt;br /&gt;&lt;br /&gt;page2para4line4: "Alternatively[11]" --&amp;gt; "Alternatively [11]" numerous other examples&lt;br /&gt;page2para8line7: "examine the a larger" --&amp;gt; "examine a larger" ?&lt;br /&gt;page5para1line3: "from  [9]" --&amp;gt; " from [9]"&lt;br /&gt;page9para4line2: "allow the" --&amp;gt; "allows the"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;---------------------------- REVIEW 3 --------------------------&lt;br /&gt;PAPER: 21&lt;br /&gt;TITLE: Blur Preserving Image Resizing&lt;br /&gt;&lt;br /&gt;OVERALL RATING: 2 (accept)&lt;br /&gt;REVIEWER'S CONFIDENCE: 2 (medium)&lt;br /&gt;Audience Appeal: 4 (A typical CS honours graduate will fully understand what the paper is about, but is unlikely to understand all the details.)&lt;br /&gt;Significance: 4 (Interesting work which will probably be cited even if it does not shake the field of research.)&lt;br /&gt;Originality: 4 (A minor or incremental improvement to existing work that is not immediately obvious.)&lt;br /&gt;Presentation: 4 (The paper makes sense and the story is intelligible. However, the structure or grammar is sub-optimal, potentially making it frustrating to read.)&lt;br /&gt;Validity: 5 (Valid, practical, relevant approaches are made and are probably correct but may not be concrete.)&lt;br /&gt;Recommendation: 5 (The paper is good and should be included.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Please provide a response to each of the following queries:&lt;br /&gt;&lt;br /&gt;1) What was the paper about?&lt;br /&gt;&lt;br /&gt;This paper proposed a new method to extract depth information from a sigle image, which was used to resize the image while the blurriness caused by our-of-focus was maintained.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2) What claims or hypotheses did the paper make (if any)?&lt;br /&gt;&lt;br /&gt;The authors claims a technique to calculate depth values for an image.&lt;br /&gt;&lt;br /&gt;3) What are the good points of the paper? Why might it be accepted? What did the author do right?&lt;br /&gt;&lt;br /&gt;The results of the work are well presented and the related work are clearly stated.&lt;br /&gt;&lt;br /&gt;4) What are the bad points of the paper? Why might it be rejected? How might the author improve their work?&lt;br /&gt;&lt;br /&gt;Please also provide a justification for the scores you have provided in each of the following areas:&lt;br /&gt;&lt;br /&gt;Audience Appeal (1 - bad, 6 - good):&lt;br /&gt;&lt;br /&gt;The paper is clearly structured and easy to follow. It may be of interest to researchers in the fields of Computer Vision and Image Processing.&lt;br /&gt;&lt;br /&gt;Significance (1 - bad, 6 - good):&lt;br /&gt;&lt;br /&gt;The contribution of this work may be considered incremental in nature.&lt;br /&gt;&lt;br /&gt;Originality (1 - bad, 6 - good):&lt;br /&gt;&lt;br /&gt;The work has some novel aspects including the segmentation of the iso-depth region.&lt;br /&gt;&lt;br /&gt;Presentation (1 - bad, 6 - good):&lt;br /&gt;&lt;br /&gt;The paper is well presentated and each section is clearly linked.&lt;br /&gt;&lt;br /&gt;Validity (1 - bad, 6 - good):&lt;br /&gt;&lt;br /&gt;The results showed in the paper are strong evidence to the validity.&lt;br /&gt;&lt;br /&gt;Recommendation (1 - bad, 6 - good):&lt;br /&gt;&lt;br /&gt;The paper should be accepted.&lt;br /&gt;&lt;br /&gt;Any other comments to make to the authors: &lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-6836668693839566699?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/6836668693839566699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2010/03/exploring-frequency-space.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/6836668693839566699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/6836668693839566699'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2010/03/exploring-frequency-space.html' title='exploring frequency responses for focus'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3036/2619509269_520086c82a_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-372943613312845751</id><published>2010-03-05T23:25:00.003Z</published><updated>2010-03-05T23:40:17.396Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='procedural'/><category scheme='http://www.blogger.com/atom/ns#' term='cityengine'/><title type='text'>procedural Inc are looking for a computer vision expert!</title><content type='html'>&lt;div&gt;&lt;a href="http://www.procedural.com/company/career.html"&gt;Source.&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Procedural create CityEngine, one of the few useful procedural urban tools around. Does this mean that they are looking for an easier way to create models of buildings? Reconstruction from street photographs? From aerial photographs? Why not from existing meshes (from video game artists)?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Image-based Street-side City Modeling  &lt;b&gt;(&lt;/b&gt;&lt;/i&gt;&lt;a href="http://web.mit.edu/jxiao/Public/publication/2009/TOG/paper_high-res.pdf"&gt;&lt;i&gt;&lt;b&gt;pdf&lt;/b&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;b&gt;)&lt;/b&gt;&lt;/i&gt; from Sigg09 shows some of the potential of this direction.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'll be looking forward to seeing what these guys do next.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_wceYeHJ7bn0/S5GTERQSTWI/AAAAAAAAAu4/Z5RG4Vv_6L8/s1600-h/proc.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 320px;" src="http://3.bp.blogspot.com/_wceYeHJ7bn0/S5GTERQSTWI/AAAAAAAAAu4/Z5RG4Vv_6L8/s400/proc.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5445295126028111202" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-372943613312845751?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/372943613312845751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2010/03/procedural-inc-are-looking-for-computer.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/372943613312845751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/372943613312845751'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2010/03/procedural-inc-are-looking-for-computer.html' title='procedural Inc are looking for a computer vision expert!'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wceYeHJ7bn0/S5GTERQSTWI/AAAAAAAAAu4/Z5RG4Vv_6L8/s72-c/proc.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-71922732534249033</id><published>2010-03-03T16:08:00.000Z</published><updated>2010-03-03T16:09:06.864Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='first'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><category scheme='http://www.blogger.com/atom/ns#' term='year'/><category scheme='http://www.blogger.com/atom/ns#' term='report'/><title type='text'>first year report</title><content type='html'>Sorry, it's been a little quiet around here recently. One of many reasons is that I put together my first year report (&lt;a href="http://www.dcs.gla.ac.uk/%7Etkelly/bits/first_year_report.pdf"&gt;updated pdf&lt;/a&gt;). Notes:.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;[edit] Having taken criticism from blog readers and supervisors alike, I've updated this. Some of the cut bits appear below - if you've already read it, don't bother reading it again, nothing significant has changed.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Some of the more interesting results from my time at ASU have been cut &lt;span style="font-style: italic;"&gt;for client confidentiality&lt;/span&gt;. This is getting quite annoying now, will try not to fall into non-disclosure hole again.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It's mainly a bunch of blog posts end on end.&lt;/li&gt;&lt;li&gt;It isn't really of the quality required for a thesis.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;object id="doc_638384592964365" name="doc_638384592964365" type="application/x-shockwave-flash" data="http://d1.scribdassets.com/ScribdViewer.swf" style="outline-color: -moz-use-text-color; outline-style: none; outline-width: medium;" height="600" width="100%"&gt;  &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="FlashVars" value="document_id=26952434&amp;amp;access_key=key-206ag0j2ou6esci5vic1&amp;amp;page=1&amp;amp;viewMode=list"&gt;   &lt;embed id="doc_638384592964365" name="doc_638384592964365" src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=26952434&amp;amp;access_key=key-206ag0j2ou6esci5vic1&amp;amp;page=1&amp;amp;viewMode=list" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" bgcolor="#ffffff" height="600" width="100%"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Bits that didn't make the cut:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Possible Theses&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here I present a few possible directions that I see my work progressing in. Because of the new ground that is being covered, posing these direction as theses is a little artificial at this point.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Procedural Workflow&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Useful procedural systems can be constructed by non-technical users&lt;/span&gt;&lt;br /&gt;Three dimensional modelling packages such as Wavefront's 3D Studio Max or Maya present artists with very complicated interfaces for the creation of 3D content. These systems include data flows, such as 3DSM's hypergraph which allows different properties of a material to be edited, and construction histories. It should be possible to build a system of similar complexity, that can be used by 3D artists to enable them to build procedural objects. This would involve investigating subjects such as intelligent primitives (such as blobby objects or z-spheres), the generative modelling language (GML), and current 3D workflows.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Reverse proceduralization&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Reverse engineering real world or artist created objects allows for effective proceduralization of geometry&lt;/span&gt;&lt;br /&gt;From a design perspective reverse proceduralization, or reverse engineering allows artists to use their current tools to create a single instance, and then perform proceduralization as an after-thought. This would give the easiest integration into the current workflows of all proposed procedural solutions. Study in this subject would involve machine learning techniques to extract form from designs, after sufficient pattern-analysis has been performed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Floating Point Robustness&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;It is possible to perform robust geometrical computations in a floating point environment.&lt;/span&gt;&lt;br /&gt;One of the upshots of my work with the straight skeleton and the Voronoi tessellation is the realisation of how hard it is to work with geometry in a floating point environment. I found that the vast majority of my time was concerned with robustness issues. For example a point that is on one side of a line can appear on the other if the calculation is repeated with an indentical line travelling in the opposite direction.&lt;br /&gt;&lt;br /&gt;There are well known limits, within which standard geometric queries fail to behave in a predictable fashion. The result is quite chaotic, and makes designing robust algorithms both time consuming and bug-prone.&lt;br /&gt;&lt;br /&gt;There are several attempts to make computational geometry more robust, but I've found none to make it easier. The ideal goal here would be to create an library that an undergraduate could use for robust geometric manipulation, in place of &lt;a href="http://www.cgal.org/"&gt;CGAL&lt;/a&gt; or similar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-71922732534249033?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/71922732534249033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2010/02/first-year-report.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/71922732534249033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/71922732534249033'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2010/02/first-year-report.html' title='first year report'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-8045700266025702786</id><published>2010-02-11T11:18:00.008Z</published><updated>2010-02-24T17:43:12.276Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='emergent'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><title type='text'>emergent behaviour papers</title><content type='html'>&lt;b&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;After &lt;a href="http://www.youtube.com/view_play_list?p=664F2AE1160FF884"&gt;this&lt;/a&gt; (&lt;b&gt;&lt;div style="display: inline ! important;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;a href="http://www.bbc.co.uk/programmes/b00pv1c3"&gt;bbc&lt;/a&gt;)&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt; fantastic documentary, I thought I should restart my reading in this area. More to come!&lt;/span&gt;&lt;/div&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;Computations at the Edge of Chaos: Phase Transitions and Emergent Computation (&lt;a href="http://www.sciencedirect.com/science/article/B6TVK-46G4VN3-5/2/ba78385fe3d12571ab9b97f04093b9be"&gt;Physica D&lt;/a&gt; | &lt;a href="http://www.blogger.com/www.romanpoet.org/223/Langton.EdgeOfChaos.pdf"&gt;pdf&lt;/a&gt;  | &lt;a href="http://portal.acm.org/popBibTex.cfm?id=87520&amp;amp;ids=J614.87506.87520&amp;amp;types=periodical.issue.article&amp;amp;reqtype=article&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=75799939&amp;amp;CFTOKEN=74443993"&gt;bib&lt;/a&gt; | 2002 )&lt;br /&gt;&lt;/b&gt;Chris Langton&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/some_lambda.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/some_lambda.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This paper examines the behaviour of Cellular Automata (CA) as one property of their rule-set changes. It is the first description of emergent behaviour occurring somewhere on the spectrum from a dull, homogeneous environment to a random, chaotic one.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The variable that is changed is lambda, a statistical variable saying how likely it is to end up in an "active" state. That is, what fraction of rules lead to a cell becoming active. As the above image shows, as lambda changes, so does the typical output patterns. These changing patterns are what first attracted me to the paper (useful for procedural?!), but the real significance is that really interesting patterns only occur for a limited range of lambda values. Too low and we don't get anything happening (deep space), too high and all we see is Chaos (center of the sun). Between we get "just right", where interesting CA's live.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Computationally we see that we need storage and transmission to get interesting systems. Storage leads to homogeneous environments (low entropy), and transmission to chaos (high entropy). Both are required for meaningful computation, and we only see them both in small parts of the range of possible CA's.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This paper caused me to put &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/A_New_Kind_of_Science"&gt;A New Kind of Science&lt;/a&gt;&lt;/i&gt; onto my must-read list.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Reverse engineering of spatial patterns in cellular automata ( &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://www.springerlink.com/content/177285351h310557/"&gt;springer&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | pdf | 2008 )&lt;/span&gt;&lt;br /&gt;Yuuichi Ichise &amp;amp;  Yoshiteru Ishida&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/duh.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; height: 200px;" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/duh.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is a short paper that describes how to reverse engineer a CA from the results. They use the algorithm that you'd imagine, taking each observed result and filling in an entry in the rule-table. They also explore reverse engineering probabilistic CA's by accumulating the observed instances of each each particular rule. In both PCA (probabilistic cellular automata) and CA's case they return a CA with unknowns in the case that there is no example data. The important observation is that if there is insufficient data, there are a set of CA's that will reproduce a given pattern.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-8045700266025702786?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/8045700266025702786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2010/02/emergent-behaviour-papers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/8045700266025702786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/8045700266025702786'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2010/02/emergent-behaviour-papers.html' title='emergent behaviour papers'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-3506677955097879607</id><published>2010-01-22T20:54:00.003Z</published><updated>2010-11-25T13:58:01.114Z</updated><title type='text'>evaluation papers</title><content type='html'>There are many questions around evaluating the results from procedural graphics. I while back I wrote up the following notes about a couple of evaluation papers from recent graphics journals.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How Well Do Line Drawings Depict Shape? ( &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://www.cs.princeton.edu/gfx/pubs/Cole_2009_HWD/cole_2009_hwd.pdf"&gt;pdf&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://www.cs.princeton.edu/gfx/pubs/Cole_2009_HWD/index.php"&gt;web&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | acm | 2009 )&lt;/span&gt;&lt;br /&gt;Forrester Cole, Kevin Sanik, Doug DeCarlo, Adam Finkelstein, Thomas Funkhouser, Szymon Rusinkiewicz, Manish Singh&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/screw.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 372px; height: 193px;" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/screw.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This paper is the reverse of last year's attempt - it asks a sample of people to guess the curvature of a set of objects from line drawings.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;however there is little scientific evidence in the literature for these observations. Moreover, while a recent thread of the computer graphics literature devoted to the automatic algorithms for line drawings is flourishing, to date researchers have had no objective way to evaluate the effectiveness of such algorithms in depicting shape.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;There are a bunch of different ways to generate contours for an image:&lt;div&gt;&lt;ul&gt;&lt;li&gt;suggestive contours - marginal occluding contours (appear with small POV change)&lt;/li&gt;&lt;li&gt;ridges and valleys - local maxi-minima of surface curves&lt;/li&gt;&lt;li&gt;apparent ridges - view dependent ridges and valleys&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Bonus points for mentioning Team Fortress 2 and using NPR (non photorealistic rendering).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Psychophysics defines a gauge figure - a 2d representation of a thumbtack with the spike giving the normal direction - there's a body of previous work of asking people to guess normals from outlines etc... These are the little brown dots in the above image.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The study then involved asking 560 people to position 275,000 gauges on different line drawings, to get an idea of the perceived surface direction.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;An interesting idea here is the use of Amazon's Mechanical Turk to get lots of people to participate in the activity, in return for a micropayment. Basically there is very little control over the environment in which someone encounters the game - &lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;there may be someone at the next desk playing the game, so you might be able to sneak a look at other representations of the same object&lt;br /&gt;&lt;/li&gt;&lt;li&gt;there might be all sort of distractions (cat walking on the keyboard)&lt;/li&gt;&lt;li&gt;visual display will not be calibrated in the same way (different gamma curves may lead to different perceptions of normals?)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;However, these situations are quite rare and more than likely compensated for by the large volume of data produced. It's kind of exciting that this method of data collection is considered scientific enough for publication.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The study compensates for the "bas-relief" effect (assumed projection by the viewer) by scaling the results to a standard depth.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The results look solid - more ambiguous figures had a higher deviation from the median surface normal.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The occluding contour technique was worse than the others, with the other line drawing techniques being about equal. Comfortingly a 3D rendered/shaded image gave better results than all the line drawings.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A more detailed analysis of contentious areas of the models was performed and gave the interesting conclusion that sometimes and artist's representation was more reliable (the above computer generated image of a screwdriver has dark brown gauges showing ambiguity in the surface direction), but sometimes they over did it and gave the wrong impression. In these cases the computer generated outlines were better.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://en.wikipedia.org/wiki/Mann-Whitney_U_test"&gt;Wilcoxon/Mann-Whitney&lt;/a&gt; is a non-parametric test for comparing distributions that I hadn't stumbled across before.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Toward Evaluating Lighting Design Interface Paradigms for Novice Users ( &lt;a href="http://www.cs.dartmouth.edu/%7Efabio/papers/lightui09.pdf"&gt;pdf&lt;/a&gt; | acm | 2009 )&lt;/span&gt;&lt;br /&gt;William B. Kerr,  &lt;a href="http://www.cs.dartmouth.edu/%7Efabio/publications.html"&gt;Fabio Pellacini&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/lighting.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 768px; height: 132px;" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/lighting.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It turns out there are a few interfaces for defining lighting in a 3d scene:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;direct (Maya/3DSMax style) - drag lights around&lt;/li&gt;&lt;li&gt;indirect - drag the shadows, edge of lights, and their results around&lt;/li&gt;&lt;li&gt;painting - a constraint solution that optimizes the light's position to make the scene look most like a sketch you just coloured in (above, right two images)&lt;/li&gt;&lt;/ul&gt;This paper evaulates these different techniques, as used by untrained people. They ask them to match the lighting in an example (same geometry, rendering etc...) and in a still frame from a movie onto simple geometry.&lt;br /&gt;&lt;br /&gt;20 people are used, with 5 hours use per person (include warm up time...). The error differences between the rendered scenes are compared for the exact-match trial, while the movie-scene sections are evaluated in a more subjective manner. The results are also recorded over time, allowing the authors to graph how long each technique takes to converge.&lt;br /&gt;&lt;br /&gt;They also do a questionnaire:&lt;br /&gt;&lt;ol style="font-style: italic;"&gt;&lt;li&gt;Natural way to think about lighting&lt;/li&gt;&lt;li&gt;ease of determining what to modify (selection)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;how it should be modified (intention)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;carryout the adjustment&lt;/li&gt;&lt;li&gt;preference on few lights&lt;/li&gt;&lt;li&gt;many lights&lt;/li&gt;&lt;li&gt;preference in matching trials (goal image)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;open trials (no goal image)&lt;/li&gt;&lt;li&gt;overall preference.&lt;/li&gt;&lt;/ol&gt;The general results was that the newer technique, painting doesn't do so well, and that direct and indirect illumination are better. Between direct and indirect, indirect gets to the result fastest.&lt;br /&gt;&lt;br /&gt;The two statistical tools used are&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Repeated Measures ANOVA (&lt;a href="http://scholar.google.com/scholar?q=Applied+Multivariate+Statistics+for+the+Social+Sciences&amp;amp;hl=en&amp;amp;client=firefox-a&amp;amp;rls=com.ubuntu:en-US:unofficial&amp;amp;hs=J2n&amp;amp;num=100&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;oi=scholart"&gt;book&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Friedman_test"&gt;Friedman test&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-3506677955097879607?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/3506677955097879607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2010/01/evaluation-papers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/3506677955097879607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/3506677955097879607'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2010/01/evaluation-papers.html' title='evaluation papers'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-1536892779121362106</id><published>2009-12-04T16:21:00.005Z</published><updated>2009-12-05T14:36:33.195Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='evaluation'/><category scheme='http://www.blogger.com/atom/ns#' term='urban'/><category scheme='http://www.blogger.com/atom/ns#' term='procedural'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><title type='text'>but which is procedural?</title><content type='html'>&lt;div style="padding: 3px; text-align: center;"&gt;&lt;div style="text-align: left;"&gt;Comparison of a procedural city and a photo of a city: which is which? How long did you have to look?&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/3387467585/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3656/3387467585_75c98b4572.jpg" alt="compare" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The procedural image (of a reconstructed Pompeii) was from &lt;a href="http://www.procedural.com/"&gt;Procedural Inc&lt;/a&gt; (&lt;span style="color: rgb(255, 255, 255);"&gt;right&lt;/span&gt;), the &lt;a href="http://www.flickr.com/photos/44124324682@N01/1828159588/"&gt;photo&lt;/a&gt; was by &lt;a href="http://www.flickr.com/photos/44124324682@N01/"&gt;mharrsch&lt;/a&gt; (&lt;span style="color: rgb(255, 255, 255);"&gt;left&lt;/span&gt;). Highlight this paragraph in your browser for the answer! Filter was a quickie "photocopy" in gimp.&lt;br /&gt;&lt;br /&gt;The lack of real scientific method in computer science is quite apparent in fast moving and new fields, like procedural modelling. Evaluating procedural content has been an ignored subject in the journals, there is very little said about the quality or the believability of the output of a procedural system. In contrast lots is said about the number of processor cycles or the lack of artist involvement. This a sketch of a project that hopes to address this issue. We can the above idea turn this into a web-game (similar to the &lt;a href="http://images.google.com/imagelabeler/"&gt;google image labeller game&lt;/a&gt;) that challenges people to spot the fake photograph in a certain time, and rewards them with points for being right.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4157480293/" title="which is real game by twak, on Flickr"&gt;&lt;img style="width: 370px; height: 364px;" src="http://farm3.static.flickr.com/2578/4157480293_032170545b.jpg" alt="which is real game" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;Going even further we can build a competitive game that find the realistic and unrealistic areas of an image by asking you to attempting to fool your opposition. The computer invents a goal ("prove to your opposition that this is a real photo"), and you get points for doing it. The more of the image you reveal, the less points you get. When it's your turn, you see an image slowly revealed as your opponent reveals the bits he can see. You have to decide if it's a photo or a render (in this case). It could create a "believability" map of each image by examining the areas scratched off by the subjects. The following example just asks the user to distinguish between a render and a photograph but by using a filter that obscures the geometry (such as the photocopies in the above example) it would be possible to compare procedural &amp;amp; artist-defined geometry.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4157518669/" title="is this real by twak, on Flickr"&gt;&lt;img style="width: 373px; height: 293px;" src="http://farm3.static.flickr.com/2647/4157518669_1817ec35c4.jpg" alt="is this real" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Images for this were stolen from this &lt;a href="http://designdipp.wordpress.com/2009/04/09/ancient-cg-secrets/"&gt;guy&lt;/a&gt;. Video (or on &lt;a href="http://www.youtube.com/watch?v=VtWkTSFgRbg"&gt;youtube&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/VtWkTSFgRbg&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/VtWkTSFgRbg&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You can play a simulated ("offline") version of this game by clicking &lt;a href="http://dcs.gla.ac.uk/~tkelly/bits/scratch/launch.jnlp"&gt;here&lt;/a&gt; (Java 1.6 needed, binary file - run at your own risk). Your own moves are played back when it's your turn to guess. There is an option to add image noise to make the game harder to play.&lt;br /&gt;&lt;br /&gt;This is one of the most promising avenues of exploration I've thought of when it comes to evaluating procedural modelling systems. Of course it is very hard to count the contributions from the artist and from the procedural mechanisms. To solve this some sort of test of artist generated geometry against procedurally generated content may be called for. In both cases we would record the quantity of programmer/artist time taken to create a scene, and then evaluate it. The hope would be that the procedural models show comparable realism, while absorbing many fewer man-hours.&lt;br /&gt;&lt;br /&gt;Future ideas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Could do this for videos&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Could render examples from a procedural model in real time, get feedback on them, and update the model automatically. This kind of technology ("which parts of these models represent the door knobs that the guy scratched out?") is a few years away yet...&lt;/li&gt;&lt;li&gt;Add in distractors (trees, people, lens flare, motion blur) to allow a fair test against a random selection of architecture photos (&lt;a href="http://www.flickr.com/search/?s=int&amp;amp;w=all&amp;amp;q=architecture&amp;amp;m=text"&gt;from flickr&lt;/a&gt;, say).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Let me know if you think this is an interesting project, and have some ideas for carrying the idea further. It should make a half decent paper when written up.&lt;br /&gt;&lt;br /&gt;One of the biggest problems with this is that there aren't many examples of detailed procedural models. The Pompeii examples from Procedural is a couple of years old and is still one of the best/most complex examples. As the above image shows, it is only just detailed enough to make this test plausible. I had to hunt around on the web for a while to find a photo of Pompeii without too many people/clues etc... to make the above a reasonable comparison.&lt;br /&gt;&lt;br /&gt;It's getting harder and harder to tell rendered images from &lt;span style="font-style: italic;"&gt;photos&lt;/span&gt;, if you look at the top right of this image of houses in Glasgow (park circus), it's hard to tell it's just a photograph. The houses were being refurbished, so no people to leave distinguising features, and they had just been cleaned using sand-blasting.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3476923804/" title="park circus by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3341/3476923804_10452aabe0.jpg" alt="park circus" height="251" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-1536892779121362106?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/1536892779121362106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/03/compare.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/1536892779121362106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/1536892779121362106'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/03/compare.html' title='but which is procedural?'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3656/3387467585_75c98b4572_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-7022988265421267489</id><published>2009-12-02T22:42:00.002Z</published><updated>2010-05-25T11:47:16.516Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='concave'/><category scheme='http://www.blogger.com/atom/ns#' term='weighted straight skeleton'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><title type='text'>skeleton project progress</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;a href="http://twak.blogspot.com/2009/10/skeleton-index-page.html"&gt;[straight skeleton post index]&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I can't say a lot about the skeleton project*, however, we got a very rushed paper together that was rejected, but we got some nice renders (and a whole bunch of feedback) about on the work. A few sneaky pictures follow :) as ever, they were all made with the &lt;a href="http://twak.blogspot.com/2009/10/matte-renders-in-blender.html"&gt;blender render template&lt;/a&gt; I've made, and rendered in &lt;a href="http://www.yafaray.org/"&gt;yafaray&lt;/a&gt;. Basic idea is a &lt;a href="http://twak.blogspot.com/2009/10/skeleton-index-page.html"&gt;straight-skeleton&lt;/a&gt; based rapid prototyping tool for architecture. At a stretch it could even be called procedural.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3955170096/" title="house of horrors by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3248/3955170096_e0942cef03.jpg" alt="house of horrors" height="400" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;I was worried the paper-reviewers would complain about the artsy backgrounds to the renders, however that was the one part of the work that wasn't panned. Most of the backgrounds were my own photos, many from &lt;a href="http://www.flickr.com/photos/twak/sets/72157606851463031/"&gt;this flickr set&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3968840523/" title="multi by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3507/3968840523_4794c29150.jpg" alt="multi" height="500" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;Something that took longer than it should have, but really makes these renders special is the tiling. Each tile on the roof is a polygon, and it basically involved writing an old-school rasterizer so each roof edge could position it's tiles. Never got around to creating tiles for the roof edges tho - so it looks like they are all made out of cardboard, which is really cute and make them look like real architectural models.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- first anon comment from wickie.cs.uni-magdeburg.de (141.44.27.95) [Label IP Address] No referring link --&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;*that's one thing about working with collaborators, I've got to protect their investments as well as mine. Yes that means we're going to make this project even more awesome and try again.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-7022988265421267489?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/7022988265421267489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/12/skeleton-project-progress.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7022988265421267489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7022988265421267489'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/12/skeleton-project-progress.html' title='skeleton project progress'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3248/3955170096_e0942cef03_t.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-424562443643747656</id><published>2009-11-19T17:45:00.002Z</published><updated>2009-11-19T17:59:55.582Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='straight skeleton'/><category scheme='http://www.blogger.com/atom/ns#' term='weighted straight skeleton'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><title type='text'>higher dimensional skeletons</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;a href="http://twak.blogspot.com/2009/10/skeleton-index-page.html"&gt;[more straight skeleton posts]&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;from &lt;span style="font-style: italic;"&gt;Weighted skeletons and fixed-share decomposition&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; ( Aurenhammer | 2007 | &lt;a href="http://http://www.igi.tugraz.at/auren/psfiles/a-wsfsd-07.ps.gz"&gt;ps&lt;/a&gt; | &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://http//dx.doi.org/10.1016/j.comgeo.2007.08.002"&gt;doi&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; )&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Higher dimensions&lt;br /&gt;&lt;br /&gt;The concept of weighted skeleton (or weighted medial axis) is not limited to two dimensions. Given a convex polytope P in Ęd and an assignment of positive weights to its facets, a unique convex cell complex inside P can be defined, either by the respective shrinking process, or based on weighted distances to the hyperplanes that support P. In fact, the decomposition and optimality results presented in Section 3 and Section 4, respectively, directly generalize to higher dimensions.&lt;/blockquote&gt;Thusly we may draw:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4117951020/" title="dimensionality by twak, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2547/4117951020_0d943feab9.jpg" alt="dimensionality" height="500" width="370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Fun thing here is to compare what happens through the dimensions and see how high you can go before your head explodes. Also what the procedural modeling ramifications of each step are.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-424562443643747656?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/424562443643747656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/11/higher-dimensional-skeletons.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/424562443643747656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/424562443643747656'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/11/higher-dimensional-skeletons.html' title='higher dimensional skeletons'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2547/4117951020_0d943feab9_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-1208963935802789271</id><published>2009-11-07T09:24:00.005Z</published><updated>2010-11-27T14:31:57.821Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='cw'/><category scheme='http://www.blogger.com/atom/ns#' term='Sony cw'/><title type='text'>very dull video of the sony cw</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/1H5QicR_X-k&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/1H5QicR_X-k&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here's a long, uninteresting video of the Sony Vaio CW booting Ubuntu (64 bit, wifi not a problem, but the video took a little work for the nVidia drivers how to in &lt;a href="http://www.nvnews.net/vbulletin/showpost.php?p=2118873&amp;amp;postcount=22"&gt;this &lt;/a&gt;post), then it shows the splash-top an instant-on web browser (that takes about to long to boot as the other operating systems take to come out of standby). This works well (flash videos play fullscreen), and I wave the screen around a bit to show the not-so-great viewing angle, but great brightness compared to my old powerbook laptop. Finally we see it booting windows 7, which is very pretty and does everything it should do.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;What I didn't manage to show was the rattling battery. There's half a millimeter or so of space around it, and it doesn't lock into place properly. You don't notice it when you're using the laptop, but it's annoying when you're packing the laptop up.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Still really liking this 'top. A bit to much shiny-toy plastic, but generally responsive and enjoyable to use. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Video was taken inside, with indoor lighting, on a canon 500d. Sorry for the shaky bits.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[edit:] One year on, and generally I've loved this laptop. It now runs only windows (*nix is for work, windows for play), for video games. But just before the (international!) year's warranty ran out I had to get the the screen and the power-socket on the laptop fixed. The screen was graying out when  you moved the monitor and it suffered from the classic Vaio fault of needing the power lead held to one side to charge. I was, however, impressed by the speed and ease of the returns process tho (apart from the premium rate number you had to call to arrange collection).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-1208963935802789271?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/1208963935802789271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/11/very-dull-video-of-sony-cw.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/1208963935802789271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/1208963935802789271'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/11/very-dull-video-of-sony-cw.html' title='very dull video of the sony cw'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-2804847508581411154</id><published>2009-10-29T05:07:00.020Z</published><updated>2009-11-11T03:08:44.644Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sony cw'/><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'>sony cw "notebook"/laptop first thoughts</title><content type='html'>&lt;div style="text-align: left;"&gt;[video &lt;a href="http://www.youtube.com/watch?v=1H5QicR_X-k"&gt;here&lt;/a&gt;]&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;It's a bit early for a full review, but here are some of my first thoughts about this shiny machine. I decided I couldn't justify a mac this time, so I got a &lt;a href="http://www.sonystyle.com/webapp/wcs/stores/servlet/CategoryDisplay?catalogId=10551&amp;amp;storeId=10151&amp;amp;langId=-1&amp;amp;categoryId=8198552921644659494&amp;amp;N=4294954315"&gt;Sony CW&lt;/a&gt; with 4Gb memory, a nVidia GT230M and the Core 2 Duo T6600 2.2G.  This is a replacement for my 12" PowerBook G4, so there'll be some unfair comparisions to a five year old machine. After not giving us Java 6 for powerPC's and having the mac repaired 4 or 5 times, I didn't think all the shinyness was worth the 50% price premium. For a 15% premium I can get a Sony machine! This was written roughly in the order that I experienced it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4055271988/" title="sappy or appony? by twak, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2497/4055271988_8d095dc793.jpg" alt="sappy or appony?" height="500" width="333" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4055271988/" title="sappy or appony? by twak, on Flickr"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/4055282174/" title="IMG_0443 by twak, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2640/4055282174_d32abdc335.jpg" alt="IMG_0443" height="333" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;old mac on the left, new sony on the right (&lt;/span&gt;&lt;a style="font-style: italic;" href="http://farm3.static.flickr.com/2640/4055282174_29d05a60e6_o.jpg"&gt;bigger&lt;/a&gt;&lt;span style="font-style: italic;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Unboxing - okay, so sony isn't apple. The box was a little goofy - the logo on the top is upside down when you figure out how to open it. The box then unfolds like a crab, before throwing the power adaptor and battery onto the floor. A couple of slim manuals, but no CD's in the box - guess there's no chance of a windows reinstall then. Academic Alliance (aka "the please don't use linux fund") to the rescue. &lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4054536545/" title="IMG_0407 by twak, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2711/4054536545_42570aed8c.jpg" alt="IMG_0407" height="500" width="333" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/4054537715/" title="IMG_0415 by twak, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2451/4054537715_ab84f93b9e.jpg" alt="IMG_0415" height="333" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;That's all there is in the box. On my bed ;)&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I managed to fumble and push the "web" button on the laptop after installing the battery. After a couple of seconds pause, it booked to the spashtop (a linux distro running firefox?) very quickly. The browser was quite active and functional - happily playing youtube videos. Hopefully this will make running Ubuntu easier as there have to be drivers around.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The keyboard is great - not quite enough travel on the keys but very spacious and mac-esque (except the funtion and control buttons have switched place again!). The key-letters look a bit stuck on, and I'm sure they use too many fonts over the front of the computer for my typographic sensibilities. Just the usual range of garish stickers next to it. I wonder what it'll take to get them off... I've just come back to the paragraph, from the future to say I really like the keyboard :) Since this is going to be a coding machine, it's a good thing too.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Something strange about the delete rate - it removes entire sentences beforewith a light touch. I'm sure there's a setting somewehre to fix it. Ah yeah, in the Vaio settings, it's turned up all the way...&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4055283994/" title="IMG_0452 by twak, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2653/4055283994_e650136d2c.jpg" alt="IMG_0452" height="333" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;So just the usual keys on the board, plus four little ones under the screen (photo above) - a display-off button that seems to kill the (LED) backlight, a "Vaio button" that when I pushed just now started installing Sony's Media Gallery software, that then started probing my network for new media...won't do that again. The "web" button in windows seems to close the tab that I'm using to write this blog post and take me to Chrome's homepage. When the computer is off, the web button starts the nix splashtop for quickie web browsing sessions. I think they can all be remapped.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Trackpad is a little unresponsive compared to the mac, and doesn't seem to do multitouch (edit: thanks anon commenter - it does multitouch - it's just well hidden, and no nice two fingered scrolling) gestures, but decent enough. The right hand side of the pad does scrolling, but it seems a bit unsensitive (and brings up a really ugly mouse cursor in windows). In Chrome scrolling jumps down the screen, but in IE it's smooth but feels like there's quite a bit of lag.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4055281200/" title="IMG_0426 by twak, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2648/4055281200_6f7ff6bf33.jpg" alt="IMG_0426" height="399" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Wifi reception is great, the splashtop found a bunch of networks I'd never seen on the mac and the reception seems decent enough. Seems to stay quite cool too, as long as you don't spin that graphics card up! There are some quirks with the splashtop setup - the keymapping is wonky (@ and " are reversed, but since I alternate between keyboards with both conventions, it's easy enough to ignore) and if your laptop is in hibernating (doesn't work at all if in standby), it doesn't record your history. Also (as noted in the comments) there's no brightness control.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;After a restart the Windows7 desktop came up there was a nice suprise - google chrome was installed by default! Take that European Commission :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://2.bp.blogspot.com/_wceYeHJ7bn0/Sukjtf2ZyMI/AAAAAAAAAsU/CHCm_dU2XxY/s400/chrome.png" alt="" id="BLOGGER_PHOTO_ID_5397884892931016898" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 393px; height: 82px;" border="0" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some random sony rubbish, like the choice to get the "Sony" theme on the default home page (is this the reward from google for bundling with chrome?). .&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Windows 7. Not really a fan of windows in general, but it hasn't got in my way yet. It even looks quite pretty. Apart from a crash the first time it booted (well i did shut the lid as it was booting - i had to look at the shiny case one last time), I've rather enjoyed it. Still I'd rather not run the thing until the first service pack (50Mb of urgent updates already....), will get going on Ubuntu later today. I think windows is still running NTFS, so should be able to share a big partition between the two.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next up was putting the graphics card through it's paces. It's a nVidia GT 230M behind that beast of a vent on the left hand side, since I do a fair bit of graphics I thought it was worth the $100 upgrade to a card that could at least pretend to do 3d.  Best thing is it can run Cuda code - that might be useful in the future. DirectX wasn't isntalled (strangely enough - surprised it isn't part of window these day). The &lt;a href="http://www.nzone.com/object/nzone_medusa_home.html"&gt;Medusa demo&lt;/a&gt; from nVidea ran at between 7 and 20fps. Tho mostly 7fps. I guess this would improve with some updated drivers, and after nVidia has a chance to figure out Windows7. But it still looked mighty impressive on screen.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Having some issues with the charger - after i installed some windows update it complained about low battery, and however i giggled the charger, and whatever i plugged/unplugged it wouldn't charge. I brought it into the kitchen, and restarted and it seems fine now. Ah, got it - the led on the power brick takes a long time to go out, just need to fight a tighter fitting wall socket!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4055290562/" title="IMG_0429 by twak, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2530/4055290562_c81bfa5884.jpg" alt="IMG_0429" height="333" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Screen is impressive, the LED backlight makes a real difference, and the brightness is comparable to the screen on my desktop machine. Not sure I like the glossyness, I suspect it's a ploy to get you to buy a screen filter, but it's what all the cool kids are using so I guess I'll have to get used to it. It's going to take a few weeks before I know that I like the widescreen format, but movies look awsome on it! The HDMI out is enough to drive my 24" monitor with the right cables. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4054527537/" title="IMG_0436 by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3510/4054527537_cab8878819.jpg" alt="IMG_0436" height="333" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hmmm.... all those little sticky labels that come on a new laptop have very different levels of stickability. The energy star and windows7 came off easily, the nVidia one was a bit more stubborn, but the intel one left a nasty glob on the glossy surface that's going to take some detergent to get off property.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So already it's covered in fingerprints, but that was expected, so I'm not too concerned. My gear tends to gets used, so I'm not going to complain again a few prints. It's also picking up white cat hair like there's no tomorrow, but I guess that's my fault for not ordering the white one. Who knows why i would want the red one - chronic nose bleeds?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Theres not much bloatware at all - jsut the usual MS office trial and a couple of antivirus trials. And there are actually useful apps like acrobat reader and Chrome already installed. But there is a fair bit of marketing pomp. I'm now fed up with the Vaio logo (it's everywhere) and there's a strange button on the start bar that brings up a screen that announces that it's a "Sony Vaio CW series with Virbrant color inside and out", and tells me how much it weighs. I don't think it's got a weight sensor (am now pushing on it to make sure).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sleep works nicely - it suspends in a couple of seconds and comes back when you press the power button.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I can't quite get used to the two USB ports on the left hand side being toward the front of the computer. I'm used to holding onto the computer there. I guess they got moved forward to make room for the massive (gpu?) vent on theleft side at the back - This baby's much wider towards the back than the front, and this makes for nice photoshoots, and makes it feel smaller than it is. It also slopes the keyboard toward you a little, but this isn't really a bad thing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Overall the build quality is decent, not quite a unibody mac, but I wasn't expecting it. It looks like it'll take the shocks and spills that I'll no doubt give it. Everything feels very rigid, with a bit of give in the wrist rest, but not a lot. Speakers aren't up to much. System is real quiet, so you really notice when that CD/DVD (there's no way i was paying for blue ray drive) drive spins up.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Final word: so far it's exactly what I hoped for. With a decent screen :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Comedy quote from the control panel - "Using a white color for your desktop saves power" - Hold on, you're telling me that it uses less power to emit more energy?! This LED technology is going to take some getting used to!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;[edit:]&lt;br /&gt;Now have it set up nicely to boot &lt;a href="http://twak.blogspot.com/2009/11/very-dull-video-of-sony-cw.html"&gt;Ubuntu&lt;/a&gt; as well as win7!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-2804847508581411154?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/2804847508581411154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/10/sony-cw-notebook-first-thoughts.html#comment-form' title='22 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/2804847508581411154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/2804847508581411154'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/10/sony-cw-notebook-first-thoughts.html' title='sony cw &quot;notebook&quot;/laptop first thoughts'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2497/4055271988_8d095dc793_t.jpg' height='72' width='72'/><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-6954162754418777977</id><published>2009-10-27T13:29:00.001Z</published><updated>2011-12-04T07:42:36.008Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='symmetry'/><category scheme='http://www.blogger.com/atom/ns#' term='procedural'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><category scheme='http://www.blogger.com/atom/ns#' term='papers'/><title type='text'>symmetry papers</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Symmetry is a very much under-explored area in procedural modelling. Here's some papers talking about things you can do with it.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;b&gt;Constructing Regularity Feature Trees for Solid Models ( &lt;/b&gt;&lt;a href="http://dx.doi.org/10.1007/11802914_19"&gt;&lt;b&gt;doi&lt;/b&gt;&lt;/a&gt;&lt;b&gt; | &lt;/b&gt;&lt;a href="http://www.springerlink.com/content/hk772754j1864383/"&gt;&lt;b&gt;springer&lt;/b&gt;&lt;/a&gt;&lt;b&gt; | 2006 )&lt;/b&gt;M. Li, F. C. Langbein  and R. R. Martin&lt;br /&gt;&lt;div&gt;&lt;a href="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/feature_tree.png"&gt;&lt;img alt="" border="0" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/feature_tree.png" style="cursor: pointer; display: block; height: 151px; margin: 0px auto 10px; text-align: center; width: 437px;" /&gt;&lt;/a&gt;&lt;br /&gt;"Reverse Engineering" is a phrase I normally associate with software engineering, but in the geometric-meaning of the word, it's used to describe recovering the structure from a model. Typically, given a mesh, you want to find out which primitives were combined to create the mesh.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This paper takes the approach that you have a 3D mesh and want to recreate the constructive-solid-geometry primitives and operations used to create that mesh.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The idea is to identify recoverable vertices, edges and faces that the original mesh hints at. These might be external to the volume defined by the mesh, or internal. This is done by intersecting existing features (such as edges or faces) to recovered features (such as vertices or edges).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's an additional &lt;a href="http://www.langbein.org/fileadmin/research/solids/did/langbein2008.pdf"&gt;note&lt;/a&gt; that gives more credit to &lt;a href="http://www.rci.rutgers.edu/~mleyton/Generative.htm"&gt;Leyton's book&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Partial and approximate symmetry detection for 3D geometry ( &lt;/span&gt;&lt;a href="http://data.agg.ethz.ch/publications/2006/mitra_2006_PAS.pdf" style="font-weight: bold;"&gt;pdf&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | &lt;a href="http://graphics.stanford.edu/~niloy/research/approx_symmetry/approx_symm_sig_06.html"&gt;web&lt;/a&gt; | &lt;a href="http://doi.acm.org/10.1145/1141911.1141924"&gt;doi&lt;/a&gt; | &lt;a href="http://graphics.stanford.edu/~niloy/research/approx_symmetry/paper_docs/approx_symmetry_sig_06.avi"&gt;video&lt;/a&gt; | 2006 )&lt;/span&gt;&lt;br /&gt;Niloy J. Mitra, Leonidas J. Guibas, Mark Pauly&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/sym_analysis.png"&gt;&lt;img alt="" border="0" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/sym_analysis.png" style="cursor: pointer; display: block; height: 250px; margin: 0px auto 10px; text-align: center; width: 444px;" /&gt;&lt;/a&gt;&lt;br /&gt;The idea here is to define the symmetry as a set of parameters that we can define as points, and then cluster, to reveal the strongest symmetries. For example the equation of a line when looking for 2D reflection symmetries. These parameters can then be clustered and analysed for density to find the most common symmetry constraints. This would give an O(n^2) algorithm in the number of points analysed, however by quickly rejecting pairs biased on the local features (eg: the normals around a point aren't symmetrical over the proposed symmetry line), the number of points to compare is reduced by an order of magnitude.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/TUZEL1/MeanShift.pdf"&gt;Mean shift-clustering&lt;/a&gt; is used to merge nearby points. This walks uphill on a landscape of Gaussian-splatted data points. Because the Euclidean symmetry space used is 7 dimensional, there is little chance of the maxima converging. Clustering is needed because noisy input mesh is rarely perfectly symmetrical.&lt;br /&gt;&lt;br /&gt;To identify mesh patches from the located point pairs, corresponding pairs of input points are grown outwards while the symmetrical surface is within a given tolerance.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/basis_reduction.png"&gt;&lt;img alt="" border="0" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/basis_reduction.png" style="cursor: pointer; display: block; height: 206px; margin: 0px auto 10px; text-align: center; width: 397px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As the number of possible symmetries increase, it is desirable to compress the required symmetries to a minimal set. For example two "translate by 10" symmetries should be expressed as two "translate by 5" symmetries. This is process is&amp;nbsp;referred&amp;nbsp;to as "finding a reduced symmetry basis" (frame image, above).&lt;br /&gt;&lt;br /&gt;Convincing results, such as the decimation of the above castle mesh to 14% of it's original size (transparent boxes are removed data) make this an interesting technique.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Discovering Structural Regularity in 3D Geometry ( &lt;a href="http://www.geometrie.tugraz.at/wallner/structure.pdf"&gt;pdf&lt;/a&gt; | &lt;a href="http://doi.acm.org/10.1145/1399504.1360642"&gt;doi&lt;/a&gt; | &lt;a href="http://www.agg.ethz.ch/structure"&gt;web&lt;/a&gt; | 2008 )&lt;/span&gt;&lt;br /&gt;Mark Pauly, Niloy J. Mitra, Johannes Wallner, Helmut Pottmann, Leonidas Guibas&lt;br /&gt;&lt;a href="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/structural_regularity.png"&gt;&lt;img alt="" border="0" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/structural_regularity.png" style="cursor: pointer; display: block; height: 103px; margin: 0px auto 10px; text-align: center; width: 476px;" /&gt;&lt;/a&gt;&lt;br /&gt;This is an extension of the previous paper (&lt;span style="font-style: italic;"&gt;Partial and approximate symmetry detection for 3D geometry, &lt;/span&gt;above), presented a few years later. They use the symmetry matching techniques developed to reconstruct data from scattered point samples.&lt;br /&gt;&lt;br /&gt;We only consider scale, rotations and translations using one or two parameters - this assumption nicely decreases the number of degrees of freedom to compute. By identifying repeated  patches, and accumulating the possible transforms, it is possible to identify the parameters of the transform, even in noisy data. The paper discusses these as "generator functions", that take one (below left four examples) or two (right three examples) parameters, as the basis for symmetry.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/parameterized_sym.png"&gt;&lt;img alt="" border="0" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/parameterized_sym.png" style="cursor: pointer; display: block; height: 95px; margin: 0px auto 10px; text-align: center; width: 600px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A set of random patches from the surface are grouped according the their local feature descriptors (&lt;a href="ftp://ftp.inria.fr/INRIA/publication/publi-pdf/RR/RR-4823.pdf"&gt;polynomial fitting of osculating jets&lt;/a&gt;). Each of these are then locally aligned, and analysed in a cunningly designed space such that their two parameters will be revealed in a lattice (below in one dimension). By plotting all the found dimensions, the most frequent transform (T) becomes the most plotted location. We know the identity transform must be a member of the set of generator functions, and this limits the search space. An energy minimisation function/&lt;a href="http://en.wikipedia.org/wiki/RANSAC"&gt;RANSAC&lt;/a&gt; is then used to identify the lattice.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/accumulative_pattern.png"&gt;&lt;img alt="" border="0" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/accumulative_pattern.png" style="cursor: pointer; display: block; height: 264px; margin: 0px auto 10px; text-align: center; width: 602px;" /&gt;&lt;/a&gt;The results include reconstructing a castle and the Colosseum from partial point cloud data.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Symmetry Detection Using Line Features ( &lt;/span&gt;&lt;a href="http://www.gris.uni-tuebingen.de/people/staff/bokeloh/papers/SymmetryDetectionUsingFeatureLines.pdf" style="font-weight: bold;"&gt;pdf&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | &lt;/span&gt;&lt;a href="http://www.blogger.com/dx.doi.org/10.1111/j.1467-8659.2009.01410.x" style="font-weight: bold;"&gt;doi&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | &lt;/span&gt;&lt;a href="http://www.gris.uni-tuebingen.de/people/staff/bokeloh/project_symmetry2.html" style="font-weight: bold;"&gt;web&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; )&lt;/span&gt;&lt;br /&gt;M. Bokeloh A. Berner M. Wand H.-P. Seidel &amp;amp; A. Schilling&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/line_sym.png"&gt;&lt;img alt="" border="0" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/line_sym.png" style="cursor: pointer; display: block; height: 224px; margin: 0px auto 10px; text-align: center; width: 397px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The above papers cluster symmetries to identify them. However if two different symmetries are clustered together in symmetry space, they it becomes very difficult to separate.&lt;br /&gt;&lt;br /&gt;The routine take a cloud of points-with-normals and create feature identifiers, then then run a couple of loops through these identifiers looks for similar clusters of points to call symmetrical.&lt;br /&gt;&lt;br /&gt;The first step Poisson down-sample the input cloud to find points with one linear degree of slippage locally. That is they search for extruded (elongated) features, such as the edge of window frame or column. These are locally clustered into &lt;span style="font-style: italic;"&gt;bases,&lt;/span&gt; non-slippable graphs of local features. A RANSAC-like algorithm is then used to find similar bases over the model, while flipping a couple of the coordinates to account for mirroring. The features' curvatures are compared between bases to find compatible bases. Region growing maximizes each of these regions, and a geometry matching stage ensures that the base abstraction really matches the input point set. Because of the simplicity of the bases, and their tendency to be localized, many comparisons can be made.&lt;br /&gt;&lt;br /&gt;Once symmetry has between detected, the usual things can be done - holes filled, missing sections reconstructed, and data compressed.&lt;br /&gt;&lt;br /&gt;The system doesn't really find nested symmeteries, just repeated instances or flipped instances.&lt;br /&gt;&lt;br /&gt;Very curiously, in future work these guys mention&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;In future work, we would like to build morphable statistical models of symmetric parts to better represent subtle variations beyond the accuracy of the region growing algorithm&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;which is one of the thoughts I've been having a lot recently for generative, rather that reconstructive procedural modelling.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-6954162754418777977?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/6954162754418777977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/10/symmetry-papers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/6954162754418777977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/6954162754418777977'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/10/symmetry-papers.html' title='symmetry papers'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-8076223653492519579</id><published>2009-10-06T16:50:00.002Z</published><updated>2009-10-27T22:17:12.216Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='wss'/><category scheme='http://www.blogger.com/atom/ns#' term='straight skeleton'/><category scheme='http://www.blogger.com/atom/ns#' term='weighted straight skeleton'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><category scheme='http://www.blogger.com/atom/ns#' term='complexity'/><title type='text'>accelerating the straight skeleton</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;a href="http://twak.blogspot.com/2009/10/skeleton-index-page.html"&gt;[straight skeleton post index]&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;I've been investigating ways to accelerate the straight skeleton computation. In my implementation, the main problem is finding the next point where three sides of the "roof-shape" collide. In the below there are two such points ((abc) and (adc)), but the complexity becomes a killer on larger shapes.  Edges are removed, and added (by some of my contortions to the algorithm) as the algorithm continues.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3485170855/" title="examining_collisions by twak, on Flickr"&gt;&lt;img style="width: 402px; height: 413px;" src="http://farm4.static.flickr.com/3341/3485170855_f038c7ec36.jpg" alt="examining_collisions" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;0) &lt;span style="font-weight: bold;"&gt;Naive&lt;/span&gt;! Best start at the beginning, what my code does at the moment is intersect all pairs of adjacent edges against all other edges. This takes lots of time (n&lt;sup&gt;2&lt;/sup&gt;)  and space (n&lt;sup&gt;2&lt;/sup&gt;).&lt;br /&gt;&lt;br /&gt;1) &lt;span style="font-weight: bold;"&gt;Conga Lines&lt;/span&gt;. As Eppstein points out(&lt;span style="font-style: italic;"&gt;Raising Roofs, Crashing Cycles, and Playing Pool&lt;/span&gt; (&lt;a href="http://dx.doi.org/10.1007/PL00009479"&gt;doi&lt;/a&gt; | &lt;a href="http://compgeom.cs.uiuc.edu/%7Ejeffe/pubs/cycles.html"&gt;web&lt;/a&gt; | &lt;a href="http://www.ics.uci.edu/%7Eeppstein/projects/pairs/Talks/ClusterGroup.pdf"&gt;informal&lt;/a&gt; | Eppstein, Erickson | 1999 )), a conga line data structure provides a great way to track closest pair problems (&lt;a href="http://www.ics.uci.edu/%7Eeppstein/projects/pairs/Methods/"&gt;not the only way tho&lt;/a&gt;!). In this situation the pair is made up from a bisector (two adjacent edges that collide to form a ray) and a quad (the face that the bisector collides with). The "distance" between these two is the height at which they intersect.&lt;br /&gt;&lt;br /&gt;The key observation is that we can form log(n) set of chains of things. Within each chain each object is chained to it's nearest object. Then inserting an item takes O(n log (n)) and removing takes O( n log^2 n).&lt;br /&gt;&lt;br /&gt;2) &lt;span style="font-weight: bold;"&gt;Divide and conquer&lt;/span&gt;. Given the (below, left) dark grey input shape (and blue corners).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3988703756/" title="segment by twak, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2511/3988703756_a41e0f8645.jpg" alt="segment" height="273" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;We can subdivide it into a set of cells, each of which is a weighted skeleton, such as the one shown in blurry green. The image on the right shows one such cell in 3D. Interior edges have a zero (vertical) weight, shown in red. We can then find the next event by locating the lowest collision within each cell. Each of the above cells has only two edges, but I'm not sure that's an optimum number.&lt;br /&gt;&lt;br /&gt;When events hit the boundary of cells, they are propagated into the neighbouring cells. If there are too many edges in one cell then the cell gets subdivided. This means we only have to consider local collisions when calculating the skeleton, and maybe pushes another log(n) into the complexity for the straight skeleton (I'm still trying to figure this one out, along with the fact that the weighted skeleton is &lt;a href="http://twak.blogspot.com/2009/05/ambiguous-weighted-skeleton.html"&gt;ambiguous&lt;/a&gt;...).&lt;br /&gt;&lt;br /&gt;&lt;!--- &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;2) If we ignore the roof-edges and instead consider entire planes, as the sweep plane$$$ move upwards, lines collide as each line moves in a direction at a constant speed. We want to know when three lines collide at one point.&lt;br /&gt;&lt;br /&gt;Adjacencies. We are are only looking for the next collision, for example in the following diagram, if track the blue/green intersection as all the lines move in some direction we can see that it can collide with only one of the surrounding four lines, no matter what is outside the drawn square.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/3988454376/" title="grid by twak, on Flickr"&gt;&lt;img style="width: 137px; height: 135px;" src="http://farm3.static.flickr.com/2582/3988454376_8a014d6fb6.jpg" alt="grid" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Similarly when tracking the planes forming the boundary of a polygon, we know that the next collision involving these two planes will be&lt;br /&gt;&lt;br /&gt;Awww fuck..... Even if we only have to collide with 4 or so adjacent edges, there are n^2 green points == fail!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/3988454346/" title="rect4417 by twak, on Flickr"&gt;&lt;img style="width: 352px; height: 239px;" src="http://farm3.static.flickr.com/2437/3988454346_3ecbd10e40.jpg" alt="rect4417" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;--&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-8076223653492519579?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/8076223653492519579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/10/accelerating-straight-skeleton.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/8076223653492519579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/8076223653492519579'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/10/accelerating-straight-skeleton.html' title='accelerating the straight skeleton'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3341/3485170855_f038c7ec36_t.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-876509438618788867</id><published>2009-10-06T10:52:00.012Z</published><updated>2011-01-21T12:56:27.012Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='straight skeleton'/><title type='text'>skeleton index page</title><content type='html'>Round up of straight skeleton related content on this blog, roughly ordered by interestingness.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://twak.blogspot.com/2009/01/that-straight-skeleton-again.html"&gt;introduction to the straight skeleton&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twak.blogspot.com/2009/05/engineering-weighted-straight-skeleton.html"&gt;engineering of a robust weighted straight skeleton algorithm&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html"&gt;very detailed weighted skeleton break down.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twak.blogspot.com/2010/06/weighted-straight-skeleton-source.html"&gt;source code release&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twak.blogspot.com/2009/05/ambiguous-weighted-skeleton.html"&gt;weighted ss is ambiguous!&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twak.blogspot.com/2009/10/accelerating-straight-skeleton.html"&gt;accelerating the skeleton&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twak.blogspot.com/2009/11/higher-dimensional-skeletons.html"&gt;higher dimensional skeletons&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twak.blogspot.com/2011/01/straight-skeleton-for-polygon.html"&gt;straight skeleton for polygon simplification&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twak.blogspot.com/2009/05/skeletons-on-non-planar-input.html"&gt;an idea for skeletons on non-planar input&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twak.blogspot.com/2009/03/robust-straight-skeleton.html"&gt;robustification (results of epsilon technique)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twak.blogspot.com/2009/01/sity-source-code.html"&gt;sity source code (contains an old (buggy) skeleton implementation)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twak.blogspot.com/2009/12/skeleton-project-progress.html"&gt;some pretty modelling results&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Oh, and the image on the wikipedia &lt;a href="http://en.wikipedia.org/wiki/Straight_skeleton"&gt;page&lt;/a&gt; is an old one of mine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-876509438618788867?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/876509438618788867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/10/skeleton-index-page.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/876509438618788867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/876509438618788867'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/10/skeleton-index-page.html' title='skeleton index page'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-6075708065432644432</id><published>2009-10-05T14:36:00.002Z</published><updated>2009-10-06T23:30:53.643Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='blender ligthbox model render template three point lighting'/><title type='text'>matte renders in blender</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;This post is in response to a professor saying that it is hard to get students to make nice (publishable) renders. It isn't! There's a few bits of theory you should know (&lt;a href="http://colorschemedesigner.com/"&gt;colour theory&lt;/a&gt;, &lt;a href="http://www.3drender.com/light/3point.html"&gt;basic lighting setup&lt;/a&gt;, &lt;a href="http://digital-photography-school.com/rule-of-thirds"&gt;rule of thirds&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Global_illumination"&gt;global illumination&lt;/a&gt;) but you can mostly fake it by borrowing other people's work, such as this this template for getting nice blender renders...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/3985087992/" title="blender lighting demo by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3451/3985087992_16213259b0.jpg" alt="blender lighting demo" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;So getting a nice render out of blender takes a little tweaking. Here's a ready rolled blender scene and demo video for getting nice matte-white light-box renders with global illumination. Grab this template file &lt;a href="http://dcs.gla.ac.uk/%7Etkelly/bits/matte_gray_light.blend"&gt;here&lt;/a&gt;, and follow the video, or the following instructions.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/22vBbBXdj0o&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/22vBbBXdj0o&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;First grab: &lt;a href="http://www.blender.org/download/get-blender/"&gt;blender&lt;/a&gt;, &lt;a href="http://www.yafaray.org/download/yafaray010"&gt;yafray&lt;/a&gt; and the &lt;a href="http://www.gimp.org/downloads/"&gt;gimp&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In linux, something like this:&lt;br /&gt;&lt;pre&gt;sudo apt-get install blender yafray gimp&lt;/pre&gt;&lt;br /&gt;In windows, go to the websites and install (haven't checked that this works for yafray yet...)&lt;br /&gt;&lt;br /&gt;Then start up blender. Load the template file. Delete the house-like thing you can see by right clicking on it, and pressing the delete key, and answering ok to the pop up box. Import the object you want to render. Obj is an easy format to work with when there's no textures. File-&gt;import-&gt;Wavefront(obj). There's a tutorial on moving stuff with blender &lt;a href="http://biorust.com/index.php?page=tutorial_detail&amp;amp;tutid=81&amp;amp;lang=en"&gt;here&lt;/a&gt;, otherwise select the object you want to move and use 'control-shift-g' to bring up the control widget, then left click and drag to move it around. "control-shift-r" (who makes up keystrokes like that?) for the rotate widget, and "control-shift-s" for scaling. The viewpoint when editing (not the camera) can be moved using a combination of control, shift and alt together with the middle mouse button (or tutorial &lt;a href="http://www.blender.org/education-help/tutorials/tutorial-folder/blender-user-interface-tutorial/"&gt;here&lt;/a&gt;). To view the scene from the camera's pov, use the '0' key on the keypad (or view -&gt; cameras -&gt; camera).&lt;br /&gt;&lt;br /&gt;This is the beast-of-a-render-panel:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_wceYeHJ7bn0/SspUSuadDFI/AAAAAAAAAq8/CqNkG2juW_E/s1600-h/out.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 103px;" src="http://4.bp.blogspot.com/_wceYeHJ7bn0/SspUSuadDFI/AAAAAAAAAq8/CqNkG2juW_E/s400/out.png" alt="" id="BLOGGER_PHOTO_ID_5389212584775584850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After setting the aliasing quality (1), and the percentage render size (2), you can choose the frame ratio (3), before rendering (4). The combo box directly below the render button ("Blender internal" selects the renderer - in the example file it's set to yafray). At this point blender looks like it's crashed (if you're using yafray). After it's rendered (can take a while - go get a strong cup of something) push F3 with the output window selected to save in the format dictated by combo box (5).&lt;br /&gt;&lt;br /&gt;You probably want to do a low quality render to check the details, before doing a full one (waiting 20 minutes just to find out that the top of the model is clipped is kinda annoying).&lt;br /&gt;&lt;br /&gt;Once you've got the render, you probably want to open it in the gimp, and use colors -&gt; adjust levels to get the exposure right for your medium (print, web etc...). Then save out the final image.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-6075708065432644432?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/6075708065432644432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/10/matte-renders-in-blender.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/6075708065432644432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/6075708065432644432'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/10/matte-renders-in-blender.html' title='matte renders in blender'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3451/3985087992_16213259b0_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-6456431689920651369</id><published>2009-07-16T20:39:00.006Z</published><updated>2009-10-06T21:07:10.276Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='dirtytricks'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='orthonormal'/><category scheme='http://www.blogger.com/atom/ns#' term='matrix'/><category scheme='http://www.blogger.com/atom/ns#' term='basis'/><title type='text'>orthogonal basis transform</title><content type='html'>&lt;div style="padding: 3px; text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3727775604/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3447/3727775604_5a5bfe72d8.jpg" alt="basis_transform" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Here's a trick I learnt from &lt;a href="http://ocw.mit.edu/OcwWeb/Mathematics/18-06Spring-2005/VideoLectures/"&gt;Strang&lt;/a&gt; - to convert (rotation/translation) between two arbitrary frames:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;convert both to orthonormal bases (A,B above), ignoring the translation component for now.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;use the inverse == transpose trick to find the inverse of the first transform (A&lt;sup&gt;T&lt;/sup&gt;), then apply (multiply by) the second transform(B)&lt;/li&gt;&lt;li&gt;(...fudge the translation component (not shown)...)&lt;/li&gt;&lt;/ol&gt;It's even better if you want to axis-align something, you just need the transposed matrix. This got a post of it's own because I've been told by several professors over the years to move it to the origin, calculate the x and y rotational components and multiply together - this takes lots of multiplication, and you end up with a hideous zombie-like matrix.&lt;br /&gt;&lt;br /&gt;The transpose is equal to the inverse only if it's an orthonormal matrix - to project vector line onto another, it's a simple dot product. What's more each axis in an orthogonal frame is independent, so that's all we need - 9 dot products, or one matrix multiplication.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-6456431689920651369?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/6456431689920651369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/07/orthogonal-basis-transform.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/6456431689920651369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/6456431689920651369'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/07/orthogonal-basis-transform.html' title='orthogonal basis transform'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3447/3727775604_5a5bfe72d8_t.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-1283693357936475989</id><published>2009-07-06T15:20:00.001Z</published><updated>2009-07-06T23:34:27.202Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='layout'/><category scheme='http://www.blogger.com/atom/ns#' term='facades'/><title type='text'>a couple of procedural facades</title><content type='html'>&lt;div&gt;A few weeks back I put together these two as examples of how to create a procedural facades from a static facade image.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;This image is from the fantastic project from &lt;a href="http://grail.cs.washington.edu/projects/multipano/supp.html"&gt;Washington&lt;/a&gt;. They had a project to stitch images, and were good enough to publish some hi res street fronts. Charleston, South Carolina:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/7peHLYImpeE&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/7peHLYImpeE&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;The second image is of the willard hotel - around the corner from the White House (image by &lt;a href="http://www.flickr.com/photos/bootbearwdc/234160407/"&gt;dbking&lt;/a&gt;):&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/bootbearwdc/234160407/" title="The Willard Hotel by dbking, on Flickr"&gt;&lt;img src="http://farm1.static.flickr.com/95/234160407_55f39d9bb6.jpg" alt="The Willard Hotel" height="349" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/oyrD9_0GGjs&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/oyrD9_0GGjs&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Some of the issues that came up:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;There is a limit to how far you procedural-ize. For example, windows in the above were atomic units. Tricks like content aware image resizing (&lt;a href="http://www.seamcarving.com/"&gt;seam carving&lt;/a&gt; et al) might help do this automatically.&lt;/li&gt;&lt;li&gt;How do we tell if an element should scale or repeat with size? should some elements keep the same size and others be scaled relative to each other?&lt;/li&gt;&lt;li&gt;In the vanishing case (as the facade become small) which elements disappear first?&lt;/li&gt;&lt;li&gt;Negative space often plays a part (first met this concept in &lt;a href="http://www.personal.ceu.hu/tex/spacebox.htm"&gt;latex&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Many different schemes for layouts (see &lt;a href="http://java.sun.com/docs/books/tutorial/uiswing/layout/visual.html"&gt;Java's Swing&lt;/a&gt; for lots of examples) - only one data point (the input image) which do we use?&lt;/li&gt;&lt;li&gt;Conflict between top-down (layout downwards - space subdivision at each step) and bottom up (components know how big they should be, eg a window, rather than a side of a house, knows how big it should be).  Similar in principle to top down vs bottom up design arguments&lt;/li&gt;&lt;li&gt;Many features to balance, and everyone's goals are different - feels a lot like software engineering.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-1283693357936475989?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/1283693357936475989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/07/couple-of-procedural-facades.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/1283693357936475989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/1283693357936475989'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/07/couple-of-procedural-facades.html' title='a couple of procedural facades'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/95/234160407_55f39d9bb6_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-3069447640282311146</id><published>2009-07-06T05:36:00.007Z</published><updated>2009-08-30T18:24:10.586Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='buildings'/><category scheme='http://www.blogger.com/atom/ns#' term='phd instanities. procedural'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>phd insanities</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_wceYeHJ7bn0/SlGO_V9-H_I/AAAAAAAAAqE/W-EVeU2naSs/s1600-h/house.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_wceYeHJ7bn0/SlGO_V9-H_I/AAAAAAAAAqE/W-EVeU2naSs/s400/house.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5355218650800201714" /&gt;&lt;/a&gt;&lt;br /&gt;Every house I see has me trying to model it procedurally in my head. This is really driving me insane. Perhaps it's time for a holiday. How about the roof windows on the family guy house? Why doesn't it have any guttering? Why do some windows have shutters and others don't?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;then ASU has buildings like this - did the tree come first and they built the house around it? Did the tree grow through the gap?&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3688809043/" title="integrated architecture by twak, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2425/3688809043_c2a6c5f2d0.jpg" width="333" height="500" alt="integrated architecture" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-3069447640282311146?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/3069447640282311146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/07/phd-insanities.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/3069447640282311146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/3069447640282311146'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/07/phd-insanities.html' title='phd insanities'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wceYeHJ7bn0/SlGO_V9-H_I/AAAAAAAAAqE/W-EVeU2naSs/s72-c/house.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-2985981028618521293</id><published>2009-06-09T22:59:00.003Z</published><updated>2009-06-09T23:01:55.496Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='phoenix'/><category scheme='http://www.blogger.com/atom/ns#' term='az'/><category scheme='http://www.blogger.com/atom/ns#' term='weather'/><category scheme='http://www.blogger.com/atom/ns#' term='arizona'/><title type='text'>phoenix weather warning</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_wceYeHJ7bn0/Si7pUQFBD7I/AAAAAAAAApU/IdHkhQyj4MQ/s1600-h/Screenshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 394px;" src="http://3.bp.blogspot.com/_wceYeHJ7bn0/Si7pUQFBD7I/AAAAAAAAApU/IdHkhQyj4MQ/s400/Screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5345466341858021298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hmmm.... turns out that storm cloud on the google homepage that means "it'll piss down all day" in Scotland means "10 mins of drizzle" in the desert. Well...you know...one thousand words for snow and the rest of it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-2985981028618521293?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/2985981028618521293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/06/phoenix-weather-warning.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/2985981028618521293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/2985981028618521293'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/06/phoenix-weather-warning.html' title='phoenix weather warning'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wceYeHJ7bn0/Si7pUQFBD7I/AAAAAAAAApU/IdHkhQyj4MQ/s72-c/Screenshot.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-9208193928416375827</id><published>2009-06-08T10:15:00.003Z</published><updated>2009-06-08T17:34:16.900Z</updated><title type='text'>semantic deformation</title><content type='html'>Last week I did a rather slap-dash job at presenting &lt;span style="font-style: italic;"&gt;Semantic Deformation Transfer&lt;/span&gt; ( &lt;a href="http://people.csail.mit.edu/ibaran/2009.pdf"&gt;pdf&lt;/a&gt; | acm | 2009 ) by Baran, Vlasic, Grinspun and Popović. I didn't do a very good job, but here're the slides:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_794876990381369" name="doc_794876990381369" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" rel="media:document" resource="http://d.scribd.com/ScribdViewer.swf?document_id=16166672&amp;amp;access_key=key-131p28r0zq97l54dibf1&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode=" media="http://search.yahoo.com/searchmonkey/media/" dc="http://purl.org/dc/terms/" align="middle" height="500" width="100%"&gt;  &lt;param name="movie" value="http://d.scribd.com/ScribdViewer.swf?document_id=16166672&amp;amp;access_key=key-131p28r0zq97l54dibf1&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode="&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;        &lt;embed src="http://d.scribd.com/ScribdViewer.swf?document_id=16166672&amp;amp;access_key=key-131p28r0zq97l54dibf1&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode=" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_794876990381369_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle" height="500" width="100%"&gt;&lt;/embed&gt;             &lt;span rel="media:thumbnail"&gt;&lt;/span&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;There are typos in the document. It says re-encoding the base pose doesn't give the base pose, when the paper says it does. I think I meant that they don't show re-encoding an arbitrary input pose.&lt;br /&gt;&lt;br /&gt;The videos are missing from the presentation, they can be found&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://people.csail.mit.edu/ibaran/sdt_final.avi"&gt;Semantic Deformation Transfer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://people.csail.mit.edu/sumner/research/deftransfer/"&gt;Deformation Transfer for Triangle Meshes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Linear Rotation Invariant Coordinates ( &lt;a href="http://www.math.tau.ac.il/%7Elipmanya/Linear_rotation_inv_coord.htm"&gt;missing link&lt;/a&gt;, or shoddy&lt;a href="http://portal.acm.org/citation.cfm?id=1073217"&gt; acm streaming&lt;/a&gt; )&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;and here:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/q1Mexpsxcjo&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/q1Mexpsxcjo&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-9208193928416375827?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/9208193928416375827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/06/semantic-deformation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/9208193928416375827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/9208193928416375827'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/06/semantic-deformation.html' title='semantic deformation'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-3885163987275191346</id><published>2009-06-07T21:10:00.002Z</published><updated>2009-06-07T21:49:12.181Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='whywouldiwanttoknowthat'/><category scheme='http://www.blogger.com/atom/ns#' term='somethingfornothing'/><category scheme='http://www.blogger.com/atom/ns#' term='spotify'/><title type='text'>Spotify</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_wceYeHJ7bn0/SiwtTHTEO4I/AAAAAAAAApM/nGq0oTpW4RA/s1600-h/spotify_logo-copy1_.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 220px;" src="http://3.bp.blogspot.com/_wceYeHJ7bn0/SiwtTHTEO4I/AAAAAAAAApM/nGq0oTpW4RA/s400/spotify_logo-copy1_.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5344696664181717890" /&gt;&lt;/a&gt;&lt;br /&gt;Am a bit of a fan of &lt;a href="http://spotify.com"&gt;spotify&lt;/a&gt; and am just jotting down some experiences of using it abroad. I signed up while in the UK, and was happy enough with the service (even if they kept increasing the number of adverts). It worked through the notorious Glasgow University proxy (after some tweaking) and had a large enough selection of music for me (if not my obscure-scandinavian-rock-loving brother).&lt;br /&gt;&lt;br /&gt;When I moved to Arizona, spotify continued to work...but the adverts stopped! So I'm getting the 10 pound per month &lt;a href="http://spotify.com/en/products/premium/"&gt;premium service&lt;/a&gt; for free. (Even though it doesn't seem to hard to &lt;a href="http://thepiratebay.org/torrent/4608822/Spotify.Premium.Cracked.%5BLbN%5D"&gt;circumvent&lt;/a&gt;, even from the UK) This is really strange - if I'm on holiday why not just serve me British adverts? I guess they're preparing for their &lt;a href="http://www.t3.com/news/spotify-to-launch-in-the-us-by-end-of-2009?=38903"&gt;US launch. &lt;/a&gt;&lt;br /&gt; &lt;div&gt;The service abroad stops working every two weeks. But you just need a friend to log in for you (or know the correct tunneling incantations) to log in via a UK ip adress (see notes on the notorious Glasgow University Proxy).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-3885163987275191346?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/3885163987275191346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/06/spotify.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/3885163987275191346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/3885163987275191346'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/06/spotify.html' title='Spotify'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wceYeHJ7bn0/SiwtTHTEO4I/AAAAAAAAApM/nGq0oTpW4RA/s72-c/spotify_logo-copy1_.jpg' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-1762084405214769476</id><published>2009-05-26T13:41:00.000Z</published><updated>2009-05-26T20:41:09.885Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='l-systems'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><category scheme='http://www.blogger.com/atom/ns#' term='papers'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>misc. architecture papers</title><content type='html'>Some of the recent paper's I've browsed on procedural urban modelling and tangential subjects.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Detailed Building Facades ( &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://doi.ieeecomputersociety.org/10.1109/MCG.2008.50"&gt;doi&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://doi.ieeecomputersociety.org/10.1109/MCG.2008.50"&gt;pdf&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://www2.computer.org/portal/web/csdl/doi/10.1109/MCG.2008.50"&gt;ieee&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | 2008 )&lt;/span&gt;&lt;br /&gt;Dieter Finkenzeller&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dcs.gla.ac.uk/people/personal/tkelly/architecture/detailed_facades.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 399px; height: 308px;" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/architecture/detailed_facades.jpg" alt="" border="0" /&gt;&lt;/a&gt;This is a procedural system that uses two separate geometry trees, one for the course model and one for the style.&lt;br /&gt;&lt;br /&gt;The course system starts with a floorplan - this comprises a concave set of abutting polygons that represents the main building, a wing or a balcony. Apparently the concave condition is required when generating the roof. These are combined using union operations.&lt;br /&gt;&lt;br /&gt;A floor plan like this is created for each floor of the building. At each height the user has the option to add, remove or subdivide one of these polygons (to add a balcony for example)&lt;br /&gt;&lt;br /&gt;Cornaces (decorative moulding strips) are extruded from a sequence of paths and curves. Consoles are blocks placed along the Cornaces, that you can stick arbitrary meshes (gargoyles!) onto. Cornaces-cross sections are defined use a turtle-like grammar. This is also used to define the perimeter of doors and windows.&lt;br /&gt;&lt;br /&gt;Roofs are either flat, or constructed using a ridge-placing algorithm. The single, central ridge is defined, and each corner of the floorplan is connected to the nearest end of the roof. The straight skeleton is rejected as it is unique (not that I'm biased towards that skeleton or anything ;) however all the shapes described could be produced using the weighted straight skeleton, and it would have worked on concave shapes).&lt;br /&gt;&lt;br /&gt;The second hierarchy of geometry is for the style, the finer components, such as wall subdivisons or windows/doors (&lt;span style="font-style: italic;"&gt;windoors&lt;/span&gt;)  (I've visited this several times, and the abstracting is going to be quite useful, and can be extended to the general idea of a border/frame). The different components of the windoors are created by a multitude of cornice and frame elements.&lt;br /&gt;&lt;br /&gt;After the entire semantic tree is produced, it is traversed by a geometry engine that creates polygonal output.&lt;br /&gt;&lt;br /&gt;Inclined walls aren't supported, and a lot of use input is required to define the features of each floor of the building.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Affective scene generation ( &lt;a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.107.8472&amp;amp;rep=rep1&amp;amp;type=pdf"&gt;pdf&lt;/a&gt; | &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://doi.acm.org/10.1145/1108590.1108600"&gt;doi&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://portal.acm.org/citation.cfm?id=1108600"&gt;acm&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | 2006 )&lt;/span&gt;&lt;br /&gt;&lt;a href="http://people.cs.uct.ac.za/%7Echultqui/masters/about.php"&gt;Carl Hultquist&lt;/a&gt;, James Gain, David Cairns&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dcs.gla.ac.uk/people/personal/tkelly/procedural/adjective.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 701px; height: 183px;" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/procedural/adjective.jpg" alt="" border="0" /&gt;&lt;br /&gt;&lt;/a&gt;The idea here is to infer from adjectives, the parameters to a procedural system.&lt;br /&gt;&lt;br /&gt;Merry et. al. &lt;a href="http://pubs.cs.uct.ac.za/archive/00000070/01/gfxai.pdf"&gt;apparently&lt;/a&gt; couldn't get it to work (but didn't show any results), and there's a thesis by Polichroniadis (cl@cam.ac.uk) that describes a similar method for animation.&lt;br /&gt;&lt;br /&gt;There are two massive spaces involved&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The descriptive space - a set of adjectives, one for each axis of the space, and a value for each axis.&lt;/li&gt;&lt;li&gt;The model space - one axis for each parameter, and a value for each axis&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The game is to find a mapping between these spaces. It's likely that the mapping is different from person to person.&lt;br /&gt;&lt;br /&gt;The approach to solving this is via learning algorithms, in particular a neural network (of the radial basis network function variety - a one perception deep network).&lt;br /&gt;&lt;br /&gt;The procedural world is generated using:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Landscape: Perlin noise&lt;/li&gt;&lt;li&gt;Trees: meshes&lt;/li&gt;&lt;li&gt;Sky: Coloured based on time of day&lt;/li&gt;&lt;li&gt;Clouds/Rain - Perlin noise clouds.&lt;/li&gt;&lt;/ul&gt;Current controlling adjectives are &lt;span style="font-style: italic;"&gt;wet, sparse, tropical, cloudy, light, mountainous &lt;/span&gt;and&lt;span style="font-style: italic;"&gt; undulating&lt;/span&gt;. Users are shown images and have to assign a real (0..1) value to each adjective for a set of test scenes. This trains up the neural network. This seems to work reasonably. There wasn't much more to this paper, except the results, above.&lt;br /&gt;&lt;br /&gt;It's a afrigraph paper, and there's an interesting emphasis on technologies for developing nations with lower skill sets.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3d modeling for non-expert users with the castle construction kit v0. 5 ( &lt;a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.121.5754&amp;amp;rep=rep1&amp;amp;type=pdf"&gt;pdf&lt;/a&gt; | &lt;a href="http://www.siggraph.org/publications/bibliography/index.php?detail=20788"&gt;vast&lt;/a&gt; | 2005 )&lt;/span&gt;&lt;br /&gt;Gerth, B, Berndt, R, Havemann, S, Fellner, D W&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dcs.gla.ac.uk/people/personal/tkelly/architecture/castle.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 701px; height: 183px;" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/architecture/castle.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;These guys build a nicely interactive castle editor. Particular emphasis is placed on the internal representations used.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.generative-modeling.org/"&gt;GML&lt;/a&gt; is a postscript like way of describing 3D models using a stack. It's a nice description because it's so flexible - functions can take an arbitrary number of inputs from the stack etc...&lt;/li&gt;&lt;li&gt;&lt;a href="http://opensg.vrsource.org/trac"&gt;Open Scene Graph&lt;/a&gt; is another scene graph engine, with a decent feature list - it represents geometry as number arrays etc...&lt;/li&gt;&lt;/ul&gt;The two packages were combined in the expected way - GML is used for the local descriptions, and fitted into the scene graph as components. There's a little munging of data types between the two packages, but they seem like a reasonable fit.&lt;br /&gt;&lt;br /&gt;There's an reference to an excellent looking book about churches and cathederals by Kotch (&lt;a href="http://books.google.com/books?id=KTQBvkU5dVAC&amp;amp;pg=PA130&amp;amp;lpg=PA130&amp;amp;dq=Baustilkunde+:+das+Standardwerk+zur+europ%C3%83%C2%A4ischen+Baukunst+von+der+Antike+bis+zur+Gegenwart&amp;amp;source=bl&amp;amp;ots=dUC66RVmuF&amp;amp;sig=5LzVvK9ffrakoTUO8dQMHfO4Pj0&amp;amp;hl=en&amp;amp;ei=9XQUSoSjJJ_aswOartjsDQ&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1#PPA356,M1"&gt;&lt;span style="font-style: italic;"&gt;Baustilkunde : das Standardwerk zur europäischen Baukunst von der Antike bis zur Gegenwart&lt;/span&gt;&lt;/a&gt;). After recognising that castles are often on hills, they proceed to make castles on flat-ground.&lt;br /&gt;&lt;br /&gt;Wall editing takes place via a set of handles (red things in the above images), one for each corner. The need for constrains on the handle positions is discussed - angles on walls shouldn't be too large, houses shouldn intersect walls (but be aligned to them) etc...&lt;br /&gt;&lt;br /&gt;Out of context quote-of-the-day:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;As it turns out a whole number of objects can be suitably represented by polygons&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Finally they say that they want to advance the work towards &lt;a href="http://twak.blogspot.com/2009/05/skeletons-on-non-planar-input.html"&gt;non-flat&lt;/a&gt; terrains and castles. This is actually a remarkable uncluttered topic in the literature, and looks like a promising area of research.&lt;br /&gt;&lt;br /&gt;Here's a &lt;a href="http://www.cgv.tugraz.at/0x811bda19_0x00004153"&gt;thesis&lt;/a&gt; talking about GML  (in German).&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The FL-system: a functional L-system for procedural geometric modeling ( &lt;a href="http://julien.perret.googlepages.com/flsystem.pdf"&gt;pdf&lt;/a&gt; | &lt;a href="http://dx.doi.org/10.1007/s00371-005-0289-z"&gt;doi&lt;/a&gt; | &lt;a href="http://www.springerlink.com/content/k62132q1v2726574/"&gt;springer&lt;/a&gt; | 2005 )&lt;/span&gt;&lt;br /&gt;Jean-Eudes Marvie, Julien Perret, Kadi Bouatouch&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dcs.gla.ac.uk/people/personal/tkelly/architecture/fl.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 511px; height: 175px;" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/architecture/fl.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The paper presents a variation on the theme of L-Systems and applies the result to architecture.&lt;br /&gt;&lt;br /&gt;There are a couple of useful additions to the parameterized L-System&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;A(n) → for(i = 0; i &lt;= n; i + +) B&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Describes a repeated element. This replaces the decreasing-parameter trick used previously. It's only syntactic sugar, but given how twisted L-system grammars become it's quite welcome.&lt;br /&gt;&lt;br /&gt;The terminals of the grammar are functions that can evaluate to geometrical primitives (window/door meshes). These can be modified by the parameters of the system at a given time.&lt;br /&gt;&lt;br /&gt;The system outputs geometry at many grammar depths (rather than the tradditional post-evaluation using a turtle) . Because of the implicit evaluation order of L-Systems it's relatively simple to stop evaluation early to construct different levels of detail (LOD). These LODs are made more efficient by sharing geometry.&lt;br /&gt;&lt;br /&gt;The system is integrated with the VRML97 standard, using embedded scripts.&lt;br /&gt;&lt;br /&gt;An example grammar is constructed that creates a town house using standard façade decomposition techniques.&lt;br /&gt;&lt;br /&gt;The above image shows a few result - the three buildings on the left are procedurally derived from the same grammar, with different texture sets.&lt;br /&gt;&lt;br /&gt;The more I read about these system, the more I'm convinced that traditional formal grammars are very much the wrong way to go. There's no way artist's will use these grammars, and artist's can't be limited to domain specific languages.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Creating models of truss structures with optimization ( &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://dx.doi.org/10.1145/566654.566580"&gt;doi&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://people.csail.mit.edu/bmcutler/gaudi/smith_truss_optimization.pdf"&gt;pdf&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://portal.acm.org/citation.cfm?doid=566654.566580"&gt;acm&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | 2002 )&lt;/span&gt;&lt;br /&gt;Jeffrey Smith, Jessica Hodgins,  Irving Oppenheim, Andrew Witkin,&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dcs.gla.ac.uk/people/personal/tkelly/architecture/truss.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 623px; height: 191px;" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/architecture/truss.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The idea here is to construct truss structures (think Eiffel tower) by taking a set of contact points (above, left, cones) and load bearing points (above, left green balls) and finding an optimal (for some meaning of the word) mesh (above, left, green and brown mesh). The system is given an arbitrary set of input beams, and then iterates under user guidance to find an optimal solution.&lt;br /&gt;&lt;br /&gt;Truss structures are meshes of connected beams designed to hold a certain load. They're used in bridges, towers etc... The fun thing here is that while physical constraints are used to converge on a solution, a physical model isn't the primary goal. Rather these guys aim for a graphically pleasing representation. There is a large body of engineering work given to engineering trusses dating from the early 1900's, using various forms of numerical optimizations.&lt;br /&gt;&lt;br /&gt;The optimization starts with a "rich" (overly generous) set of beams (above - top, left shows how a generous configuration (left) is whittled down (middle) to an efficient structure, in this case mirroring the standard solution (right) in this case of a Michell truss). There a set of build in fudge constraints to specify beams above or below the load bearning nodes, or to constrain beams to a vertical plane.&lt;br /&gt;&lt;br /&gt;The optmization uses a simple physical model of the forces involved, and work to minimize some function, typically the total weight of the structure. This constraints (apparently) make the problem non-linear, so the chosen solver is of the &lt;a href="http://en.wikipedia.org/wiki/Sequential_quadratic_programming"&gt;sequential quadratic programming&lt;/a&gt; variety.&lt;br /&gt;&lt;br /&gt;There are a misc. set of other constrains, such as obstical avoidence (above, bottom right, shows a truss holding the small green sphere, but avoiding the large red sphere in it's starting state (left) and two solutions (middle, right)), or max beam length.&lt;br /&gt;&lt;br /&gt;After the system is solved, very short beams or those carrying no force are removed. The user then decides if the solution is viable, and the process is repeated until a desirable truss is produced. The results tend to look very similar to those of engineered trusses. In the case of some of their Eiffel tower models, almost too good to be true! - great results for a numerical solver.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-1762084405214769476?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/1762084405214769476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/05/misc-architecture-papers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/1762084405214769476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/1762084405214769476'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/05/misc-architecture-papers.html' title='misc. architecture papers'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-2459990899426542686</id><published>2009-05-24T17:41:00.007Z</published><updated>2011-10-12T08:58:15.175Z</updated><title type='text'>inkscape, pdf and posters</title><content type='html'>&lt;a href="http://www.sicsa.ac.uk/"&gt;SICSA&lt;/a&gt; asked everyone to make a big poster to make their opening do more academic &lt;a href="http://dcs.gla.ac.uk/~tkelly/bits/sicsa_poster_tom_kelly.pdf"&gt;(here's the result&lt;/a&gt;). This was the first time I'd used &lt;a href="http://www.inkscape.org/"&gt;inkscape&lt;/a&gt; to produce an A0 pdf, and there were some hiccups due to the large number of vector illustrations I included [edit - some glitch with scribd, click zoom out to view] -&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" height="500" id="doc_845029469352551" name="doc_845029469352551" width="100%"&gt;  &lt;param name="movie" value="http://d.scribd.com/ScribdViewer.swf?document_id=15776885&amp;amp;access_key=key-2hw8idwsyb7wexuonwhx&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode="&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;        &lt;embed src="http://d.scribd.com/ScribdViewer.swf?document_id=15776885&amp;amp;access_key=key-2hw8idwsyb7wexuonwhx&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode=" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_845029469352551_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle" height="500" width="100%"&gt;&lt;/embed&gt;   &lt;/object&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The first time I exported to pdf, all the non-screen grab figures were vector line art. This gave a nice 3Mb PDF file that would take a massive 3 minutes to open, and without Inkscape's nice blurs. This wasn't really good enough. I decided to turn those diagrams into bitmaps to render nicely. The &lt;a href="http://www.gla.ac.uk/media/media_115291_en.pdf"&gt;Glasgow guidelines for creation of PDF&lt;/a&gt; posters (as well as specifiying sensible font sizes) says that 300 dpi is the target printing resolution - so this is what I should target in my conversions.&lt;br /&gt;&lt;br /&gt;[edit] the rest of this post is for an old version of inkscape. Newer versions export blurs to pdf automatically (save copy as..., select .pdf, in dialogue box "rasterise filter effects" is selected automatically), and you can set the "Create Bitmap Copy" resolution in file -&amp;gt; inkscape preferences -&amp;gt; bitmaps -&amp;gt; resolution for Create Bitmap Copy.&lt;br /&gt;&lt;br /&gt;The default image res was 90 dpi, not enough for printing. To set inkscape's default conversion dpi to 300 - I followed instructions &lt;a href="http://wiki.inkscape.org/wiki/index.php/ReleaseNotes040"&gt;here&lt;/a&gt; &amp;amp; then restarted inkscape-&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;The resolution or size of the created bitmaps can be set in &lt;/span&gt;&lt;code style="font-style: italic;"&gt;preferences.xml&lt;/code&gt;&lt;span style="font-style: italic;"&gt; (no GUI yet). In &lt;/span&gt;&lt;code style="font-style: italic;"&gt;&lt;group id="createbitmap"&gt;&lt;/group&gt;&lt;/code&gt;&lt;span style="font-style: italic;"&gt;, specifying &lt;/span&gt;&lt;code style="font-style: italic;"&gt;minsize=&lt;/code&gt;&lt;span style="font-style: italic;"&gt; gives the minimum size of the generated bitmap in pixels (regardless of the object size), while &lt;/span&gt;&lt;code style="font-style: italic;"&gt;resolution=&lt;/code&gt;&lt;span style="font-style: italic;"&gt; sets the constant resolution (different pixel size for different object sizes).&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;Then it was a case of selecting all figures in the document and using &lt;span style="font-style: italic;"&gt;Edit-&amp;gt;Make bitmap copy&lt;/span&gt;. Because of the bounds of the outlines in inkscape doesn't include blurs, sometimes it was necessary to add a large white background rectangle before creating the bitmap copy. Once the copy is made, the original vector art can be deleted.&lt;br /&gt;&lt;br /&gt;There were a couple of bugs were the converted figures had a small transparent border that rendered grey in Adobe's PDF reader, but this was remedied by editing the bitmap copies in the &lt;a href="http://gimp.org/"&gt;gimp&lt;/a&gt; and painting out the border, the re-opening the inkscape document.&lt;br /&gt;&lt;br /&gt;After this the &lt;span style="font-style: italic;"&gt;Save As... -&amp;gt; pdf -&amp;gt; OK&lt;/span&gt; worked like a charm. The result was 8Mb, but loaded much quicker and with less glitches.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3555301903/" title="sicsa logo by twak, on Flickr"&gt;&lt;img alt="sicsa logo" src="http://farm4.static.flickr.com/3310/3555301903_780be119de.jpg" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;The PDF included the above image in vector form - it was created from a 3D model that was imported into &lt;a href="http://www.blender.org/"&gt;blender&lt;/a&gt; (from my prototype code). The poster was made on a bit of a deadline and rendering out this geometry nicely would have taken too long. Thankfully the&lt;a href="http://shell.studenti.unina.it/~ospite/vrm/section/en/files/download.html"&gt; render-to-svg script&lt;/a&gt; for blender worked like a charm and created vector art from the blender scene. Then a nice blur was added from the input geometry.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;Here's another poster I made in inkscape - waaay better than some of the powerpoint mush you get out there!&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/5566033684/" title="city sculpt - ict pioneers poster by twak, on Flickr"&gt;&lt;img alt="city sculpt - ict pioneers poster" height="283" src="http://farm6.static.flickr.com/5052/5566033684_d126fde314_z.jpg" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Finally, if you've got lots of graphics getting the poster to print can be a little difficut - our department has a HP DesignJet (500 plus) connected to an old print server. I've wasted a ton of ink of buffer-underflows - an "out of memory - data lost" error and big missing portions of the poster (white rectangles). The solution was to spool from a laptop connected straight to the printer. Here're the settings I used to print a landscape poster sideways:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/4653952674/" title="designjet (settings for landscape poster) by twak, on Flickr"&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: none; color: black;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/twak/4653952674/" title="designjet (settings for landscape poster) by twak, on Flickr"&gt;&lt;img alt="designjet (settings for landscape poster)" height="118" src="http://farm5.static.flickr.com/4032/4653952674_f20560b393.jpg" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-2459990899426542686?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/2459990899426542686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/05/inkscape-pdf-and-posters.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/2459990899426542686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/2459990899426542686'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/05/inkscape-pdf-and-posters.html' title='inkscape, pdf and posters'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3310/3555301903_780be119de_t.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-449198072386023055</id><published>2009-05-20T12:20:00.002Z</published><updated>2009-10-06T17:54:40.708Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='straight skeleton'/><category scheme='http://www.blogger.com/atom/ns#' term='buildings'/><category scheme='http://www.blogger.com/atom/ns#' term='terrain'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><category scheme='http://www.blogger.com/atom/ns#' term='non-flat terrain'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>skeletons on non-planar input</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;a href="http://twak.blogspot.com/2009/10/skeleton-index-page.html"&gt;[straight skeleton blog index]&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3548848533/" title="three hills by twak, on Flickr"&gt;&lt;img style="width: 622px; height: 153px;" src="http://farm4.static.flickr.com/3354/3548848533_ef89b9eed8_o.png" alt="three hills" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The standard straight skeleton algorithm relies on a sweep plane. By adding points in at different heights we should be able to grow nice houses on hills. We should also be able to preserve semantic data from the skeleton. The naive method has some problems:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3548848527/" title="naive by twak, on Flickr"&gt;&lt;img style="width: 293px; height: 394px;" src="http://farm4.static.flickr.com/3378/3548848527_7a73ece8f7.jpg" alt="naive" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;It's not too clear in the above, but lower points and edges can intersect with higher edges, because of changes to the points after events. There's a couple of ways out of this - we could say "user beware" and run away, or we could automate something. Turns out this isn't so hard -&lt;br /&gt;&lt;br /&gt;&lt;div&gt;[edit: turns out this is hard - it relies on intersecting two parallel vertical planes to a single line, gah! but given a topological approach to the skeleton algorithm, it should eventually work]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3548848529/" title="robust by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3346/3548848529_41eb38d93b.jpg" alt="robust" height="500" width="357" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;We project subterranean edges with a vertical gradient until they come to the surface. this guarantees that the current polygon on the sweep plane.&lt;br /&gt;&lt;br /&gt;On a different track, there's a lovely idea of using non-planar sweep planes, such as fields, to define some really interesting geometries. As long as the sweep plane never intersects itself at a previous time, the geometry will remain non-intersecting. If we bound the sweep surface (no polygons allowed outside the limits), or define a Poincare disk/Escher -like vanishing horizon on the surface we could get some really interesting fields. These might be suitable for modelling growth in plants (or animals...?). I'd better find that book on differential geometry.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-449198072386023055?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/449198072386023055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/05/skeletons-on-non-planar-input.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/449198072386023055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/449198072386023055'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/05/skeletons-on-non-planar-input.html' title='skeletons on non-planar input'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3378/3548848527_7a73ece8f7_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-3738082995235448903</id><published>2009-05-13T23:43:00.002Z</published><updated>2009-05-13T23:48:51.375Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='asu'/><category scheme='http://www.blogger.com/atom/ns#' term='holiday'/><category scheme='http://www.blogger.com/atom/ns#' term='whywouldiwanttoknowthat'/><title type='text'>smoke me a kipper, I'll be back for breakfast</title><content type='html'>Attention Glasgow: URE DOING IT WRONG&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_wceYeHJ7bn0/SgtbKtxow0I/AAAAAAAAAok/xl8B3k3UiWw/s1600-h/Screenshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 332px;" src="http://4.bp.blogspot.com/_wceYeHJ7bn0/SgtbKtxow0I/AAAAAAAAAok/xl8B3k3UiWw/s400/Screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5335458423195091778" border="0" /&gt;&lt;/a&gt;am working at the &lt;a href="http://prism.asu.edu/"&gt;prism&lt;/a&gt; lab at &lt;a href="http://asu.edu/"&gt;arizona state&lt;/a&gt; for 6 Months :)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3526730523/" title="flightpath by twak, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2428/3526730523_542aa5170f.jpg" alt="flightpath" height="284" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-3738082995235448903?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/3738082995235448903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/05/smoke-me-kipper-ill-be-back-for.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/3738082995235448903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/3738082995235448903'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/05/smoke-me-kipper-ill-be-back-for.html' title='smoke me a kipper, I&apos;ll be back for breakfast'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_wceYeHJ7bn0/SgtbKtxow0I/AAAAAAAAAok/xl8B3k3UiWw/s72-c/Screenshot.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-8580606476005902385</id><published>2009-05-12T23:56:00.007Z</published><updated>2009-10-06T17:54:42.736Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='straight skeleton'/><category scheme='http://www.blogger.com/atom/ns#' term='weighted straight skeleton'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><category scheme='http://www.blogger.com/atom/ns#' term='ambiguous'/><title type='text'>ambiguous weighted skeleton</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;a href="http://twak.blogspot.com/2009/10/skeleton-index-page.html"&gt;[straight skeleton blog index]&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I've just come up with a better example of the &lt;a href="http://twak.blogspot.com/2009/05/engineering-weighted-straight-skeleton.html"&gt;straight skeleton's ambiguity&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3526277869/" title="ambig_neu by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3340/3526277869_822ce44dc8.jpg" alt="ambig_neu" height="398" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The top figure shows a situation where we need to make a decision. The bottom figures, a,b,c are examples of different resolution methods, that might be one of the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;use the nearest intersection (raytracing!)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;invent a priority system that pleases us (artist driven)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;use an average weighting of the two edges (b, above)&lt;/li&gt;&lt;/ul&gt;Of course this follows from the fact that a weighted skeleton with consecutive parallel edges of different gradients is invalid. I'm not certain there's a clean way to resolve it...I'm looking...&lt;br /&gt;&lt;br /&gt;This is probably similar to the ambiguity problem in 3d, described in &lt;span style="font-style: italic;"&gt;Straight Skeletons of Three-Dimensional Polyhedra&lt;/span&gt;  ( &lt;a href="http://dx.doi.org/10.1007/978-3-540-87744-8_13"&gt;doi&lt;/a&gt; | &lt;a href="ftp://ftp.cs.technion.ac.il/pub/barequet/papers/3sv-socg09.pdf.gz"&gt;pdf&lt;/a&gt; | 2008 )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-8580606476005902385?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/8580606476005902385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/05/ambiguous-weighted-skeleton.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/8580606476005902385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/8580606476005902385'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/05/ambiguous-weighted-skeleton.html' title='ambiguous weighted skeleton'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3340/3526277869_822ce44dc8_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-5819571349729334059</id><published>2009-05-01T11:04:00.010Z</published><updated>2011-01-19T17:21:15.943Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='straight skeleton'/><category scheme='http://www.blogger.com/atom/ns#' term='weighted straight skeleton'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><category scheme='http://www.blogger.com/atom/ns#' term='weighted'/><category scheme='http://www.blogger.com/atom/ns#' term='paper draft'/><title type='text'>engineering a weighted straight skeleton algorithm</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;a href="http://twak.blogspot.com/2009/10/skeleton-index-page.html"&gt;[straight skeleton post index]&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This post details an implementation of the Straight Skeleton in the method of Felkel ( &lt;a href="http://www.dma.fi.upm.es/mabellanas/tfcs/skeleton/html/documentacion/Straight%20Skeletons%20Implementation.pdf"&gt;pdf&lt;/a&gt; | Felkel, Obdrzalek | 1998 ), modified to construct weighted skeletons. Source code is available &lt;a href="http://twak.blogspot.com/2010/06/weighted-straight-skeleton-source.html"&gt;here&lt;/a&gt;. [edit: At the time I wrote the post, I didn't understand a few things about some of the strange cases that occur in the weighted straight skeleton - you can read more about them, &lt;a href="http://twak.blogspot.com/2011/01/degeneracy-in-weighted-straight.html"&gt;here&lt;/a&gt;.]&lt;br /&gt;&lt;br /&gt;It contributes a method for dealing with multiple co-sited "split events" in a floating point environment, as well as a resolution strategy for horizontal roof edges, this leads to a degenerate case in which the weighted straight skeleton is ambiguous (detailed &lt;a href="http://twak.blogspot.com/2009/05/ambiguous-weighted-skeleton.html"&gt;here&lt;/a&gt;). In this post I concentrate on showing an algorithm exists, rather than finding it's speed.&lt;br /&gt;&lt;br /&gt;The straight skeleton takes a simple polygon as input and outputs a graph connecting the input vertices as output.&lt;br /&gt;&lt;br /&gt;As defined by &lt;span style="font-style: italic;"&gt;A Novel Type of Skeleton for Polygons&lt;/span&gt; ( &lt;a href="http://dx.doi.org/10.3217/jucs-001-12-0752"&gt;doi&lt;/a&gt; | &lt;a href="http://www.dma.fi.upm.es/mabellanas/tfcs/skeleton/html/documentacion/A%20Novel%20Type%20of%20Skeleton%20for%20Polygons.pdf"&gt;pdf&lt;/a&gt; | Aichholzer, Alberts, Aurenhammer, Gärtner | 1995 ) the straight skeleton shrinks in the edges of a polygon, tracing out the lines made by the corners of the polygon. These traced lines form the skeleton.&lt;br /&gt;&lt;br /&gt;Strictly the skeleton is a 2D construction, however here I regard as a 3D "roof" - given the floorplan of a house, the skeleton is the gutters and crest lines of a roof when viewed from above (4, figure below).&lt;br /&gt;&lt;br /&gt;Some properties of the skeleton include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Unique for a given input polygon&lt;/li&gt;&lt;li&gt;Related to the medial axis and voronoi tesselations for convex shapes&lt;/li&gt;&lt;li&gt;The skeleton of convex shapes is a directed, acyclic graph (DAG) with the input corners as leaves&lt;/li&gt;&lt;li&gt;Each face is monotonic in a direction perpendicular to it's defining edge&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Overview&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The algorithm uses a sweep plane - staring from the input polygon as the lowest set of points, intersections between planes are considered in height order (perpendicularly to the input polygon's plane). The planes are defined by the gradient associated with each edge of the input polygon, in the unweighed case there are all assumed to be the same value.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3485170855/" title="examining_collisions by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3341/3485170855_f038c7ec36.jpg" alt="examining_collisions" height="500" width="486" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;There are collisions that occur between faces that aren't valid. These must be ignored.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3485994412/" title="dont happen by twak, on Flickr"&gt;&lt;img style="width: 278px; height: 394px;" src="http://farm4.static.flickr.com/3586/3485994412_a071383942.jpg" alt="dont happen" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;After all collisions have been accounted for, the algorithm is complete.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Loops of corners&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The primary structure used is a set of corners. Each corner has pointers to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the adjacent (next and previous) input edges  (I assume a counter clockwise ordering of points).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the adjacent corners&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;A partially evaluated skeleton is shown in the following diagram.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3486029700/" title="skeleton_pointer_config by twak, on Flickr"&gt;&lt;img style="width: 426px; height: 221px;" src="http://farm4.static.flickr.com/3625/3486029700_040a2f6dfc.jpg" alt="skeleton_pointer_config" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Via the normal graphic conventions, holes are represented by backwards (clockwise) loops of corners. There are additional structures that list all input edges, current edges and current corners. Each edge keeps track of the skeleton's output edges.&lt;br /&gt;&lt;br /&gt;As the algorithm runs there is one loop of corner pointers for every volume that intersects the current sweep plane. If a skeleton produces a roof with two peaks, there would be two loops of corner points at the corresponding heights. Here it is important to note that an edge can then belong to two different corners. This is the cause of much grief later on.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Collisions between three edges&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When the planes defined by edges collide to a point we have to modify the data structures accordingly. Often we will remove old corners, insert new corners or add output edges to the polygon. There are only so many ways that three edges can collide:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3485259809/" title="three way by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3403/3485259809_0b27bf404f.jpg" alt="three way" height="500" width="210" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In 1) two adjacent edges meet another edge in it's centre, 2) shows three consecutive edges colliding in 3) we see a variation where three consecutive edges that form a loop collide. There are two other important cases:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3486078250/" title="green_red by twak, on Flickr"&gt;&lt;img style="width: 371px; height: 220px;" src="http://farm4.static.flickr.com/3361/3486078250_7318e42093.jpg" alt="green_red" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;When there is only one plane at a point, it is just a plane(!?). When there are two, it is just an edge (above, green). These aren't registered as events and no action is taken. 1,2 &amp;amp; 3) covered all possible topologies except three unconnected edges colliding (red, above). The arrangement is impossible (in the simple unweighted straight skeleton case) as there must be something between the edges that also collides at that point, at which point it is a degenerate case. I'll get onto these in a bit.&lt;br /&gt;&lt;br /&gt;Each plane defined by each input edge cannot collide with just any old other edge-plane. Eppstein (&lt;span style="font-style: italic;"&gt;Raising Roofs, Crashing Cycles, and Playing Pool&lt;/span&gt; (&lt;a href="http://dx.doi.org/10.1007/PL00009479"&gt;doi&lt;/a&gt; | &lt;a href="http://compgeom.cs.uiuc.edu/~jeffe/pubs/cycles.html"&gt;web&lt;/a&gt; | Eppstein, Erickson | 1999 )) gives more ideas on a fast approach, but to just understand correctness we can start by noting that when two planes collide it forms an edge. We need three planes to collide to form a point; Before three planes can collide, two of these planes must already be adjacent. (Unlike Felkel's approach I'm less interested in the "bisectors" defined by each corner's pair of edges - this quickly becomes misleading in the weighted case). Using the above list of possible intersections, we can see we should only be testing for collisions between pairs of adjacent edges and one other edge.&lt;br /&gt;&lt;br /&gt;This digram gives an overview of the data structure additions for each three plane case (the manipulations implemented are detailed in the following section):&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3486630270/" title="pointer twiddling by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3628/3486630270_eb5f35730f.jpg" alt="pointer twiddling" height="341" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;These three types of collisions are sufficient the calculate the straight skeleton of almost all random input polygons (see following video or image). The other cases are degenerate and are discussed in the next section.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/3BMSDHp9r4w&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/3BMSDHp9r4w&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3486701678/" title="rect26802 by twak, on Flickr"&gt;&lt;img style="width: 413px; height: 358px;" src="http://farm4.static.flickr.com/3636/3486701678_68febb7bc6.jpg" alt="rect26802" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Collisions must occur on the faces &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One way to view the algorithm, is that after the first event, we calculate a "new input polygon" at the given height and start again - so we might see a the algorithms executing on a pile of contours, one for every event, fig. 1 below.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3490908957/" title="redo by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3383/3490908957_dd091526ae.jpg" alt="redo" height="220" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;So far the collisions have been presented as infinite planes, however we are really colliding a set of three sided polygons or faces. For example the back edge (bold, 2) in the above figure changes it's topology (red, 2) after some of the events. After event b (&lt;a href="http://www.flickr.com/photos/twak/3490908957/sizes/l/"&gt;view the above larger&lt;/a&gt;) the face belongs to two volumes, and hence gives two polygons to collide against. This means that for all of the three faces involved in a collision we must ensure that a collision occurs within it's bounds.&lt;br /&gt;&lt;br /&gt;[diagram showing what happens when we don't bother with these checks]&lt;br /&gt;&lt;br /&gt;There are two obvious places to perform this check:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Store a list of events between polygons - After an event, find new events and remove old events involving each edge or bisector that's changed.&lt;/li&gt;&lt;li&gt;Store a list of events between planes (planes don't have bounds). Before evaluating an event, ensure it occurs within all three faces. This is the simpler method I implemented.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;One trick here (as Felkel describes) is to realize that if two adjacent edges are involved, then the collision is within the bounds for those faces. The faces are adjacent on a surface of the skeleton volume, so they intersect only along this line (and any intersection must also occur on this line). These adjacent edges form Felkel's "bisectors", and as Eppstein explains reduces this to a ray-casting problem that has very fast known solutions. Each of the three types of collisions identified involves a pair of adjacent edges colliding.&lt;br /&gt;&lt;br /&gt;These "three sided" faces that we're colliding are sometime triangles, but sometimes they are unbounded, when the adjacent edge move away from each other. (They are triangles with infinite area!)&lt;br /&gt;&lt;br /&gt;Floating point calculations sometimes miss collisions that we expect, topologically, to happen. However we can increase the chances of getting a topologically sound result if we increase the margin (epsilon-error range) until we catch all collisions, even if we pick up some additional errors. There are two places where we need to be careful - in checking that a collision really happens on an edge's face and in finding events that happen "at the same height" or "in the same place". I use a cylinder shaped volume to accumulate events that occur at a given height range and within a certain distance to a centre point.&lt;/div&gt;&lt;div&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Collisions between many edges&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In a degenerate case, more than three planes can meet at one point. This happens in the center of regular polygons, as well as examples such as the following image (where five or eight faces meet single points). Here I present a resolution algorithm that processes pairs of adjacent corners, for any number of edges meeting at a point.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3485899669/" title="rect27677 by twak, on Flickr"&gt;&lt;img style="width: 333px; height: 334px;" src="http://farm4.static.flickr.com/3658/3485899669_de24d12a2f.jpg" alt="rect27677" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;It is important that these occasions are detected and treated with respect, as we assume that the linked-list of corners and their locations form a simple polygon (when projected down onto the input plane). This takes a little patience when working with floating point calculations. Luckily we can generalise some rules for handling point collisions, whether three, or any number of planes meet at a point.&lt;br /&gt;&lt;br /&gt;The collision resolution technique takes a set of planes that meet at a point as input. It processes these into lists of &lt;span style="font-style: italic;"&gt;chains&lt;/span&gt; of adjacent corners that reference these edges. While constructing these chains we perform the face collisions to determine which (if any) corner references the correct portion of the edge. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Chains consist of ordered lists of edges meeting at a point. If the edges are adjacent, they are in the same chain.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Remember that one edge can be referenced by more that one corner, when there are are more than one "peaks" in the output roof shape.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3491381511/" title="pairwise by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3604/3491381511_4c68097172.jpg" alt="pairwise" height="500" width="470" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In figure 1 we see the input structure - a &lt;span style="font-style: italic;"&gt;chain&lt;/span&gt; of edges abc and their associated corners (dark blue circles). We now process each pair of edges that are adjacent (orange lines) as in figures 2 and 3:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;We remove each of these corners from the master-list. (note that inter-corner pointers, green arrows, don't need to be adjusted).&lt;/li&gt;&lt;li&gt;We add in output edges to the skeleton.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Then we process the non-adjacent edge pairs as in figure 4, adding in a new input corner and finally adjusting the inter-corner pointers, (cutting out the internal corners). However non-adjacent edge pairs take a little more thought as multiple chains can collide at one point.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3491447349/" title="pairwise_intra by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3398/3491447349_e82273d2bf.jpg" alt="pairwise_intra" height="205" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;As the above shows, once the inter-chain edges are processed (figure 2, above) we can then move onto intra-chain collisions (figure 3). We still process corners by pairs, but this time we process the three pairs that are non-adjacent, the red, yellow and orange edges in figure 3. We order these around the collision point (in the unweighted case this can be done by the angle any corner on the chain makes with the collision point, but see later comments on the weighted case), and process the pair made by first corner in the first chain, with the last corner of the next.&lt;br /&gt;&lt;br /&gt;For each of these pairs we add one additional corner that is adjacent to each edge. This corner is at the location of the collision, and cuts out the inter-chain corners from any edge loops.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Horizontal roof edges&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When evaluating rectilinear shapes, such as the above cross-shape, we often see horizontal skeleton lines. This is another degenerate case that we often see along side the &gt;3 planes at a point case.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;We can note that before processing events at one height, there should be no adjacent edges that form a horizontal edge in the skeleton. Also that after processing there should be no such edges.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Because every horizontal skeleton edge must have an event at it's start and end, we can be sure that if we process all the events at one height together, we will have closed all horizontal edges. [edit: this assumption is wrong - see &lt;a href="http://twak.blogspot.com/2009/05/ambiguous-weighted-skeleton.html"&gt;later post&lt;/a&gt; on ambiguous cases]&lt;br /&gt;&lt;br /&gt;As all events co-heighted occur simultaneously there is no interaction between events and the algorithm is to be deterministic. There is no way to sort co-heighted events, so we let them occur in an arbitrary order.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;After one event occurs we may be in the situation where two consecutive, adjacent edges form a horizontal edge. Because this edge has no height, there is no way to determine which events it causes can occur first:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3492026772/" title="horiz bisector barf by twak, on Flickr"&gt;&lt;img style="width: 316px; height: 391px;" src="http://farm4.static.flickr.com/3338/3492026772_2d1636f5ff.jpg" alt="horiz bisector barf" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In the above figure, there is a collision at x, then at the same height, faces a,b,c &amp;amp;d collide at y. Face a should be rejected because we're outside the bisector. However as the edge forms a horizontal skeleton line, the bisector is poorly defined (green boundaries), so we would have to accept that all four faces collide, resulting in deformed output.&lt;br /&gt;&lt;br /&gt;We do not track events created by consecutive horizontal edges, safe in the knowledge that after we've dealt with all events at the same height there won't be be any left. In a similar way, we can't ascertain whether collisions between planes occur within the current face boundaries.&lt;br /&gt;&lt;br /&gt;For this reason all face-collision checks for events at one height are performed before any are evaluated. I do this by caching a list of chains. This brings with it the problem that the corner used in a chain may have been superseded, or "cut off" from it's intended collision (see figure below) by an earlier event at the same height.&lt;br /&gt;&lt;br /&gt;The resolution strategy here depends on the chain type:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If the chain has more than one corner in it, it represents the intersection of two faces, so there will always be a corner lying on this intersection whose adjacencies will lead to the correct corner.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If the chain is of length 1, we must resort to more geometric calculations to project all referenced corners onto the input edge, and choose the preceding corner.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3491995848/" title="validate chains by twak, on Flickr"&gt;&lt;img style="width: 373px; height: 327px;" src="http://farm4.static.flickr.com/3537/3491995848_987b338eea.jpg" alt="validate chains" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;In the above figure 1, faces a,b,c,d and e collide at point x. We find their positions in the given volumes by locating the corresponding corners. As co-heighted events occur in an arbitrary order, by the time figure 2 occurs the corners (u &amp;amp; v) are no longer valid.&lt;br /&gt;&lt;br /&gt;In the case of u (or any chain with 2+ edges), we can can use the following corner's previous corner to find u'. This is because the corner references two edges used in a collision, so must take part it (and horizontal events are independent - they can't effect each other's edges or validity).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;This trick won't work to find v' as it is part of a chain of length 1. We project all corners that reference the edge onto the collision line. We then use the point (v') that is just before the projected collision as the previous corner. We ignore any points that reference the edge before the found corner. This is valid as all these points lie on the edge's plane, and all the points occur at the same height, so their order is defined by their projection. There is no question that the event occurs as there is no interaction between co-heighted events.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Negative edge gradients&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;By changing the weight or gradient of an edge, we can drastically change the output shape. There is even the possibility of giving the edges a negative (outwards) gradient, to create "overhangs".&lt;br /&gt;&lt;br /&gt;No modifications are required to the given algorithm to allow these gradients.&lt;br /&gt;&lt;br /&gt;It is fun to note that negating the gradient (reversed polarity result in the figure below) produces the same shape as reversing the polarity (loop direction) of the input, but with a different final meaning - no longer is the result the top of the roof-shape (a surface whose normals point upwards), it becomes the ceiling of the building from the inside (a surface whose normals point downwards).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3492108516/" title="reversed by twak, on Flickr"&gt;&lt;img style="width: 377px; height: 301px;" src="http://farm4.static.flickr.com/3406/3492108516_d8d3884bd0.jpg" alt="reversed" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;When edges have negative gradients, it becomes much harder to guarantee termination of the skeleton - it may define an infinite volume! Sometimes it will terminate, others not. Determining which polygons will terminate and which won't would be a good future research direction. Of course it is always possible to specify an arbitrarily high horizontal plane, which terminates the algorithm.&lt;br /&gt;&lt;br /&gt;The following animation places several weighted straight skeletons with varying gradients on top of each other to create some primitive architecture.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Lz6Ne16hfc8&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/Lz6Ne16hfc8&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Determining the order of chains&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Determining the order of corners within a chain can be accomplished by following adjacency pointers to other corners. But between chains it becomes harder. In the weighted skeleton case we must project the corners to the collision height, before determining the order.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3492312194/" title="chain_order by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3637/3492312194_54fb2cea25.jpg" alt="chain_order" height="228" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Angles around the intersection point are less than a full circle. If they weren't they would have overlapped collided at a lower height.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Adjacent parallel edges&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If two skeleton edges are parallel (here I mean edges going in the same direction, not opposites), the intersection of their planes with a third is no longer a point (it is either a line or not an intersection at all). This leaves the straight skeleton poorly defined. This condition can occur in two places&lt;br /&gt;&lt;ol&gt;&lt;li&gt;the input polygon&lt;/li&gt;&lt;li&gt;when intermediate edges are removed to being two parallel edges together&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;This also causes much "instability" or chaotic behavior in the algorithm. In the unweighted case it is possible to define the collision of two consecutive parallel edge-planes as the gradient vector starting from the intersection point. This is not possible if the edges have different weights, see the following video as the weight changes:&lt;br /&gt;&lt;br /&gt;There has to be an artificial resolution method for parallel consecutive edges. The simplest is to remove one of the offending edges - this choice can be arbitrary and is justified by the limiting case (as we approach Pi degrees from either side, we resolve to one edge or the other). This works in the first case, parallel consecutives in the input polygon.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3491011875/" title="two become one by twak, on Flickr"&gt;&lt;img style="width: 261px; height: 234px;" src="http://farm4.static.flickr.com/3623/3491011875_b6b126a44a.jpg" alt="two become one" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In the above figure edge a and b are parallel and have the same weight, they are not consecutive at the start, but become consecutive after an event. Theoretically any line that lies on a and b's face could become the bisector after the collision, however it must be consistently chosen throughout the algorithm. As I'm interested in clean 3D solids, the outcome in the figure is most desirable. By merging the two faces together we can see that the input to the algorithm shouldn't have been the two separate edges a and b, but rather one edge referenced twice. This is the approach I take.&lt;br /&gt;&lt;br /&gt;On the subject of chaotic elements of the straight skeleton, another situation deserves to be pointed out. If concave faces' bisectors pass each other ("split events" in Felkel's terminology), there is often a sudden shift in the topology of the skeleton.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/IOu7cdgq4Uw&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/IOu7cdgq4Uw&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Adjacent and horizontal faces form an ambiguous case&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When the skeleton is weighted (different gradients on each edge), there is an ill defined condition:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3492345756/" title="ambiguous by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3641/3492345756_2fb359a2af.jpg" alt="ambiguous" height="500" width="327" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In figure 1, we see the input, a weighted skeleton where edge a has a lower gradient than edge b. These two edges meet to form a horizontal edge. At this point there are two resolution possibilities that make topological sense, 2a, letting the lower gradient take priority and 2b, letting the higher gradient take priority.&lt;br /&gt;&lt;br /&gt;[edit: this is wrong, either 2a or 2b, above, are equally valid] &lt;strike&gt;A sensible implementation should choose to give the steeper edge priority (figure 2a) for two reasons:&lt;br /&gt;&lt;/strike&gt;&lt;ol&gt;&lt;li&gt;&lt;strike&gt;If we look at the limiting case as edges a and b become parallel, as we reduce the angle between them, we get output topology favoring the steeper edge.&lt;/strike&gt;&lt;/li&gt;&lt;li&gt;&lt;strike&gt;Topology 2b leads to the situation where one horizontal event causes another, breaking earlier assumptions in the implementation. This would mean that we could no longer order events by height.&lt;br /&gt;&lt;/strike&gt;&lt;/li&gt;&lt;strike&gt; &lt;/strike&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div&gt;However this is not consistent with the concept of the skeleton being a "wavefront".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Aichholzer et al. do not describe the weighted skeleton, and so do not come across this situation in their text. I'm not aware of a description of the weighted skeleton that avoids this ambiguity.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; Building faces&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once the edges of the skeleton are known, it is desirable to be able to define faces (we might want to tile our roof). There is one edge for each face.&lt;br /&gt;&lt;br /&gt;The implemented algorithm keeps a single graph (a hash-map) of all edges in the skeleton, and for each input edge there is a list of corners that once referenced that edge. This information is sufficient to re-construct each face:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3486792008/" title="edges_one by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3333/3486792008_a535975f0c.jpg" alt="edges_one" height="500" width="363" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;As there may be parallel edges with the same gradient, the algorithm needs to be a little smarter:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3486792026/" title="edges_two by twak, on Flickr"&gt;&lt;img style="width: 443px; height: 323px;" src="http://farm4.static.flickr.com/3554/3486792026_e5e85ef2f5.jpg" alt="edges_two" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-5819571349729334059?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/5819571349729334059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/05/engineering-weighted-straight-skeleton.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/5819571349729334059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/5819571349729334059'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/05/engineering-weighted-straight-skeleton.html' title='engineering a weighted straight skeleton algorithm'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3341/3485170855_f038c7ec36_t.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-6855968406124784467</id><published>2009-05-01T02:25:00.003Z</published><updated>2009-09-08T21:52:00.204Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='20805'/><category scheme='http://www.blogger.com/atom/ns#' term='mudslingin'/><category scheme='http://www.blogger.com/atom/ns#' term='COMS'/><category scheme='http://www.blogger.com/atom/ns#' term='mudslinging'/><category scheme='http://www.blogger.com/atom/ns#' term='bristol'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><category scheme='http://www.blogger.com/atom/ns#' term='COMS20805'/><category scheme='http://www.blogger.com/atom/ns#' term='group project'/><title type='text'>mudslingin'</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3383912506/" title="Mudslingin by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3540/3383912506_b148432c3c.jpg" alt="Mudslingin" height="500" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;The other project I'd forgotten about (until I read &lt;a href="http://twak.blogspot.com/2009/03/eurographics-09-papers.html"&gt;this&lt;/a&gt; paper) was Mudslingin', the second year undergrad (5 year old), 5 person "group" project. It's a two player, network enabled game in which you try to drown your opponent by throwing balloons full of mud or water at them. Your opponent has bombs to blow up your dams - great fun for the whole family. It has quite a lot of features now I look back on it, even it it was rough around the edges.&lt;br /&gt;&lt;br /&gt;Click &lt;a href="http://dcs.gla.ac.uk/%7Etkelly/bits/mud/launch.jnlp"&gt;here&lt;/a&gt; to play (binary file run at your own risk, requires &lt;a href="http://java.com/"&gt;Java 1.5+&lt;/a&gt;). There are lots of bugs, many to do with a 40 minute conversion into the webstart format. Sound, save and networking probably won't work in the webstart edition. The options menu seems to freeze everything. You also need another person to play against! Keys:&lt;br /&gt;&lt;br /&gt;Menus: Up, Down, Enter&lt;br /&gt;Player 1: Up, Down, Left, Right&lt;br /&gt;Player 2: K,L,O,M&lt;br /&gt;Quit: Escape&lt;br /&gt;&lt;br /&gt;Go "start game" then pick one of the levels like 'blood fountain'.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3383110615/" title="2009-03-25_0053 by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3663/3383110615_9c0a2f9ce9.jpg" alt="2009-03-25_0053" height="375" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Group &lt;a href="http://dcs.gla.ac.uk/%7Etkelly/bits/mud/mudsling_report.pdf"&gt;report&lt;/a&gt; is here. Source files are &lt;a href="http://dcs.gla.ac.uk/%7Etkelly/bits/mud/mud_src.zip"&gt;here&lt;/a&gt; (I'm releasing them under a &lt;a href="http://sam.zoy.org/wtfpl/"&gt;WTFPL&lt;/a&gt;), and includes the (bizarre) perl server.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;I think we came top of the year (after a database blunder I ended up being able to see the whole year's grades).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3383928454/" title="cavewin by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3627/3383928454_5b7dd6807a.jpg" alt="cavewin" height="375" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Now this is published, I can pack my computer up so it can go into storage.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-6855968406124784467?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/6855968406124784467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/03/mudslingin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/6855968406124784467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/6855968406124784467'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/03/mudslingin.html' title='mudslingin&apos;'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3540/3383912506_b148432c3c_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-4201564459708232045</id><published>2009-04-30T00:33:00.000Z</published><updated>2009-04-30T23:36:32.284Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><category scheme='http://www.blogger.com/atom/ns#' term='procedural geometry'/><category scheme='http://www.blogger.com/atom/ns#' term='scribd'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>random talk on procedural</title><content type='html'>&lt;a href="http://www.macs.hw.ac.uk/%7Eruth"&gt;Ruth Aylett&lt;/a&gt; asked me to give a talk to members of the graphics group at Heriot Watt, so &lt;a href="http://www.blogger.com/href=" com="" doc="" 14809529="" geometry=""&gt;here&lt;/a&gt; it is.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_198102738035515" name="doc_198102738035515" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" width="100%" height="500"&gt;  &lt;param name="movie" value="http://d.scribd.com/ScribdViewer.swf?document_id=14809529&amp;amp;access_key=key-xd3208ligqof9g4v360&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode="&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;        &lt;embed src="http://d.scribd.com/ScribdViewer.swf?document_id=14809529&amp;amp;access_key=key-xd3208ligqof9g4v360&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode=" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_198102738035515_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle" width="100%" height="500"&gt;&lt;/embed&gt;   &lt;/object&gt; &lt;div style="margin: 6px auto 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block;"&gt;&lt;a href="http://www.scribd.com/explore/Research/" style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/a&gt;           &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Was mostly a rehash of my Master's dissertation slides. Sorry, some slides make no sense without me talking over them - use your imagination...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-4201564459708232045?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/4201564459708232045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/04/random-talk-on-procedural.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/4201564459708232045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/4201564459708232045'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/04/random-talk-on-procedural.html' title='random talk on procedural'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-7497967792548535721</id><published>2009-04-26T06:54:00.004Z</published><updated>2009-04-26T16:59:23.923Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='buildings'/><category scheme='http://www.blogger.com/atom/ns#' term='camera'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><category scheme='http://www.blogger.com/atom/ns#' term='glasgow'/><title type='text'>buildings on curved roads in glasgow</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Park Circus&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3476923804/" title="park circus by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3341/3476923804_10452aabe0.jpg" alt="park circus" width="500" height="251" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.co.uk/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=&amp;amp;ie=UTF8&amp;amp;ll=55.86921,-4.276729&amp;amp;spn=0.010715,0.033045&amp;amp;t=h&amp;amp;z=16&amp;amp;output=embed"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe marginheight="0" marginwidth="0" src="http://maps.google.co.uk/maps/sv?cbp=12,287.91637107142617,,0,0.2077922077922157&amp;amp;cbll=55.869164,-4.279271&amp;amp;panoid=&amp;amp;v=1&amp;amp;hl=en&amp;amp;gl=uk" scrolling="no" width="425" frameborder="0" height="240"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://maps.live.com/default.aspx?v=2&amp;amp;FORM=LMLTCP&amp;amp;cp=t9bgy7gn92gz&amp;amp;style=b&amp;amp;lvl=2&amp;amp;tilt=-90&amp;amp;dir=0&amp;amp;alt=-1000&amp;amp;scene=29121307&amp;amp;phx=0&amp;amp;phy=0&amp;amp;phscl=1&amp;amp;encType=1"&gt;Oblique angle on live maps&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dundonald Road&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(back of:)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/twak/3476925836/" title="IMG_4120 by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3378/3476925836_393a89e898.jpg" alt="IMG_4120" width="500" height="333" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe marginheight="0" marginwidth="0" src="http://maps.google.co.uk/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=&amp;amp;ie=UTF8&amp;amp;ll=55.878648,-4.298009&amp;amp;spn=0.001589,0.004522&amp;amp;t=h&amp;amp;z=18&amp;amp;output=embed" scrolling="no" width="425" frameborder="0" height="350"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Kensington Gate&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://farm4.static.flickr.com/3653/3476116145_175b02358d_o.jpg" title="curvey by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3653/3476116145_22f7c5a478.jpg" alt="curvey" width="500" height="164" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://farm4.static.flickr.com/3385/3476968250_997d24f192_o.jpg" title="Kensington Gate 2 by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3385/3476968250_55373f26c6.jpg" alt="Kensington Gate 2" width="500" height="84" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;iframe marginheight="0" marginwidth="0" src="http://maps.google.co.uk/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=&amp;amp;ie=UTF8&amp;amp;ll=55.879796,-4.299637&amp;amp;spn=0.000794,0.002261&amp;amp;t=h&amp;amp;z=19&amp;amp;output=embed" scrolling="no" width="425" frameborder="0" height="350"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://maps.live.com/default.aspx?v=2&amp;FORM=LMLTCP&amp;cp=t9cz5pgn7jtg&amp;style=o&amp;lvl=1&amp;tilt=-90&amp;dir=0&amp;alt=-1000&amp;phx=0&amp;phy=0&amp;phscl=1&amp;scene=29120411&amp;encType=1"&gt;Oblique view on live maps&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-7497967792548535721?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/7497967792548535721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/04/buildings-on-curved-roads-in-glasgow.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7497967792548535721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7497967792548535721'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/04/buildings-on-curved-roads-in-glasgow.html' title='buildings on curved roads in glasgow'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3341/3476923804_10452aabe0_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-4647838197980298925</id><published>2009-03-31T16:13:00.017Z</published><updated>2010-12-02T16:22:43.141Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='voronoi'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><category scheme='http://www.blogger.com/atom/ns#' term='robust'/><title type='text'>geometric robustness papers</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;div style="text-align: left;"&gt;I've suddenly lost faith in floating point (FP) arithmetic for geometry. This is best explained by the &lt;a href="http://http//www.cgal.org/philosophy.html"&gt;CGAL&lt;/a&gt; people. Here are my notes on papers I've read:&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;hr /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;i&gt;Classroom Examples of Robustness Problems in Geometric Computations&lt;/i&gt;&lt;b&gt; ( &lt;a href="http://www.mpi-inf.mpg.de/~kettner/pub/nonrobust_cgta_06_a.html"&gt;web&lt;/a&gt; | Lutz Kettner, Kurt Mehlhorn, Sylvain Pion, Stefan Schirra &amp;amp; Chee Yap | 2006 )&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This is a great introduction to the properties of floating point arithmetic in a floating point environment. The authors set out to describe a complete set situations where floating point upsets a few simple algorithms.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The authors describe this in respect to calculating the convex hull (gift wrapping algorithms) and finding the 3d Delunay triangulation of a set of points. They give the facts that the algorithms rely on, and show how these often do not exist in the floating point situations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The most common cause of error is that when working with number of different sizes, the smaller one is always rounded to fit into the larger one. When working with points, this means that the precision of a calculation is limited by the largest point involved. In many situations these number can be spatially remote. The below image shows the results of trying to decide which side (of the black) line a point lies on. The point is moved over the (256x256) grid in the smallest steps allowed by double precision. The grid is the colour coded based on which side of the line the algorithm reports the point to be on (red, yellow and blue for right, on-the-line and left respectively). &lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/grain.png" width="600" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Different lines are examined in each of the three images - the patters of the errors are quite non-intuitive. We often see points classified on the wrong side of the line.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The patterns get messier if we look at higher precision floating point types. The paper does a very good job at explaining how these properties of floating point can lead to gross errors in the algorithms.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It briefly looks at techniques that don't solve the problem - adding an epsilon value (video below) and perturbing the input.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Here is my video of animating the epsilon value in a geometric floating point context:&lt;div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object width="480" height="385"&gt;&lt;embed src="http://www.youtube.com/v/BsAIk9IGaZk?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;We're evaluating the same function to determine which side of a line a point is on (except the horizontal is flipped). Over each frame we move the point around. Blue is one side, red the other, yellow on the line. We move the point by the smallest quantity allowed by the double precision floating point system.&lt;br /&gt;&lt;br /&gt;The animation shows an increasing "fudge factor" or epsilon added to try and make the computation more robust. The boundary stays just as strange!&lt;br /&gt;&lt;br /&gt;Animating the epsilon value of the first example in the paper from 0 in steps of 2^-44 @ 3 frames per second. &lt;a href="http://paste.org/pastebin/view/25689"&gt;Java code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span&gt;&lt;i&gt;Construction of the Voronoi diagram for `one million' generators in single-precision arithmetic&lt;b&gt; &lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;( &lt;/b&gt;&lt;/span&gt;&lt;a href="http://ieeexplore.ieee.org/iel1/5/4235/00163412.pdf?tp=&amp;amp;arnumber=163412&amp;amp;isnumber=4235"&gt;&lt;b&gt;pdf&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt; | &lt;/b&gt;&lt;/span&gt;&lt;a href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=163412"&gt;&lt;b&gt;ieee&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt; | &lt;/b&gt;&lt;/span&gt;&lt;a href="http://dx.doi.org/10.1109/5.163412"&gt;&lt;b&gt;doi&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt; | &lt;/b&gt;&lt;/span&gt;&lt;b&gt;Sugihara, Iri | 1992 )&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dcs.gla.ac.uk/people/personal/tkelly/geometry/million.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 310px; height: 311px;" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/geometry/million.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;Hence, we change our goal; we try to construct a diagram which shares some topological properties with the true Voronoi digram....the output "converges" to the true Vornoi digram as the precision in computation becomes higher.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;To do this the paper's authors present version of the insertion Voronoi algorithm that modifies the topology from one consistent state to the next. The basic step is to query the topological model before each cell is included in the insertion of a new point.&lt;br /&gt;&lt;br /&gt;Given a new point to insert (i, below), the topological model has three rules relate to finding the set of cell-corners to modify:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The set of cell corners is not empty&lt;/li&gt;&lt;li&gt;The set of cell corners form a tree&lt;/li&gt;&lt;li&gt;Every corner is reachable from every other corner by traversing existing Voronoi edges that lie between cells in the set.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;These properties have are not shown to be necessary and sufficient to derive the Voronoi (I think they are, elsewhere, see the references in next paper - Topologically Orientated Implementation), but they get close -  selecting topologically consistent cells. The algorithm "flood-fills" a region of the cell-corners, starting with the nearest to the new point (blue, i, below), collecting cell-corners (ii, green dots) that satisfy these conditions. Once all adjacent corners have been shown to be inadmissible (red dots), all the admissible ones can be proved to have been found. Then (iii), the Voronoi graph and the topological map is updated, and we move onto the next new point:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3402507652/" title="vor by twak, on Flickr"&gt;&lt;img style="width: 487px; height: 146px;" src="http://farm4.static.flickr.com/3651/3402507652_e570336d24.jpg" alt="vor" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;There is also a section on how to compute with the least floating point inaccuracy, but it isn't as interesting. The cunning work here was breaking the algorithm down into a set of topological manipulations that are always valid.&lt;br /&gt;&lt;br /&gt;Sometimes the floating point output isn't valid, that is cells and lines overlap. But that happens in areas proportional in size to the error margin (FP accuracy) - they could easily be post-filtered out if required. The robustness of the algorithm can produce output such as the million points in the above (black and white) figure, that would otherwise cause visible trouble.&lt;br /&gt;&lt;br /&gt;The approach can be seen as using the topology as the central structure that is guided by the inaccurate floating point calculations.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span&gt;&lt;i&gt;Topology-Oriented Implementation—An Approach to Robust Geometric Algorithms&lt;/i&gt;&lt;b&gt;  ( &lt;/b&gt;&lt;/span&gt;&lt;a style="font-weight: bold;" href="http://dx.doi.org/10.1007/s004530010002"&gt;doi&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | &lt;/span&gt;&lt;a href="http://www.springerlink.com/content/g4u74mvx5n3fwy43/fulltext.pdf"&gt;&lt;b&gt;pdf&lt;/b&gt;&lt;/a&gt;&lt;span&gt;&lt;b&gt; | &lt;/b&gt;&lt;/span&gt;&lt;b&gt;K. Sugihara, M. Iri, H. Inagaki &amp;amp; T. Imai  | 2000 )&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;This is another presentation of the previous material with a couple of different examples. Logical and combinatorial computations can be done correctly while geometric ones are unreliable.&lt;br /&gt;&lt;br /&gt;The overview is that geometric algorithms have a set of topological solutions, that branch from each other. One of these is the correct solution, but as long as we end up somewhere on tree of valid solutions we're doing ok. The floating point gods (inaccuracies) decide which branch the algorithm will follow. More formally (quoted:)&lt;br /&gt;&lt;ul style="font-style: italic; text-align: center;"&gt;&lt;li&gt;Collect purely topolgical properties that should be satisfied by the solutions of the problem and can be checked efficiently&lt;/li&gt;&lt;li&gt;Describe the basic part of the algorithm only in terms of combinatorial and topological computation in such a way that the properties are guaranteed&lt;/li&gt;&lt;li&gt;Conduct numerical compuations at each note of the tree in order to choose the branch that is most licely to lead to the correction solution&lt;/li&gt;&lt;/ul&gt;Since we can't even detect degerate geometric cases consistently, the output might be degenerate, but if well designed, the degeneracies will be at around the floating-point-accuracy-scale. As the precision of the FP calculations increases, the solution converges on the desired one.&lt;br /&gt;&lt;br /&gt;The paper includes examples for surface-slicing and Voronoi tessellation.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span&gt;&lt;i&gt;Lazy Arithmetic&lt;/i&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; ( &lt;a href="http://www.blogger.com/dx.doi.org/10.1109/12.620478"&gt;doi&lt;/a&gt; | &lt;/b&gt;&lt;a href="http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=620478&amp;amp;isnumber=13505"&gt;&lt;b&gt;pdf&lt;/b&gt;&lt;/a&gt;&lt;b&gt; | &lt;/b&gt;&lt;a href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=620478"&gt;&lt;b&gt;ieee&lt;/b&gt;&lt;/a&gt;&lt;b&gt; | &lt;/b&gt;&lt;/span&gt;&lt;b&gt;Dominique Michelucci &amp;amp; Jean-Michel Moreau | 1997 )&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;This is a subject overview paper.&lt;br /&gt;&lt;br /&gt;It outlines several solid geometric examples that are broken by floating point arithmetic -&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The point where two lines cross is on a different side of each line&lt;/li&gt;&lt;li&gt;Zero determinants of non-singular matrices (the result changes depending on how the calculation is done)&lt;/li&gt;&lt;li&gt;Lexicographical order of line crossing (y1 &lt; y1 ="="&gt;&lt;/li&gt;&lt;li&gt;Simple comutations expressed in different ways suffer different truncation limits so one equation has two answers&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Pappus_configuration"&gt;Pappus' theorem&lt;/a&gt; doesn't generally hold&lt;/li&gt;&lt;li&gt;Borderline cases when using matrix determinants to identify angles less than or greater than a right angle&lt;/li&gt;&lt;/ul&gt;Two main classes of ways of dealing with these problems are presented - inexact and exact algorithms.&lt;br /&gt;&lt;br /&gt;Inexact algorithms do not produce the exact mathematical result, but approximate this result. Since FP is only an approximation in the first place, these can be viewed as a set of tools for ensuring that the algorithms do not end up in an inconsistent state  (they don't infinetely loop or teminate abnormally).&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Warned programming involves coding tricks using limited reasoning (topological data or exact number representation) as each borderline case is found.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Epsilon Heuristics - assume that two items are identical if they are within a given range (epsilon). There is no way to guarantee that this approach will produce a consistent internal state - we are effectively shuffling points in one region of space.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Symbolic Programming - By ensuring that the algorithm's choices are guided by topological or combinatorial reasoning, floating point errors will only change the path not create invalid results. This is the idea presented in the Topology-Orientated Implementation paper by Sugihara.&lt;/li&gt;&lt;li&gt;Historical Book-keeping - By keeping a list of decisions and ensuring that all following decisions are consistent with previous decisions, the world is consistent from the algorithms perspective. This approach is described as being cumbersome and using lots of memory.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Confidence Intervals - Formalised Epsilon Heuristics - results involving floating point calculations can be "I don't know" when FP is known to be incorrect.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Entirely exact methods on the other hand always calculate the true value of every expression. Since we're often interested in boolean answers (is this point on the left or right of that line), we do a lot of additional work.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;Ten random points with double-precision coordinates were triangulated using floating-point arithmetic in .1 seconds; 10 random points with rational coordinates (two-digit numerator, three-digit denominator, in base 2) were triangulated using rational arithmetic in 1,200 seconds, generating intermediate values with as many as 81 digits. &lt;sup&gt;[Efficient Delaunay Triangulation Using Rational Arithmetic: Karasick et.al]&lt;/sup&gt; &lt;/span&gt;&lt;/div&gt;&lt;br /&gt;The additional processing makes exact methods formidable, therefore mixed methods are introduced. These first perform the calculations in a specific accuracy, but track the error bounds to ensure the result is correct. Classes of language such as &lt;a href="http://www.rz.uni-karlsruhe.de/~iam/html/language/xsc-sprachen.html"&gt;XSC&lt;/a&gt; do this automatically. If the result is unstable around the bounds then the algorithm reverts to exact arithmetic.&lt;br /&gt;&lt;br /&gt;One approach (Karasick/Yamagushi) converts all calculations to computing the sign of a 4x4 determinant. This is then calculated using the most significant bits, then adds additional bits until the result is unambiguous. While I haven't seen enough geometry to be able to say if all problems can be found my calculating the det of a matrix - I am sure many of the important ones (which side of a line does a point lie on?) can be.  Fortune and van Wyk implement an automatic system along these lines that compiles down to c++ source.&lt;br /&gt;&lt;br /&gt;Several of the exact methods pre-process a specific problem to calculate how much precision is required, then calculate using these figures.&lt;br /&gt;&lt;br /&gt;At this point the authors of the paper point out that using a specific tolerance ("long integer libraries" eg BigNum) means that division often has to be barred for fear of recurring decimals. All of the presented exact methods need lots of additional work by the programmer.&lt;br /&gt;&lt;br /&gt;The paper continues to introduce Lazy Evaluation - floating point calculations are performed until the error is enough to introduce uncertainty. At this point it reverts to using exact? evaluation.&lt;br /&gt;&lt;br /&gt;The operations performed on the values ("Lazy Numbers") are tracked by a parse-tree (or symbolic computing) like graph specifying operators and operands. When an operation is ambiguous (within the error bounds) the graph is evaluated using exact arithmetic.&lt;br /&gt;&lt;br /&gt;This seems like a dream answer for Declarative programming enthusiasts (Haskell!).&lt;br /&gt;&lt;br /&gt;The cost of Lazy Arithmetic is given as a 4-10 decrease in speed, which considering it's a big leap away from the computer's architecture, is very pleasing. Even better it's claimed to be 150 times faster than purely exact methods. In systems where this method is used (&lt;a href="http://http//www.cgal.org/philosophy.html"&gt;CGAL&lt;/a&gt;) the cost appears to be much larger for more complicated algorithms.&lt;br /&gt;&lt;br /&gt;The paper describes a method for hashing lazy numbers, and shows that non trivial equality tests can be expensive. The system implemented only does very simple algebraic/symbolic equivilences, otherwise expesive tests are needed. (Probabilistic hashing is given as a possible solution)&lt;br /&gt;&lt;br /&gt;Problems with Lazy Numbers include&lt;br /&gt;&lt;ul&gt;&lt;li&gt;lack of hardware support,&lt;/li&gt;&lt;li&gt;need for the programming lanaguage to allow a new number types, along with operators on those numbers.&lt;/li&gt;&lt;li&gt;conversion back to FP for output is problematic - polygons may self-intersect after processing. (But at least the algorithm will run, and at least the errors will be close to the size of FP accuracy)&lt;/li&gt;&lt;li&gt;numbers such as pi or e can still cause lots of problems&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-4647838197980298925?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/4647838197980298925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/03/geometric-robustness-papers.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/4647838197980298925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/4647838197980298925'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/03/geometric-robustness-papers.html' title='geometric robustness papers'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3651/3402507652_e570336d24_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-7547393197666385663</id><published>2009-03-30T15:20:00.006Z</published><updated>2009-04-24T18:00:34.065Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='copyright'/><title type='text'>copyright vs fun [rant]***</title><content type='html'>Copyright is a privilege that the population has given to creators. The governments allow this copyright deal - that the contents of a published can only be published by the author for a given time - in the hope that the creators create more. The child's argument goes "I made it, so it's mine", the grown-up's "creation of a work takes time, the author deserves to be repaid". But I think these arguments are getting less persuasive as technology advances.&lt;br /&gt;&lt;br /&gt;My main problems with copyright are that it is a &lt;span&gt;false economy&lt;/span&gt;, and that for a lot of media it is &lt;span&gt;not in the interest of people&lt;/span&gt;. I'm a student &amp;amp; there's little reason for me to support copyright* - I'm not invested in the system. I own little valuable IP, I expect to create very little, but every day my activities are constrained by copyright law.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center; font-style: italic;"&gt;"The American people would just have to get over the fact that software no longer had any economic values. It wasn't fair, it wasn't just, but it was a fait accompli. In many ways, Oscar had to give the Chinese credit for their cleverness in making all English language intellectual property available on their nets at no charge. The Chinese hadn't even needed to leave their own borders in order to kick the blocks out from under the American economy." - Bruce Sterling's Distraction.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;But it doesn't need to be China to expose the deceptive value of copyright, the twak consortium (or &lt;a href="http://www.seasteading.org/"&gt;seasteaders&lt;/a&gt;) might declare moonbase alpha it's very own sovereign territory and remove copyright. Moonbase alpha can then listen to all of Earth's music without charge, it's a no brainier for those uninvested in copyright.&lt;br /&gt;&lt;br /&gt;Massive piracy means that copyright is making most consumers illegal. &lt;a href="http://www.gamasutra.com/php-bin/news_index.php?story=17350"&gt;Piracy is commonplace&lt;/a&gt;, &lt;a href="http://www.codinghorror.com/blog/archives/001201.html"&gt;trivial&lt;/a&gt; and increasingly accidental (copyrighted works in the background of hi res photos, &lt;a href="http://abcnews.go.com/TheLaw/story?id=3777651"&gt;music in the background of a youtube video&lt;/a&gt;, buying used software often breaks the EULA). It is becoming very difficult to live a life in which you do not break copyright laws. Perhaps this should be taken as a hint that they aren't compatible with today's technologies.&lt;br /&gt;&lt;br /&gt;Industries that rely on copyright have started to look dubious. Print newspapers' revenue is in &lt;a href="http://uk.biz.yahoo.com/27032009/323/grim-ad-revenues-dailies.html"&gt;free fall&lt;/a&gt;, the music industry is trying to &lt;a href="http://arstechnica.com/tech-policy/news/2008/06/riaa-doubles-settlement-cost-for-students-fighting-subpoenas.ars"&gt;sue its customers&lt;/a&gt; and book publishers are trying to stop computers &lt;a href="http://boingboing.net/2009/02/25/authors-guild-vs-rea.html"&gt;reading their books aloud&lt;/a&gt;. These are not activities that secure, upcoming companies engage in. The companies in these sectors that are doing well, are doing so because they are &lt;a href="http://www.guardian.co.uk/open-platform"&gt;moving away&lt;/a&gt; from a copyright dependent model. Perhaps they're worried that their wealth is based on a bubble? (In the light of current financial problems, it might be unsporting to point out that we're building a bubble around IP that could burst). It could be burst by another country as an act of war or it could be burst by new technology (&lt;a href="https://www.relakks.com/"&gt;undetectable music copying&lt;/a&gt;?). Overnight our copyrighted material, our copyrighted assets, might be worth as much as the canvas, paper or disk that they're held on. We've added a lot of value to something that isn't tangible, and is making less and less sense every day. If that bubble bursts, lots of value will be dumped from the big companies - it's best we slowly deflate the bubble slowly, rather than wait for the time bomb to explode.&lt;br /&gt;&lt;br /&gt;So the main question is how much content wouldn't get published without copyright? And how much broader content would each person experience without copyright? Here's a fun gedankenexperiment:&lt;br /&gt;&lt;br /&gt;We only need copyright on things that are expensive to create. On things that wouldn't be created without it. Music is fun to make, people can do it very cheaply in the evenings, and they enjoy it. What about abolishing music copyright? Would the population as a whole suffer? All currently available music would be free to all people - I think the value of this person is more than the value of the record companies. Distribution by the record companies isn't needed, the net is a suitable medium - music is quick and easy to download and many people who like music use portable mp3 players and never see CDs. However the very popular artists with all the money would loose most of their incomes, as would the record companies. But would music continue to exist? yes - we have huge backlogs of material that we mostly don't get access to because of copyright. Would music continue to be made? yes - it's very cheap to create music  (you can do it your &lt;a href="http://en.wikipedia.org/wiki/Sandi_Thom#Re-Release_of_.22I_Wish_I_Was_A_Punk_Rocker.22_.26_Success"&gt;basement&lt;/a&gt;), and more importantly it's so much &lt;span style="font-style: italic;"&gt;fun&lt;/span&gt; you couldn't stop people creating it if you wanted to.&lt;br /&gt;&lt;br /&gt;This is very much a socialist argument. It's benefits wouldn't be measurable in market capitalizations or economic figures, it's benefits would be in the breadth and quality of music people end up listening to every day&lt;br /&gt;&lt;br /&gt;Which other arenas is copyright unnecessary in? &lt;a href="http://flickr.com/twak"&gt;Photography&lt;/a&gt; maybe, but there aren't too many other media with which the above argument holds today, but films and video games are starting to get to the point where they can be made to a comparable quality by people in their &lt;a href="http://bliss.bilkent.edu.tr/blissweb.php?islem=2&amp;amp;dil=0&amp;amp;d=tezler&amp;amp;n=0003556/"&gt;bedrooms&lt;/a&gt;, for &lt;span style="font-style: italic;"&gt;fun.&lt;/span&gt; Not for profit feature films &lt;a href="http://en.wikipedia.org/wiki/Open_Source_Filmmaking"&gt;include&lt;/a&gt; &lt;a href="http://www.bloodspell.com/"&gt;Bloodspell&lt;/a&gt; and &lt;a href="http://www.starwreck.com/"&gt;Star Wreck&lt;/a&gt;, although their quality isn't up to it yet, it will one day.&lt;br /&gt;&lt;br /&gt;We're just waiting, in all these media, for the quality of the work by people-who-do-it-for-fun to get good enough. It doesn't have to be perfect, it just has to be sufficient, such that 90% of the people don't notice it 90% of the time. As more people get involved in doing it for fun, the quality gets better. You can look at the &lt;a href="http://www.flickr.com/explore/interesting/7days/"&gt;"most interesting"&lt;/a&gt; photos in flickr and the quality is immaculate (a million monkeys with a million Canon 400d's). This is because of the number of people involved, the sophistication of the technology they use, and because it's &lt;a href="http://flickr.com/twak"&gt;fun&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Copyright protects the establishment. In a certain way I think it stops people being able to publish their own work. People have been groomed into accepting high production values in their media. What if the established publishing houses disappeared - if the Hollywood studios vaporized?** I might start reading more interesting books and watching a broader range of movies. So much is spent on polish and advertisements that smaller artists are drowned out  (do you really think that the profits of an artist correlate with how good their music is?). Social media techniques like &lt;a href="http://digg.com/"&gt;digg.com&lt;/a&gt; would allow you find what other people think is good, rather than who's paid most for advertising.&lt;br /&gt;&lt;br /&gt;Of course this doesn't reach to all areas, copyright in more hi-tech industries still seems to be needed (such as software engineering), until they too can be done entirely in the bedroom. When I can ask a computer "computer, write me a word processing application!" I think the copyright on software should be abolished (and probably patents too, but that's an argument for another day).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/2902996250/" title="modder by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3033/2902996250_2daa667e3c.jpg" alt="modder" height="500" width="333" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;modders: ye be warned&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;But today we have to ask if copyright is still a benefit to the people? It has got to the point where copyright is holding back a tide (&lt;a href="http://www.newswise.com/articles/view/549822/?sc=dwhn"&gt;academic paper on the subject&lt;/a&gt;) of new exciting &amp;amp; valuable content. Copyright prevents derivative works - new content from that which exists. The &lt;a href="http://en.wikipedia.org/wiki/Grey_album"&gt;Grey Album&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/American_Edit"&gt;American Edit&lt;/a&gt; are great bits of music that the world will not hear because of copyright. This work cannot take place under copyright law - the people who do it for fun can't afford to use copyrighted materials. Licensing copyrighted media is expensive, time consuming and not much fun at all.&lt;br /&gt;&lt;br /&gt;My final point is that we may soon find ourselves in a world where computers can create desirable content unassisted (this is part of my work, finding tools to help (and maybe replace) 3D artists). When a computer can write you a pop song, does copyright make sense?&lt;br /&gt;&lt;br /&gt;Copying can't be stopped, as long as I can point a camcorder at the screen of my telly; As long as I view the movie with my eyes and store it in my brain. Copyright just feels broken.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;* A land of copyright-haves and have-nots. I own little copyright, I consume huge quantities of copyrighted material. So how much of it would have been written without copyright? What incentive do I have to welcome stronger IP laws?&lt;br /&gt;** can tell I'm trying to be persuasive, I keep using question marks?&lt;br /&gt;*** sorry for the rant. had to be said. yes the blog is copyright. yes I'll put it under CC, but not until next year...&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[edit] this is another summary of the issues surrounding copyright:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;div style="width: 425px; text-align: left;" id="__ss_850416"&gt;&lt;object style="margin: 0px;" height="355" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=copyright-1229447491679046-1&amp;amp;stripped_title=copyright-presentation-850416"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=copyright-1229447491679046-1&amp;amp;stripped_title=copyright-presentation-850416" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;View more &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/mcmrbt"&gt;Rob Mcminn&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-7547393197666385663?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/7547393197666385663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/03/copyright-vs-fun-rant.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7547393197666385663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7547393197666385663'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/03/copyright-vs-fun-rant.html' title='copyright vs fun [rant]***'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3033/2902996250_2daa667e3c_t.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-2140230013962717282</id><published>2009-03-29T01:34:00.010Z</published><updated>2009-06-26T17:32:06.739Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='giant'/><category scheme='http://www.blogger.com/atom/ns#' term='tco'/><category scheme='http://www.blogger.com/atom/ns#' term='scr'/><category scheme='http://www.blogger.com/atom/ns#' term='bike'/><category scheme='http://www.blogger.com/atom/ns#' term='mrbike'/><category scheme='http://www.blogger.com/atom/ns#' term='scr2'/><title type='text'>bike review giant scr 2</title><content type='html'>So I've had this bike since June last year (9 months). I've given it some real punishment, and thought I'd jot down some stats and figures. It's probably equivalent to Giant's 2009 Defy 3 or 2.5.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/2897238680/" title="mr bike on holiday by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3113/2897238680_11b1cb22d9.jpg" alt="mr bike on holiday" height="333" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now I've been careful with it, but it's been ridden from &lt;a href="http://www.flickr.com/photos/twak/sets/72157607611454958/"&gt;west spain to east denmark&lt;/a&gt;, been on a couple of planes, carted around on more trains than I can remember, and left to defend for itself in the back of a transit with 10 mtb's (gang bang!). It's also just gone through a Glasgow winter, which means freezing nights, being drenched in salt water (road grid) daily and potholes like nothing I've seen the western world. I also think I've done about &lt;a href="http://twak.blogspot.com/2008/09/blog-post_02.html"&gt;5000km&lt;/a&gt; over about 8 months.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3303978773/" title="you don't have to go home... by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3344/3303978773_4f8c69b66d.jpg" alt="you don't have to go home..." height="500" width="375" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The only changes I made to the bike before touring was a pannier rack (yes the defy and scr ranges are drilled for pannier racks) and spd-cleats.&lt;br /&gt;&lt;br /&gt;This was the first bike I had with cartridge brakes. Me no like. Stopping power is pants, and they need replacing quite frequently. And it costs 5 quid for a new pair. Will be looking to replace these with some v-brakes. Some of the problem was the front rim became so scratched (by crap stuck in the brake pads) that it slices through pads at a rate. This means a whole new whole front wheel to replace as well as the back with a bust hub...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/2806104327/" title="bike box by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3259/2806104327_c3ff5e7cc4.jpg" alt="bike box" height="500" width="333" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;When I was touring (15-20kg of gear, but I'm only 65kg) the back wheel lost 2 spokes every 3 days for a fortnight before it was replaced (with a Mavic Aksium). Bit annoyed with this, it might have been shunted while in the airplane hold (above)...but nothing visible and it was really well packed up. Original front wheel has held up with minimum hastle tho.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/2848068905/" title="and so it starts by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3271/2848068905_813ba5bb28.jpg" alt="and so it starts" height="500" width="333" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I was really impressed with the Mavic Aksium replacement back wheel. No dents or creases and at it has straight pull spokes (not the j-ones) which are awesomely hard to break. So hard, in fact, that the hub gave out last weekend (after 6 months) when one of the steel spokes was pulled through the aluminium fastening - the spoke still looks like new, the hub is a write off (seems to happen to &lt;a href="http://www.timetriallingforum.co.uk/index.php?showtopic=18383&amp;amp;pid=262098&amp;amp;mode=threaded&amp;amp;start=#entry262098"&gt;other people&lt;/a&gt; as well). Still I rode 80 miles one spoke short (after some spoke-key persuasion, and disconnecting the back brakes to allow for 1.5cm of wobble) and it didn't get any worse. I'm going to try and repair the wheel, so that says something about how much I like it.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3393125743/" title="mavic aksium fail by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3459/3393125743_248e12a3de.jpg" alt="mavic aksium fail" height="333" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Was totally shocked when the rear mech hanger gave out on me for no good reason 7 months in, leaving me stranded on the edge of town. Was torn in two at what looks like a weak point where one of the nuts went through. Thing is you never check the condition of the hanger, because you can't see it and lets face it, it's a inanimate lump of metal. Was cheesed off tho, because when it went it snapped the chain, meaning new chain and rear cassette. Plus my back wheel locked up in the middle of a busy junction...but that's another story. There aren't many giant dealers around, and normal bike shops don't carry mech hangers for all bikes, so in the end it was a mail order job. Because I'm paranoid, now I carry a spare hanger.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3188727578/" title="broken part by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3095/3188727578_ae09d0bcfb.jpg" alt="broken part" height="333" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The bundled tyres also weren't up to too much either. They ate tread quickly and punctured easily. Ended up replacing them with some kevlar (&lt;a href="http://www.cyclesportsuk.co.uk/product_info.php?products_id=5938"&gt;Vittoria Rubino Kevlar Tyre&lt;/a&gt;)  ones that are holding up well, and their yellow nicely matches the panniers.&lt;br /&gt;&lt;br /&gt;Running costs for 8 months (pounds sterling):&lt;br /&gt;&lt;br /&gt;20 misc spokes&lt;br /&gt;30 Replacement pads (front and back x 3 at five quid each)&lt;br /&gt;20 Chain&lt;br /&gt;25 Rear cassette&lt;br /&gt;15 Rear mech hanger&lt;br /&gt;75 back wheel - Mavic Aksium&lt;br /&gt;130 for touring wheel pair - Deore hubs and Mavic A719 rims (300g heavier, but am fed up about going through rear wheels so fast.&lt;br /&gt;25 tyres&lt;br /&gt;&lt;br /&gt;So that's a non-trivial 340 to keep the bike on the road for 8 months, about 3/4 the cost of the bike. Then again it's about 7 pence per km, or &lt;span style="font-style: italic;"&gt;7 pounds for every day out&lt;/span&gt;/100km. That's about the cost of fuel for a car doing the same distance. Other (optional) stuff I've brought includes:&lt;br /&gt;&lt;br /&gt;[edit:]&lt;br /&gt;Last week my&lt;a href="http://www.flickr.com/photos/twak/3456790962/"&gt; left shifter barfed out&lt;/a&gt; in the middle of a tour (10 months after purchase) stranding me in bottom gear for two days before I botched on a temp thumb shifter. It would have been another £150 on that list, if it wasn't for the fact that I managed to get home to the dealer the bike came from, and got him to get giant to buy me a new shifter.&lt;br /&gt;[end edit]&lt;br /&gt;&lt;br /&gt;40 Tools/oil&lt;br /&gt;25 Saddle bag&lt;br /&gt;60 SPD pedals and shoes&lt;br /&gt;20 Pannier (+90 for Panniers, indestructible and fantastic &lt;a href="http://www.ortlieb.de/_prod.php?lang=en&amp;amp;produkt=backrollerclass&amp;amp;pf=1a"&gt;Ortliebs&lt;/a&gt;)&lt;br /&gt;60 Lights (already had a helmet)&lt;br /&gt;30 Lock (that was certified by the insurance company, and is too heavy to really carry around)&lt;br /&gt;&lt;br /&gt;235 in accessories and vanity goods... but these are by choice.&lt;br /&gt;&lt;br /&gt;Stuff I still want&lt;br /&gt;&lt;ul&gt;&lt;li&gt;V-brakes - Glasgow eats cartridge brakes for breakfast and they're fuppin expensive.&lt;/li&gt;&lt;li&gt;A saddle bag not made by topeak (both of these have crapped out on me very quickly - if you buy anything by topeak, expect all the plastic catches on it to crap out quicky (two saddle bags and a multi tool have fallen this way))&lt;/li&gt;&lt;li&gt;New front light (Cateyes turn out not to be waterproof)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/2902796170/" title="IMG_8858 by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3132/2902796170_15f0e21ef1.jpg" alt="IMG_8858" height="333" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I guess the long and short of it is that a road racer isn't a tourer. Racers are for 2 hours every weekend, instead of going to the gym. Touring bikes are heavier and can take extended punishment. I want both, but am poor, generally I'm leaning towards a tourer now. For all it's problems I've liked the bike and it's been a great introduction to serious biking etc... &amp;amp; it's been a whole lotta &lt;a href="http://www.gucc.co.uk/"&gt;fun&lt;/a&gt; :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/F1n3gPTLO1A&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/F1n3gPTLO1A&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-2140230013962717282?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/2140230013962717282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/03/bike-review-giant-scr-2.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/2140230013962717282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/2140230013962717282'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/03/bike-review-giant-scr-2.html' title='bike review giant scr 2'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3113/2897238680_11b1cb22d9_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-7748807212631601206</id><published>2009-03-28T16:54:00.000Z</published><updated>2009-03-28T16:54:35.997Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><title type='text'>at least we're good at being told what to do</title><content type='html'>&lt;p&gt;Here's something that missed me last year, the country that spends most on online advertising, per person, is the UK - 214 dollars for every netizen. If you're going to do an online start up, with an advertising-based business model, there's some serious thinking about where it's going to easiest to get going - the US is down in 4th place. (via '&lt;a href="http://www.techcrunch.com/2008/06/23/modeling-the-real-market-value-of-social-networks/"&gt;crunch&lt;/a&gt; and &lt;a href="http://www.pwc.com/extweb/pwcpublications.nsf/docid/5AC172F2C9DED8F5852570210044EEA7"&gt;PWC&lt;/a&gt;)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;table border = "1" RULES="ALL" FRAME="VOID"&gt;&lt;tr&gt;&lt;td align="left" width="86"&gt;Unique Visitors (000) - Apr 08&lt;/td&gt;&lt;td align="left" width="86"&gt;Total # of Internet Users in market (thousands)&lt;/td&gt;&lt;td align="left" width="86"&gt;Total Interactive Ad Spend Per Market in $ (millions) for '08&lt;/td&gt;&lt;td align="left" width="86"&gt;Per Capita Interactive Spend ($)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;United Kingdom&lt;/td&gt;&lt;td sdval="34124" sdnum="1033;" align="right"&gt;34124&lt;/td&gt;&lt;td sdval="7302" sdnum="1033;" align="right"&gt;7302&lt;/td&gt;&lt;td sdval="213.98" sdnum="1033;" align="right"&gt;213.98&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;Australia&lt;/td&gt;&lt;td sdval="11229" sdnum="1033;" align="right"&gt;11229&lt;/td&gt;&lt;td sdval="1673" sdnum="1033;" align="right"&gt;1673&lt;/td&gt;&lt;td sdval="148.99" sdnum="1033;" align="right"&gt;148.99&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;Denmark&lt;/td&gt;&lt;td sdval="3438" sdnum="1033;" align="right"&gt;3438&lt;/td&gt;&lt;td sdval="496" sdnum="1033;" align="right"&gt;496&lt;/td&gt;&lt;td sdval="144.27" sdnum="1033;" align="right"&gt;144.27&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;United States&lt;/td&gt;&lt;td sdval="190728" sdnum="1033;" align="right"&gt;190728&lt;/td&gt;&lt;td sdval="25200" sdnum="1033;" align="right"&gt;25200&lt;/td&gt;&lt;td sdval="132.13" sdnum="1033;" align="right"&gt;132.13&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;Germany&lt;/td&gt;&lt;td sdval="34539" sdnum="1033;" align="right"&gt;34539&lt;/td&gt;&lt;td sdval="4105" sdnum="1033;" align="right"&gt;4105&lt;/td&gt;&lt;td sdval="118.85" sdnum="1033;" align="right"&gt;118.85&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;Sweden&lt;/td&gt;&lt;td sdval="5785" sdnum="1033;" align="right"&gt;5785&lt;/td&gt;&lt;td sdval="651" sdnum="1033;" align="right"&gt;651&lt;/td&gt;&lt;td sdval="112.53" sdnum="1033;" align="right"&gt;112.53&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;Netherlands&lt;/td&gt;&lt;td sdval="11029" sdnum="1033;" align="right"&gt;11029&lt;/td&gt;&lt;td sdval="1047" sdnum="1033;" align="right"&gt;1047&lt;/td&gt;&lt;td sdval="94.93" sdnum="1033;" align="right"&gt;94.93&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;Japan&lt;/td&gt;&lt;td sdval="55260" sdnum="1033;" align="right"&gt;55260&lt;/td&gt;&lt;td sdval="4965" sdnum="1033;" align="right"&gt;4965&lt;/td&gt;&lt;td sdval="89.85" sdnum="1033;" align="right"&gt;89.85&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;France&lt;/td&gt;&lt;td sdval="26263" sdnum="1033;" align="right"&gt;26263&lt;/td&gt;&lt;td sdval="2326" sdnum="1033;" align="right"&gt;2326&lt;/td&gt;&lt;td sdval="88.57" sdnum="1033;" align="right"&gt;88.57&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;Italy&lt;/td&gt;&lt;td sdval="18997" sdnum="1033;" align="right"&gt;18997&lt;/td&gt;&lt;td sdval="1450" sdnum="1033;" align="right"&gt;1450&lt;/td&gt;&lt;td sdval="76.33" sdnum="1033;" align="right"&gt;76.33&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;Canada&lt;/td&gt;&lt;td sdval="23947" sdnum="1033;" align="right"&gt;23947&lt;/td&gt;&lt;td sdval="1582" sdnum="1033;" align="right"&gt;1582&lt;/td&gt;&lt;td sdval="66.06" sdnum="1033;" align="right"&gt;66.06&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;Finland&lt;/td&gt;&lt;td sdval="2984" sdnum="1033;" align="right"&gt;2984&lt;/td&gt;&lt;td sdval="192" sdnum="1033;" align="right"&gt;192&lt;/td&gt;&lt;td sdval="64.34" sdnum="1033;" align="right"&gt;64.34&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;Norway&lt;/td&gt;&lt;td sdval="2802" sdnum="1033;" align="right"&gt;2802&lt;/td&gt;&lt;td sdval="179" sdnum="1033;" align="right"&gt;179&lt;/td&gt;&lt;td sdval="63.88" sdnum="1033;" align="right"&gt;63.88&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;Spain&lt;/td&gt;&lt;td sdval="15705" sdnum="1033;" align="right"&gt;15705&lt;/td&gt;&lt;td sdval="906" sdnum="1033;" align="right"&gt;906&lt;/td&gt;&lt;td sdval="57.69" sdnum="1033;" align="right"&gt;57.69&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;Rest of Europe&lt;/td&gt;&lt;td sdval="82441" sdnum="1033;" align="right"&gt;82441&lt;/td&gt;&lt;td sdval="2058" sdnum="1033;" align="right"&gt;2058&lt;/td&gt;&lt;td sdval="24.96" sdnum="1033;" align="right"&gt;24.96&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;Brazil&lt;/td&gt;&lt;td sdval="19320" sdnum="1033;" align="right"&gt;19320&lt;/td&gt;&lt;td sdval="402" sdnum="1033;" align="right"&gt;402&lt;/td&gt;&lt;td sdval="20.81" sdnum="1033;" align="right"&gt;20.81&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;Mexico&lt;/td&gt;&lt;td sdval="11773" sdnum="1033;" align="right"&gt;11773&lt;/td&gt;&lt;td sdval="119" sdnum="1033;" align="right"&gt;119&lt;/td&gt;&lt;td sdval="10.11" sdnum="1033;" align="right"&gt;10.11&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;India&lt;/td&gt;&lt;td sdval="28375" sdnum="1033;" align="right"&gt;28375&lt;/td&gt;&lt;td sdval="102" sdnum="1033;" align="right"&gt;102&lt;/td&gt;&lt;td sdval="3.59" sdnum="1033;" align="right"&gt;3.59&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="left" height="17"&gt;Rest of Latin America&lt;/td&gt;&lt;td sdval="30516" sdnum="1033;" align="right"&gt;30516&lt;/td&gt;&lt;td sdval="60" sdnum="1033;" align="right"&gt;60&lt;/td&gt;&lt;td sdval="1.97" sdnum="1033;" align="right"&gt;1.97&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-7748807212631601206?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/7748807212631601206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/03/at-least-were-good-at-being-told-what.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7748807212631601206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7748807212631601206'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/03/at-least-were-good-at-being-told-what.html' title='at least we&apos;re good at being told what to do'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-7718075044014314731</id><published>2009-03-27T22:26:00.005Z</published><updated>2010-06-22T23:26:10.441Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='straight skeleton'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><category scheme='http://www.blogger.com/atom/ns#' term='robust'/><category scheme='http://www.blogger.com/atom/ns#' term='algorithm'/><title type='text'>robust straight skeleton</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;a href="http://twak.blogspot.com/2009/10/skeleton-index-page.html"&gt;[straight skeleton blog index]&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Have been trying to figure out how robust you can make the skeleton to floating point errors. I suspect it's impossible to do entirely, without it reducing to a very expensive operation, but am not really sure. (edit: source code &lt;a href="http://campskeleton.googlecode.com/"&gt;here&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="500" width="500"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3887416&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=3887416&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="500" width="500"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-7718075044014314731?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/7718075044014314731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/03/robust-straight-skeleton.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7718075044014314731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7718075044014314731'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/03/robust-straight-skeleton.html' title='robust straight skeleton'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-8331384675841574153</id><published>2009-03-25T00:36:00.002Z</published><updated>2009-06-18T20:03:27.862Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='ucsc'/><category scheme='http://www.blogger.com/atom/ns#' term='marvin'/><category scheme='http://www.blogger.com/atom/ns#' term='old projects'/><category scheme='http://www.blogger.com/atom/ns#' term='cmps160'/><title type='text'>marvin the robot</title><content type='html'>I realised that some of my old projects never got put back onto the web, like they deserve. So presenting my UCSC &lt;a href="http://www.soe.ucsc.edu/courses/course?cmps160"&gt;CMPS160&lt;/a&gt; final project marvin-the-robot&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3382996409/" title="marvin the robot by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3570/3382996409_3624cd492e.jpg" alt="marvin the robot" height="474" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;It was made in C++, with a meg/sec memory leak to show for its troubles (this was a work of graphics not engineering). The windowing code came from the fltk system.  The only bit of code that might be useful to someone is the downhill iterative IK solver that's in there, somewhere.&lt;br /&gt;&lt;br /&gt;Controls:&lt;br /&gt;&lt;br /&gt;&lt;li&gt; R - change camera mode&lt;/li&gt;&lt;br /&gt;&lt;li&gt;1..6 - ask marvin to do some actions&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt; &gt;  - move camera forward / back&lt;/li&gt;&lt;br /&gt;&lt;li&gt;[ ]  - move camera in / out&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Is an IK example of robot riding around a small moon endlessly. Was written in C++, source is &lt;a href="http://dcs.gla.ac.uk/%7Etkelly/bits/marvin.zip"&gt;here&lt;/a&gt; use it under the normal WTFPL.&lt;br /&gt;&lt;br /&gt;The binaries for OS X are &lt;a href="http://dcs.gla.ac.uk/%7Etkelly/bits/marvin_osx.zip"&gt;here&lt;/a&gt;. If anyone builds it, it'd be great to have some binaries for other OSes, also if you've got a mac powerful enough to run the app and do a screen capture at the same time, a youtube video would make me very happy :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-8331384675841574153?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/8331384675841574153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/03/marvin-robot.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/8331384675841574153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/8331384675841574153'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/03/marvin-robot.html' title='marvin the robot'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3570/3382996409_3624cd492e_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-9039158679955689794</id><published>2009-03-24T17:47:00.013Z</published><updated>2009-05-01T09:53:27.674Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='rocks.'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><category scheme='http://www.blogger.com/atom/ns#' term='papers'/><title type='text'>Eurographics 09 papers</title><content type='html'>A couple of procedural-ish papers from this years Eurographics:&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Arches: a Framework for Modeling Complex Terrains ( [tba:eurographics] | &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://liris.cnrs.fr/%7Eapeytavi/publications/articles/EG2009_ArchesAFrameworkModelingComplexTerrains.pdf"&gt;pdf&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://liris.cnrs.fr/%7Eapeytavi/publications/EG2009.html"&gt;web&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | 2009 )&lt;/span&gt;&lt;br /&gt;A. Peytavie, E. Galin, J. Grosjean, S. Merillou&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/rock.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 465px; height: 261px;" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/images/rock.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This paper presents a method for generating and editing terrains that include overhangs.&lt;br /&gt;&lt;br /&gt;A discrete block model describes columns of materials. This is covered by a simple implicit surface (using a cubic kernal giving a C-0 continuity) to smooth it. The block model describes which material is present between which heights, this is presented as a lower memory version of a voxel system.&lt;br /&gt;&lt;br /&gt;These techniques are intended for use in realtime editing, so instead of complex physical models that can only be used offline, Arches uses a simplistic physical simulation in each column. Where sand and loose rock are clustered above bedrock, the materials are unadjusted to form contiguous columns. Then adjacent columns with the same materials are allowed to settle (with different viscosity etc..).&lt;br /&gt;&lt;br /&gt;The bedrock layer can be edited using a tool that adds or removes material from the columns, taking into account the fact the user is viewing the implicit surface. This just adds a sphere of material at a time, and isn't particularly useful when building up large cliffs - so some sweep tools were also introduced.&lt;br /&gt;&lt;br /&gt;An erosion tool takes a volume of bedrock, and converts it to loose rock and sand. These are then allowed to settle to give the appearance of decay. Similarly loose rocks are made by tessellating a volume of bedrock using Voronoi cells, then erroding the outlines, leaving contact point unchanged. As these rock piles are not the result of physical simulation, they might not be physically plausible, but the results are good enough.&lt;br /&gt;&lt;br /&gt;To render the scene, the implicit surfaces of the bedrock and sand are polgonized. The loose rock's implicit surface is polgonized separately. To avoid computing UV's a 3D volumetric texture is used that includes the normals of the local surface.&lt;br /&gt;&lt;br /&gt;This paper contains quantities of unnecessary equations. There's something inside every computer scientist that believes a really good paper has to have lots of equations! It's also an offline system - the textures and meshes are generated from the column model at design time and we only see "normal" meshes and textures at run time - the potential is almost there for real time generation, but it just falls short.&lt;br /&gt;&lt;br /&gt;The results are very nicely presented and represent a system that is an obvious improvement on current games-industry practice. I've been meaning to review more terrain generation techniques, because it's one of the best sources of mesh generation literature.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Cheeky note: this system of columns for representing rock was used in a &lt;a href="http://twak.blogspot.com/2009/03/mudslingin.html"&gt;undergrad project ("&lt;/a&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;a href="http://twak.blogspot.com/2009/03/mudslingin.html"&gt;mudslignin'")&lt;/a&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt; to represent a 2D landscape of mud and water - it was even fast enough to calculate 2d "water" (aka jelly) simulations in real time:)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Structure Preserving Reshape for Textured Architectural Scenes ( [tba:eurographics] | &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://www-sop.inria.fr/reves/Basilic/2009/CLDD09/meshpuzzleEG09.pdf"&gt;pdf&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://www-sop.inria.fr/reves/Basilic/2009/CLDD09/"&gt;web&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; | 2009 )&lt;/span&gt;&lt;br /&gt;Marcio Cabral, Sylvain Lefebvre, Carsten Dachsbacher, George Drettakis&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dcs.gla.ac.uk/people/personal/tkelly/architecture/reshape.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 718px; height: 131px;" src="http://www.dcs.gla.ac.uk/people/personal/tkelly/architecture/reshape.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This paper presents a method to intelligently reshape existing 3d models. By using context-sensitivity image resizing and attempting to keep angles constant, an artist's models can be manipulated to a new shape by dragging a few handles around.&lt;br /&gt;&lt;br /&gt;An input model is pre-processed into a set of constraints and a solution. Then the model can be reshaped using a set of point handles, while the constraints are satisfied to position each vertex in real time.&lt;br /&gt;&lt;br /&gt;There are a few different constraints, edge direction constraint attempt to keep the angle between two consecutive polygons close to the original. Edge length constrains attempt to preserve the length of shorter edges more than longer ones. There is a minimum edge length to stop degeneration. When two parts of the mesh touch, but are not connected, a contact constraint enforces continuity. This constraint triangulates one of the touching faces and constrains the other part of the mesh to this position. To capture the requirement that ornaments (windows etc..) stay the same size, similar sets of faces are detected and (optionally) constrained.&lt;br /&gt;&lt;br /&gt;This set of hard and soft constraints is dumped into a matrix and solved using least-squares. At run time the users input is projected using the found solution and analyzed - if it is degenerate, the users edit is rejected.&lt;br /&gt;&lt;br /&gt;Unlike the &lt;a href="http://www.seamcarving.com/"&gt;content-aware image resizing&lt;/a&gt; that made the front page of digg last year, the texture resizing algorithm is specialized for rectilinear architecture. The input texture analyzed for self-similarity, and only those parts that are self-similar are stretched on a rectangular grid.  Sample patches are used to reduce blurring.&lt;br /&gt;&lt;br /&gt;This paper is one in a growing trend towards manipulating existing meshes into new forms. I have always felt that this approach isn't competitive with outright procedural generation for the pro-artist due to over constraining the user:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;"To enable interactivity, we rely on a simple solver and allow it to fail or reuse user input if this leads to degeneracies (ie collapsing edges or collisions). We argue this behavior is reasonable since the user has full freedom to assign new handles and guide the solver in avoiding degeneracies)"&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;However as a method for quickly splicing together geometry for a un-trained user this looks really effective. The &lt;a href="http://www-sop.inria.fr/reves/Basilic/2009/CLDD09/meshpuzzle_final_divx.avi"&gt;video&lt;/a&gt; is really worth checking out.&lt;br /&gt;&lt;/div&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-9039158679955689794?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/9039158679955689794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/03/eurographics-09-papers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/9039158679955689794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/9039158679955689794'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/03/eurographics-09-papers.html' title='Eurographics 09 papers'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-5563807730823499298</id><published>2009-03-19T13:34:00.002Z</published><updated>2009-11-08T20:27:34.233Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sicsa'/><category scheme='http://www.blogger.com/atom/ns#' term='owa'/><category scheme='http://www.blogger.com/atom/ns#' term='elgg'/><category scheme='http://www.blogger.com/atom/ns#' term='suckage'/><category scheme='http://www.blogger.com/atom/ns#' term='infinite loop'/><title type='text'>when an irresistible force meets...outlook!</title><content type='html'>[edit] apparently this problem's been fixed in the &lt;a href="http://trac.elgg.org/elgg/ticket/902"&gt;latest version of Elgg&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So after signing up to &lt;a href="https://projectnets.cs.st-andrews.ac.uk/sicsa/"&gt;SICSA's Elgg&lt;/a&gt; (social networking hoodicky) I had a bit of a mail fail:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3360291965/" title="mail fail! by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3610/3360291965_8b102bc6ba.jpg" alt="mail fail!" width="346" height="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Found some great new toys debugging this one:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/8154"&gt;Export Cookies&lt;/a&gt; allows you to de-sql-arize the Firefox cookies file and use the output in wget's --load-cookies argument.&lt;/li&gt;&lt;li&gt;&lt;a href="http://livehttpheaders.mozdev.org/installation.html"&gt;Live HTTP headers&lt;/a&gt; allows you to view the headers for all the page's content as it streams by.&lt;/li&gt;&lt;/ul&gt;Combining the power of these two showed what happened - Outlook's web access (gobshite!) uses javascript forwarding on all email links...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;window.location.href = foo&lt;/span&gt;.html&lt;br /&gt;&lt;br /&gt;...but Elgg's email confirmation scripts forwards to the referrer (for some unknown reason, perhaps the idea is that you never see it). So we have the irresistible force of Outlook vs the immovable object Elgg, giving a redirect loop that sends me an email every time round. The following downloads google's homepage (yay for cheap HTTPS pages without real certs):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;wget --no-check-certificate --referer "http://google.com" "https://projectnets.cs.st-andrews.ac.uk/sicsa/action/email/confirm"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The thousand little edge cases like this (browser #342.b with web app #564.j) is the reason we all use &lt;a href="http://facebook.com/"&gt;commercial&lt;/a&gt; &lt;a href="http://twitter.com/"&gt;networking&lt;/a&gt; &lt;a href="http://news.ycombinator.com/"&gt;sites&lt;/a&gt;. They have the time and willingness to fix these before release (so I don't have to find them). They also have enough existing users to make it worthwhile filling in the sign up form.&lt;br /&gt;&lt;br /&gt;Still it's one more tool to use when rick-rolling academic types eh?&lt;br /&gt;&lt;br /&gt;[edit] Here's Elgg's &lt;a href="http://reference.elgg.org/confirm_8php-source.html"&gt;source&lt;/a&gt; - looks like someone wasn't quite thinking straight. &lt;a href="http://trac.elgg.org/elgg/ticket/902"&gt;Bugged&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;00043     forward($_SERVER['HTTP_REFERER']);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There's no way this was ever a good idea...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-5563807730823499298?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/5563807730823499298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/03/when-irrisistable-force-meetsoutlook.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/5563807730823499298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/5563807730823499298'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/03/when-irrisistable-force-meetsoutlook.html' title='when an irresistible force meets...outlook!'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3610/3360291965_8b102bc6ba_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-1124053146553843030</id><published>2009-03-17T18:14:00.004Z</published><updated>2009-03-17T18:24:48.798Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='jdk'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>netbeans combobox</title><content type='html'>The simple solution to the broken combo-box (drop down box) rendering in netbeans under linux (Ubuntu hardy/8.04) is to update java. Grab the &lt;a href="http://java.sun.com/"&gt;6.12 jdk installer&lt;/a&gt;, install then update the symlink in /usr/lib/jvm&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;twak@xxx:~$ cd /usr/lib/jvm&lt;br /&gt;twak@xxx:/usr/lib/jvm$ sudo rm java-6-sun&lt;br /&gt;twak@xxx:/usr/lib/jvm$ sudo ln -s jdk1.6.0_12/ java-6-sun&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;After and before:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_wceYeHJ7bn0/Sb_pUSC0cAI/AAAAAAAAAoY/OobTaWcYy_Y/s1600-h/beforeafter.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 70px;" src="http://3.bp.blogspot.com/_wceYeHJ7bn0/Sb_pUSC0cAI/AAAAAAAAAoY/OobTaWcYy_Y/s400/beforeafter.png" alt="" id="BLOGGER_PHOTO_ID_5314222619970793474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm not sure this is the official way to switch jdk, but it works. Am getting fed up with netbeans niggles now....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-1124053146553843030?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/1124053146553843030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/03/simple-solution-to-broken-combo-box.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/1124053146553843030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/1124053146553843030'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/03/simple-solution-to-broken-combo-box.html' title='netbeans combobox'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wceYeHJ7bn0/Sb_pUSC0cAI/AAAAAAAAAoY/OobTaWcYy_Y/s72-c/beforeafter.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-5065747777289993629</id><published>2009-03-15T21:36:00.001Z</published><updated>2009-03-25T19:05:41.711Z</updated><title type='text'>gizmodo'd</title><content type='html'>Thanks to &lt;a href="http://www.flickr.com/photos/moniker42/"&gt;Sean&lt;/a&gt; for pointing out that &lt;a href="http://gizmodo.com/"&gt;Gizmodo&lt;/a&gt; used a self portrait of me in a &lt;a href="http://gizmodo.com/photogallery/cameramirrorselfportrait/1006389432"&gt;set of images&lt;/a&gt;. Must have been a slow news day, so they scraped the &lt;a href="http://www.flickr.com/groups/selfwhithacamera/pool/"&gt;flickr group&lt;/a&gt; for creative commons content....&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3357103769/" title="2009-03-15_2131 by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3646/3357103769_4b200f8466.jpg" alt="2009-03-15_2131" height="338" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;from here:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/2442661645/" title="tourist3 by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3293/2442661645_a7ab9c00e4.jpg" alt="tourist3" height="333" width="500" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-5065747777289993629?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/5065747777289993629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/03/thanks-to-sean-for-pointing-out-that.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/5065747777289993629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/5065747777289993629'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/03/thanks-to-sean-for-pointing-out-that.html' title='gizmodo&apos;d'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3646/3357103769_4b200f8466_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-7312684007856741636</id><published>2009-03-12T23:17:00.005Z</published><updated>2009-03-12T23:34:55.554Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><title type='text'>this is the hardest thing I've done</title><content type='html'>&lt;div style="padding: 3px; text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3350343296/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3627/3350343296_1f345c8605.jpg" alt="hardest thing" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;and this is the second time I've done it. Sorry this is another rant about PhDs!&lt;br /&gt;&lt;br /&gt;I've spent a lot of this week working on the problem of 'horizontal bisectors in the straight skeleton'. The solution (i'll publish it here when I'm sure it works) was stupidly simple, but it's just one of a thousand snarls while implementing what I thought was a fairly simple routine.  It means that this term has been effectively been a crash course in implementing computational geometry algorithms. The thing I feel guilty about is the small amount of output -the total code is less than a day's output when I was employed as a code monkey last year.&lt;br /&gt;&lt;br /&gt;I've built this algorithm, for Sity, but a lot of the theory was lost on me. It's a bit of a legendary quest that I want to finish. I should understand this implementation well enough to really fix (rather than patch) any problems that occur, and extend it in bizzare and interesting ways. But the best thing is - I haven't been bored since I started.&lt;br /&gt;&lt;br /&gt;I chose my own subject, it's up to me to get my supervisors interested in the subject rather than vice-versa. There's little related work going on at Glasgow (or anywhere in the UK really). The thing is, this is what I secretly always wanted (being a bit of a &lt;a href="http://flickr.com/photos/twak/sets/72157607611454958/"&gt;loner at heart&lt;/a&gt;), but keeping motivated is going to be a challenge.&lt;br /&gt;&lt;br /&gt;I guess you build up tools that keep you going - conferences, daily/weekly routines and presentations. But I think there is very much another skill in keeping yourself interested. I've noticed this in a lot of the older generation of people who studied for PhD's years ago,will motivate themselves to thoughily research an area in (what looks like) zero effort. I guess it's an aquired skill. It means paying great attention to your state of mind, when you're energised you're ready to takle hard work, or break into pastures new. If you're tired it's important to have a juicy area to work on that's very involving and provides effortless motivation (for me this is programming).&lt;br /&gt;&lt;br /&gt;It's much like tending a flame...add just wood to keep it going when there's a good bed of ashes, and pour on the petrol when it's about to go out. Perhaps silly metaphores are best not dwelt on, and attributed to the bleak Glaswegan winter.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-7312684007856741636?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/7312684007856741636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/03/hardest-thing.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7312684007856741636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7312684007856741636'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/03/hardest-thing.html' title='this is the hardest thing I&apos;ve done'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3627/3350343296_1f345c8605_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-7366206204977680982</id><published>2009-03-04T11:35:00.001Z</published><updated>2009-03-17T19:32:55.020Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='animation'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='importer'/><category scheme='http://www.blogger.com/atom/ns#' term='import'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><category scheme='http://www.blogger.com/atom/ns#' term='obj'/><category scheme='http://www.blogger.com/atom/ns#' term='blender'/><title type='text'>blender animated obj import</title><content type='html'>I needed an animated mesh import to blender and .obj is always an easy format to work with, so &lt;a href="http://paste.org/5692"&gt;here's&lt;/a&gt; a modification to the blender import script that loads a sequence of .obj's in a directory and animates them together in a new scene in the current blender file. All the meshes get dumped onto layer 1, and moved onto layer 2 for one frame only. Result!:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Pr1NJkLArag&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/Pr1NJkLArag&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-7366206204977680982?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/7366206204977680982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/03/blender-animated-obj-import.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7366206204977680982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7366206204977680982'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/03/blender-animated-obj-import.html' title='blender animated obj import'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-7572287617657246887</id><published>2009-03-04T01:57:00.006Z</published><updated>2010-07-03T20:40:34.986Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='straight skeleton'/><category scheme='http://www.blogger.com/atom/ns#' term='weighted'/><category scheme='http://www.blogger.com/atom/ns#' term='argh'/><category scheme='http://www.blogger.com/atom/ns#' term='whywouldiwanttoknowthat'/><category scheme='http://www.blogger.com/atom/ns#' term='hownotodothings'/><title type='text'>that straight skeleton again</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;a href="http://twak.blogspot.com/2009/10/skeleton-index-page.html"&gt;[more skeleton entries]&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://en.wikipedia.org/wiki/Straight_skeleton"&gt;straight skeleton&lt;/a&gt; is an algorithm that takes the floorplan (bird's eye view) of a house and produces the roof shape. Each edge of a polygon is moved inwards, in the direction of it's normal, tracing the intersections between the edges (gutters and crests) as they shrink in. &lt;span style="font-style: italic;"&gt;Raising Roofs, Crashing Cycles, and Playing Pool&lt;/span&gt; (&lt;a href="http://www.blogger.com/dx.doi.org/10.1007/PL00009479"&gt;doi&lt;/a&gt; | &lt;a href="http://compgeom.cs.uiuc.edu/~jeffe/pubs/cycles.html"&gt;web&lt;/a&gt; | Eppstein, Erickson | 1999 ) is an excellent introduction to the skeleton, even if the O(complexity) bits can be ignored on the first reading. For those looking for a decent implementation of the unweighted skeleton, I point ya'll to the masters of robust implementations at &lt;a href="http://www.cgal.org/"&gt;CGAL&lt;/a&gt;. [edit:] My floating point implementation of the weighted skeleton is &lt;a href="http://campskeleton.googlecode.com/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3326561137/" title="bisectors by twak, on Flickr"&gt;&lt;img style="width: 401px; height: 189px;" src="http://farm4.static.flickr.com/3563/3326561137_00cc339e36.jpg" alt="bisectors" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This data structure has always haunted my work in urban modeling. As an undergrad it took me a few weeks to understand fully and implement, and even then I kept running into nasty numerical issues. The data structure was described for the first time in 1995, but there's a been a fair bit of literature on it's implementation and computational complexity.&lt;br /&gt;&lt;br /&gt;The straight skeleton was first described quite recently in &lt;span style="font-style: italic;"&gt;A Novel Type of Skeleton for Polygons&lt;/span&gt; ( &lt;a href="http://dx.doi.org/10.3217/jucs-001-12-0752"&gt;doi&lt;/a&gt; | &lt;a href="http://www.dma.fi.upm.es/mabellanas/tfcs/skeleton/html/documentacion/A%20Novel%20Type%20of%20Skeleton%20for%20Polygons.pdf"&gt;pdf&lt;/a&gt; | Aichholzer, Alberts, Aurenhammer, Gärtner | 1995 ) as an alternative to the medial axis, but with straight edges. It is introduced as "that roof shape". It also points out that straight skeletons are unique, but as Eppstein's paper shows they are quite chaotic - small changes in the input or decisions made can lead to large changes in the output. There are assorted uses for it, beyond the obvious roofs in procedural urban geometry, you can even morph polygons &lt;a href="http://doi.acm.org/10.1145/777792.777852"&gt;by morphing their skeletons&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This algorithm took me a long time to implement (just getting back into the swing of coding, and picking up the equivalent of a couple of graphics courses in linear algebra along the way). It was implemented to define the weighted straight skeleton (see Eppstein's paper again) rather than just the straight skeleton. This was basically done in the method given by&lt;span style="font-style: italic;"&gt; Straight Skeleton Implementation&lt;/span&gt; ( &lt;a href="http://www.dma.fi.upm.es/mabellanas/tfcs/skeleton/html/documentacion/Straight%20Skeletons%20Implementation.pdf"&gt;pdf&lt;/a&gt; | Felkel, Obdrzalek | 1998 ), although I have several issues with the paper, I'll write about that elsewhere (maybe a bathroom wall).&lt;br /&gt;&lt;br /&gt;My first attempt at this was for Sity, (the results are &lt;a href="http://www.dcs.gla.ac.uk/people/personal/tkelly/sity/sity.html"&gt;here&lt;/a&gt;). It was a long time ago, but the algorithm gave me real trouble. I was basically using using a Jordan curve algorithm to detect line intersections, and tweaking it a little bit so that weighted skeletons could be created. I had endless problems with collision rays escaping from their bounding boxes (I was up to four rewrites). In an orthogonal environment, you very often get 45 degree bisectors targeted against square corners. This mean that it's a disaster if neither of the edges adjacent to the corner catch the ray. Because of the nature of floating point arithmetic, this is fairly likely when repeated a few hundred thousand times.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3327379976/" title="wrong by twak, on Flickr"&gt;&lt;img style="width: 453px; height: 253px;" src="http://farm4.static.flickr.com/3412/3327379976_5527488162.jpg" alt="wrong" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The next, more recent attempt at implementation, shrinks the outline (moved each vertex in the direction of it's bisector) a number of times, until termination. Figuring out where termination is a bit of a problem - my first reaction was to union the the resulting outline with itself and remove any negative areas (if the outline runs in the opposite direction to the original, it's area is, by convention, considered negative). The problem with this is that several intersections can happen within one shrinkage (question mark, above), making a mess of the mesh (and so it's union). In fact, since an arbitrary number of these events can happen in one shrink step, and we need to sort them out in order, this problem is just as complicated as the original! (doh) So not such a good approach - except maybe a time saver for the concave case :-&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="300" width="400"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3147250&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=3147250&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="300" width="400"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;So I went back to Felkel's bisector collision with edges approach . My previous problem of dealing with these escaping bisectors could be dealt with by converting the n-sided outline shape, into n/2 planar slices through the completed skeleton. The following animations show a polygon with (dark) rainbow coloured edges, and the location of intersections with a slice collinear with a given edge (with a thick red edge). The intersections are in light rainbow colours:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="300" width="400"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3282890&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=3282890&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="300" width="400"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="300" width="400"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3282894&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=3282894&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="300" width="400"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I thought this approach would be successful, so much so that I made a nice series of images explaining the details.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/twak/3326578125/" title="don't do this by twak, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3386/3326578125_3ca2948ca6.jpg" alt="don't do this" height="500" width="452" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;But this approach turns out to be very fiddly. As the skeleton is constructed from the floor upwards we always remove edges (never adding them). Each time an edge is removed two other edges come together (unless we're at a peak). This means removing a edge from each 2d projection and re-running many intersections, which is a lot of book keeping (and it makes the already bad complexity even worse). Another complication is the need for a 2d representation for 3d faces (to represent parallel edges), this was done, but wasn't very tidy. In the end I learnt a lot about computational geometry, but it took ages (my current version took less than a day for rewrite). And the benefits of doing this way - more watertight boundaries - are more simply dealt with in 3d.&lt;br /&gt;&lt;br /&gt;So...next time children you'll need an empty washing liquid up bottle and I'll show you how not to shoot both your feet at the same time while constructing the weighted straight skeleton.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-7572287617657246887?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/7572287617657246887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/01/that-straight-skeleton-again.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7572287617657246887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/7572287617657246887'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/01/that-straight-skeleton-again.html' title='that straight skeleton again'/><author><name>twak</name><uri>http://www.blogger.com/profile/04403836565804589670</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_wceYeHJ7bn0/SOfIYR8M6QI/AAAAAAAAAZg/nUqnfLJoLFo/S220/blogspot3281.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3563/3326561137_00cc339e36_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6016594.post-1849163844751099808</id><published>2009-03-03T17:47:00.004Z</published><updated>2009-03-04T11:36:44.338Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='tuple3d'/><category scheme='http://www.blogger.com/atom/ns#' term='vecmath'/><category scheme='http://www.blogger.com/atom/ns#' term='library'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>the problem with package managers is...</title><content type='html'>...abandoned packages don't get updated very often. Hashing &lt;a href="http://java.sun.com/javase/technologies/desktop/java3d/forDevelopers/j3dapi/javax/vecmath/Tuple3d.html"&gt;Tuple3d&lt;/a&gt;'s didn't give the expected results. I was using &lt;a href="http://packages.ubuntu.com/gutsy/libvecmath1.2-java"&gt;ubuntu's vecmath&lt;/a&gt; package. The hashCode() values are the same, but the equals method falls back to Object.equals because the Tuple3d only defines Tuple3d.equals (Tuple3d). So you get very strange results if you're hashing with Tuple's.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://bugs.launchpad.net/ubuntu/+source/vecmath1.2/+bug/337323"&gt;Bugged!&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;The vecmath Tuple3d class doesn't define equals correctly.&lt;br /&gt;&lt;br /&gt;the method missing (from the GPL2'd java3d vecmath) is&lt;br /&gt;&lt;br /&gt;public boolean equals(Object t1)&lt;br /&gt;{&lt;br /&gt;  try {&lt;br /&gt;       Tuple3d t2 = (Tuple3d) t1;&lt;br /&gt;       return(this.x == t2.x &amp;amp;&amp;amp;&lt;br /&gt;       this.y == t2.y &amp;amp;&amp;amp; this.z == t2.z);&lt;br /&gt;  }&lt;br /&gt;  catch (ClassCastException e1) {return false;}&lt;br /&gt;  catch (NullPointerException e2) {return false;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;boolean equals (Tuple3d) isn't enough!&lt;br /&gt;&lt;br /&gt;public class NewClass&lt;br /&gt;{&lt;br /&gt;public static void main (String[] args)&lt;br /&gt;{&lt;br /&gt;    Vector3d v = new Vector3d(1,2,3);&lt;br /&gt;    Point3d p = new Point3d(1,2,3);&lt;br /&gt;&lt;br /&gt;    System.out.println(&lt;br /&gt;            v.equals( (Object)p));&lt;br /&gt;    System.out.println(&lt;br /&gt;            v.equals( (Object)new Point3d(1,2,3))&lt;br /&gt;            == v.equals( p ));&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6016594-1849163844751099808?l=twak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twak.blogspot.com/feeds/1849163844751099808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://twak.blogspot.com/2009/03/problem-with-package-managers-is.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/1849163844751099808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6016594/posts/default/1849163844751099808'/><link rel='alternate' type='text/html' href='http://twak.blogspot.com/2009/03/problem-with-package-managers-is.html' title='the 
