I would like to present here one tool I have developed recently for visualizing vectors in three dimensions. The tool allowes not only to view vectors but also to share them with others. Check the "link to current vectors" for that.

You can view it only by visiting URL: www.bodurov.com/VectorVisualizer

The tool is build from scratch and does not use any 3D engine. In fact it includes a very simple light weight 3D engine for drawing lines in 3D. For the platform I chose Silverlight under C# as I find .NET to be the best coding environment.

If you want to dive deeper into the concepts that this tool is based on you can check my Simple Talk article at www.simple-talk.com/dotnet/.net-framework/building-a-simple-3d-engine-with-silverlight/

The code is open source and of cource free. You can find the full source code at www.codeplex.com/VectorVisualizer

If you want to use it offline you can download an offline version from www.bodurov.com/files/VectorVisualizer_Offline.zip

Share this post:   digg     Stumble Upon     del.icio.us     E-mail

Posted on 2/2/2009 5:44:43 PM

That's a really neat tool!
Like the sharing capability, simple and well thought!

Vladimir Bodurov
Posted on 2/3/2009 12:21:23 AM

Thank you Ivan, I have just changed it to allow entering vectors from a text box like A(1,2,3) or B(3,4,5:-1,1,1). I think it will be easier to use it like this instead of entering each number in a separate text box. But you can still use the old way if you want.

Posted on 2/12/2009 5:15:41 PM

Thats really awesome! "I think that's the best technology demonstrator" I've seen so far! Does that take advantage of the video card? Like can you do complex 3D models in Silverlight?

Vladimir Bodurov
Posted on 2/12/2009 6:02:54 PM

No, this code has no 3D hardware acceleration. We expect this stuff to be released in the Silverlight version 3.0. Eventually next month (March 09) on MIX they should announce some kind of Beta for the 3.0 platform.

What you see here is only manual work done on 2.0 with no 3D hardware acceleration and no native 3D engine. Look at my article for more details on how this example was built http://www.simple-talk.com/dotnet/.net-framework/building-a-simple-3d-engine-with-silverlight/

Venu Madhav
Posted on 4/10/2009 11:55:15 PM

Vlad, First up... Great article !!

I love the cube in the 3D space using Vectors. I wonder if I give the 6 images of a product's 6 faces, Can this technique be directly applied to present a similar rotation (like the cube)?

Venu Madhav

Vladimir Bodurov
Posted on 4/11/2009 10:49:41 PM

Anything is possible. But you may want to look at Silverlight 3 because that will be much easier with 3.0 http://silverlight.net/themes/silverlight/getstarted/sl3beta.aspx?AspxAutoDetectCookieSupport=1

Martin Kirk
Posted on 7/24/2009 8:57:46 AM

Hello Vladimir

your visualizer is very nice !

one thing you could do to make it more nice, is to lock the Y-axis (u know, like in 3D shooting games), then you won't end up rotating the axis' into strange angles which is hard to reset. It makes navigation much easier for people to view models in the visualizer :-)

Vladimir Bodurov
Posted on 7/30/2009 11:33:21 PM

Hi Martin,

In this case I do lock but not Y-axis but Z-axis. However the shooting game effect that you are talking about is not caused by locking an axis but is rather caused by having two separate coordinating system, one of the coordinating system and another of the observer. For that case we have to use four by four matrix where the first three columns represent the rotation matrix and the fourth column represent the centre of the relative coordinating system. It is certainly possible, however I made this project for an article that was supposed to represent the basics of the 3D and thus keep things simple.

I am working on other things now so I probably won't have the time to do that, but if you want to do that I will put a link to your work.

Posted on 11/4/2009 12:05:59 PM

Hi Vladimir,

Thanks for your sample! I'm using it for 3D function visualization. But, when I have like 1024*66 points the rendering is very slow. How can I accelerate it? Is it possible to stop canvas rendering until I recalculate coordinates of all my points?

Thanks, Oleg.

Vladimir Bodurov
Posted on 11/4/2009 12:48:22 PM

Hi Oleg,

There are many different ways how you could optimize performance. For example as you can see in com.bodurov.VectorVisualizer.VectorVisualizer.MouseMove(...) method that the lines are being redrawn on each mouse move call this.Lines.ReDraw(); instead you could call there only the main outlines and the rest on mouse up. Also the tool uses always lines. If you want to show points may be you can use point objects instead.

Posted on 11/4/2009 6:05:52 PM

Hi Vladimir,

Well, I use 66 Polylines with 256 points each. It renders faster but not fast enough.
Also, you used lines to show X, Y and Z labels. Is it possible to use TextBlock instead? How to move this control on parent's surface?
Thanks, Oleg.

Vladimir Bodurov
Posted on 11/5/2009 10:17:34 AM

You can transform any Silverlight object by applying a matrix, here is demo

But the performance for that will be way worst than drawing simple lines

Posted on 4/15/2011 4:50:07 AM

This freeware program helped me not only to visualize vectors, points, and lines in three dimansions but also to share my 3D visualization with my friends.Thanks, glad that visited your site!

disaster recovery software
Posted on 4/19/2011 11:20:39 AM

Thanks for the open source code to this great tool. I have been using it for 3D function visualization. Your tips on how to optimize its performance were very helpful.

Commenting temporarily disabled