Showing posts with label tools. Show all posts
Showing posts with label tools. Show all posts

Friday, July 18, 2008

SketchUp

A few words about SketchUp would be appropriate now (I use Sketchup in my Genetic-house project for final processing and visualisation).

I consider SketchUp the best drawing software I've ever seen, period.

I have some 25 years of experience with computers and software. It started with the 8-bit Sinclair ZX-81, then came it's more powerful brother ZX-Spectrum, then Commodore 64, and then a countless armada of PCs... you can imagine I've tried and used lots of software of every kind.

From my personal experience I know that by far the most difficult thing in software is to make things simple but still powerful (that I call good abstraction). It's very easy to make complex things. To add features, to expand functionality. Anyone knows how to do that. But complex software can be either painful to use or even completely useless.

The other danger is to make things too simple. One of the Murphy's Laws, called Shaw's Principle, says: Build a system that even a fool can use, and only a fool will want to use it. That I call bad abstraction.


To keep powerful things simple to use, that's far from trivial. And SketchUp is both quite powerful as well as incredibly simple to use.

When discussing SketchUp with my colleagues, most of them point out, that SketchUp in not as powerful as the classic CAD software (e.g. AutoCAD). That's not a very good comparison; AutoCAD (a great software too, no doubt) is primarily a drafting tool, while SketchUp is used for - 3d sketching and modeling in the design conception phase.

But consider this: SketchUp can build up functionality and new features while it can remain simple to use; it's authors have demonstrated they master the good abstraction lore. On the other hand, it's virtually impossible for AutoCAD (or any other) to become much simpler - unless they start all over again, but then it wouldn't be the same software anymore.

Saturday, April 19, 2008

Qhull solution

Hmmm... it turned out that the construction of Voronoi diagrams is far from trivial. There are some serious papers out there, and they involved quite a bit of mathematics, to put it mildly.

I started to study the 2d methods first.

The sweep method (java required for demo) seemed so not elegant to me. "Wave front", come on, what's that? :-) There must be a better way.

I found the divide-and-conquer approach, presented by Shamos and Hoey, much more elegant. It can be easily attacked with the object-oriented programming language.

But after some hours of intensive work some concernes began to arise. The algorithm was pretty complex, but I was still in 2d. What would happen in 3d? The complexity would go over the roof. After all, the Voronoi construction itself is not the topic of my research; it's merely a tool and I should spend as little time as possible for it.

I stopped the work with the divide-and-conquer construction of Voronoi and headed for the web again; let's find some more info about 3d Voronoi construction.

My fears that 3d Voronoi construciton is far from trivial were confirmed, when I discovered that two first-class mathematical tools, Mathematica and Mathlab, both use external library Qhull for Voronoi (and related) computations.

Qhull is a powerful software put together by nice people who seemingly allow us to use it freely. It can do convex-hull, Voronoi diagrams and Delaunay triangualtion (which is the dual of Voronoi) in not only 2d and 3d, but even in higher dimensions, at least up to 8d; so there was really no point in competing with it :-)

After a few hours crunching numbers and fighting with academic-style documentation, almost all of my Voronoi computation problems were solved. As a bonus, it turned out that Qhull was lightning fast as well. Happy ending!