# Difference between revisions of "Darwinbots3/Tasks"

From WikiManual

(New page: == References == * [http://www.nrbook.com/a/bookcpdf.php Numerical Recipes in C] * Numerical Methods for Least Squared Problems by Ake Bjorck. ISBN: 0-89871-360-9 == Azimuth tasks == * C...) |
m |
||

(6 intermediate revisions by one other user not shown) | |||

Line 4: | Line 4: | ||

== Azimuth tasks == | == Azimuth tasks == | ||

− | * Construct a | + | * Expand the rectangular matrix class. See SquareMatrix. |

+ | |||

+ | * Construct a QR decomposer. See the existing code for LU decomposition to get an idea of how the format works. Make sure to test thoroughly to see that it properly handles full rank, below full rank, and rectangular (full and non full rank) matrices. Since QR decomposer works on rectangular matrices, the interface will be a little different than for the others. Also, because it needs to handle arbitrary matrices, a rank revealing QR (RRQR) decomposer is in order. | ||

* Construct a sparse Cholesky decomposer. I don't have any references for this. | * Construct a sparse Cholesky decomposer. I don't have any references for this. | ||

Line 10: | Line 12: | ||

* Construct a sparse QR decomposer. There's whole sections on this in Numerical Methods for Least Squares Problems, but I haven't read them yet. | * Construct a sparse QR decomposer. There's whole sections on this in Numerical Methods for Least Squares Problems, but I haven't read them yet. | ||

− | == UI.Controls | + | * Right now there are methods for finding roots of up to quartic polynomials analytically. No general analytic methods exist beyond quartic, so we need an iterative general polynomial root finder. This is actually a sort of tricky problem from a numerical standpoint. See section 9.5 in Numerical Recipes in C ("Roots of Polynomials"). Because finding all the roots might be computationally expensive and probably unnecessary, allowing the user to extract roots one at a time with successive calls would work well. The primary use case in mind would involve finding the least positive real root >= 0 (collisions between cubic splines). |

+ | |||

+ | * Someone needs to take a look at finding the points of collision between two "fat" splines. Imagine a line segment. Now move a sphere along the line segment. You have a capsule. Now replace the line segment with a polygon (cubic most likely). See [http://www.gamedev.net/community/forums/topic.asp?topic_id=547699 this thread] I wrote on gamedev talking about it from a broadphase point of view. Someone mentioned "multidimensional Sturm's theorem". Also, there's [http://www.cs.uiowa.edu/~kearney/pubs/CurvesAndSufacesClosestPoint.pdf closest point on spline to point], which could maybe be expanded in some way, or the basic idea mined. | ||

+ | |||

+ | == UI.Controls tasks == | ||

* Build an exception console. Basically when Darwinbots is running, when an exception is encountered I want a special exception explorer to pop up on the screen that lets the user examine the exception (in a non modal way), log it in some ways (send an error report, save it to disk, save the currently running sim, etc.), and then ignore it and continue on with the sim (actually the sim should attempt to continue without the user present, but that's another story). | * Build an exception console. Basically when Darwinbots is running, when an exception is encountered I want a special exception explorer to pop up on the screen that lets the user examine the exception (in a non modal way), log it in some ways (send an error report, save it to disk, save the currently running sim, etc.), and then ignore it and continue on with the sim (actually the sim should attempt to continue without the user present, but that's another story). | ||

Line 17: | Line 23: | ||

* Build a GDI implementation. Consult the XNA implementation as necessary to get an idea of what to do. Should be pretty easy, since you don't have to worry about batching. | * Build a GDI implementation. Consult the XNA implementation as necessary to get an idea of what to do. Should be pretty easy, since you don't have to worry about batching. | ||

+ | |||

+ | * Graphics.Core is woefully under tested because I wasn't really certain what I was doing as I was doing it, as far as interface goes. Just go back through and try to test as much of the code that's untested at the moment as possible. | ||

+ | |||

+ | == Non module specific == | ||

+ | * Code coverage - Each module (hopefully) has some unit tests. Right now there's no way to tell how much of a module is being tested and how much is completely untested. Either find or build some tools that allow us to determine how much of the code is covered by the unit tests. | ||

+ | |||

+ | * Profiling - Likewise no tools exist right now to profile the code for performance bottlenecks. Either find or build a tool to aid in profiling. |

## Latest revision as of 18:27, 30 November 2009

## Contents

## References

- Numerical Recipes in C
- Numerical Methods for Least Squared Problems by Ake Bjorck. ISBN: 0-89871-360-9

## Azimuth tasks

- Expand the rectangular matrix class. See SquareMatrix.

- Construct a QR decomposer. See the existing code for LU decomposition to get an idea of how the format works. Make sure to test thoroughly to see that it properly handles full rank, below full rank, and rectangular (full and non full rank) matrices. Since QR decomposer works on rectangular matrices, the interface will be a little different than for the others. Also, because it needs to handle arbitrary matrices, a rank revealing QR (RRQR) decomposer is in order.

- Construct a sparse Cholesky decomposer. I don't have any references for this.

- Construct a sparse QR decomposer. There's whole sections on this in Numerical Methods for Least Squares Problems, but I haven't read them yet.

- Right now there are methods for finding roots of up to quartic polynomials analytically. No general analytic methods exist beyond quartic, so we need an iterative general polynomial root finder. This is actually a sort of tricky problem from a numerical standpoint. See section 9.5 in Numerical Recipes in C ("Roots of Polynomials"). Because finding all the roots might be computationally expensive and probably unnecessary, allowing the user to extract roots one at a time with successive calls would work well. The primary use case in mind would involve finding the least positive real root >= 0 (collisions between cubic splines).

- Someone needs to take a look at finding the points of collision between two "fat" splines. Imagine a line segment. Now move a sphere along the line segment. You have a capsule. Now replace the line segment with a polygon (cubic most likely). See this thread I wrote on gamedev talking about it from a broadphase point of view. Someone mentioned "multidimensional Sturm's theorem". Also, there's closest point on spline to point, which could maybe be expanded in some way, or the basic idea mined.

## UI.Controls tasks

- Build an exception console. Basically when Darwinbots is running, when an exception is encountered I want a special exception explorer to pop up on the screen that lets the user examine the exception (in a non modal way), log it in some ways (send an error report, save it to disk, save the currently running sim, etc.), and then ignore it and continue on with the sim (actually the sim should attempt to continue without the user present, but that's another story).

## Graphics.Core tasks

- Build a skeletal animation system. Not strictly necessary for Darwinbots but would be nice to have. See the implementation of Collage to get an idea of what needs to happen.

- Build a GDI implementation. Consult the XNA implementation as necessary to get an idea of what to do. Should be pretty easy, since you don't have to worry about batching.

- Graphics.Core is woefully under tested because I wasn't really certain what I was doing as I was doing it, as far as interface goes. Just go back through and try to test as much of the code that's untested at the moment as possible.

## Non module specific

- Code coverage - Each module (hopefully) has some unit tests. Right now there's no way to tell how much of a module is being tested and how much is completely untested. Either find or build some tools that allow us to determine how much of the code is covered by the unit tests.

- Profiling - Likewise no tools exist right now to profile the code for performance bottlenecks. Either find or build a tool to aid in profiling.