<?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-7904784</id><updated>2011-04-21T21:48:26.587-05:00</updated><title type='text'>The Sparse Matrix</title><subtitle type='html'>Where approximation meets gesticulation</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sparsepundit.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7904784/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sparsepundit.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>SparseMatrix</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7904784.post-109934069549040147</id><published>2004-11-01T14:16:00.000-06:00</published><updated>2004-11-05T01:49:08.136-06:00</updated><title type='text'>New Site</title><content type='html'>Because Blogger is slow, unwieldy, painful to use, and because it's about time I started really hacking a site for myself, I've moved The Sparse Matrix blog to a new home.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.thesparsematrix.com"&gt;http://www.thesparsematrix.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;All my existing posts will remain here until I get the time (and strength) to wade through the slow Blogger interface and transfer them. &lt;br /&gt;&lt;br /&gt;In all fairness, for a free blog-site, Blogger is actually one of the best. I imagine after some time dealing with the pain of bandwidth limits, roll-your-own software, etc., I'll be waxing nostalgic about my Blogger days, but right now, the pain which is Blogger is still too near. Here's hoping the new site doesn't crash and burn.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7904784-109934069549040147?l=sparsepundit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sparsepundit.blogspot.com/feeds/109934069549040147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7904784&amp;postID=109934069549040147' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7904784/posts/default/109934069549040147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7904784/posts/default/109934069549040147'/><link rel='alternate' type='text/html' href='http://sparsepundit.blogspot.com/2004/11/new-site.html' title='New Site'/><author><name>SparseMatrix</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7904784.post-109504729700322308</id><published>2004-09-12T22:45:00.000-05:00</published><updated>2006-08-09T10:10:28.376-05:00</updated><title type='text'>Jammie Nation</title><content type='html'>&lt;img height=200 width=200 src="curious%20george%20pajamas.jpg" align="right"/&gt; I'm with &lt;a href="http://www.nationalcenter.org/2004/09/blogger-jammies.html"&gt;Amy&lt;/a&gt; and &lt;a href="http://www.truthlaidbear.com/archives/2004/09/11/proposal_blogger_jammies.php#001430"&gt;N.Z. Bear&lt;/a&gt;. Jammies now! I want a pair, yo.&lt;br /&gt;&lt;blockquote&gt;"Bloggers have no checks and balances . . . [it's] a guy sitting in his living room in his pajamas." -- &lt;a href="http://instapundit.com/archives/017736.php"&gt;Jonathan Klein&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is, of course, far too delicious a statement to simply ignore. Already, bloggers have taken it up as a badge of honor. &lt;/blockquote&gt; Welcome to Jammie Nation, where Dan Ra&lt;sup&gt;th&lt;/sup&gt;er gets his ass kicked by guys in pajamas. &lt;br /&gt;&lt;br /&gt;Via Instapundit, &lt;a href="http://instapundit.com/archives/017768.php"&gt;"NO DISPUTING IT -- Blogs Are Major Players."&lt;/a&gt; Viva la revolucion. &lt;a href="http://www.democraticunderground.com"&gt;Left&lt;/a&gt;, &lt;a href="http://www.freerepublic.com"&gt;Right&lt;/a&gt;, &lt;a href="http://www.grupo-utopia.com/blog/isou/"&gt;Center&lt;/a&gt;. Who cares? We don't need you anymore, Mr. Ra&lt;sup&gt;th&lt;/sup&gt;er. We can do for ourselves just fine now, thank you.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE:&lt;/b&gt; Welcome, Instapundit readers. Here's some funnage for you.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src=""/&gt;&lt;br /&gt;Worst. Photoshop. Ever.&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE:&lt;/b&gt; BTW, I gotta give credit &lt;a href="http://www.truthlaidbear.com/archives/2004/09/11/proposal_blogger_jammies.php#001430"&gt;where credit is due&lt;/a&gt; for the "ass kicked by guys in pajamas" joke. Check point three in the post.  &lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE:&lt;/b&gt; From the fertile digital-brownshirt pen of Sharon Gilbert via &lt;a href="http://www.derekpgilbert.com/2004_09_01_derekgilbert_archive.html#109495147748924741"&gt;Weapon of Mass Distraction&lt;/a&gt;:&lt;br /&gt;&lt;center&gt;&lt;a href="http://www.derekpgilbert.com/2004_09_01_derekgilbert_archive.html#109495147748924741"&gt;&lt;img src="http://www.derekpgilbert.com/images/theblog.jpg"/&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;Oh, the comedy. The tearful, cotton-and-lycra hilarity of it all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7904784-109504729700322308?l=sparsepundit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sparsepundit.blogspot.com/feeds/109504729700322308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7904784&amp;postID=109504729700322308' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7904784/posts/default/109504729700322308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7904784/posts/default/109504729700322308'/><link rel='alternate' type='text/html' href='http://sparsepundit.blogspot.com/2004/09/jammie-nation.html' title='Jammie Nation'/><author><name>SparseMatrix</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7904784.post-109656445760276369</id><published>2002-03-22T13:12:00.000-06:00</published><updated>2004-09-30T12:14:17.630-05:00</updated><title type='text'>Global Check of Candidate Points</title><content type='html'>&lt;h2&gt;Algorithm&lt;/h2&gt;    &lt;h3&gt;Pseudocode&lt;/h3&gt;    &lt;b&gt;If&lt;/b&gt; the search is over points created with the    &lt;a href="centroid.html"&gt;Centroid&lt;/a&gt; method:    &lt;blockquote&gt;          &lt;b&gt;Loop&lt;/b&gt; over each candidate point ( P&lt;sub&gt;cand&lt;/sub&gt; ):      &lt;blockquote&gt;        &lt;b&gt;Loop&lt;/b&gt; over nodes of containing element for P&lt;sub&gt;cand&lt;/sub&gt;        ( N&lt;sub&gt;cand&lt;/sub&gt; ):        &lt;blockquote&gt;          &lt;b&gt;Loop&lt;/b&gt; over surrounding elements of N&lt;sub&gt;cand&lt;/sub&gt;          ( E&lt;sub&gt;n-cand&lt;/sub&gt; ):          &lt;blockquote&gt;            &lt;b&gt;If&lt;/b&gt; P&lt;sub&gt;cand&lt;/sub&gt; is a sufficient distance from the            candidate point contained in E&lt;sub&gt;n-cand&lt;/sub&gt;,             it can be &lt;i&gt;accepted&lt;/i&gt;.&lt;br&gt;&lt;br&gt;            &lt;b&gt;Else&lt;/b&gt;, it cannot be &lt;i&gt;accepted&lt;/i&gt;.          &lt;/blockquote&gt;        &lt;/blockquote&gt;      &lt;/blockquote&gt;    &lt;/blockquote&gt;    &lt;b&gt;Else If&lt;/b&gt; the search is over points created with the    &lt;a href="adv_front.html"&gt;Advancing Front&lt;/a&gt; method:    &lt;blockquote&gt;          &lt;b&gt;Loop&lt;/b&gt; over each candidate point ( P&lt;sub&gt;cand&lt;/sub&gt; ):      &lt;blockquote&gt;        &lt;b&gt;Loop&lt;/b&gt; over the candidate points of         containing element for P&lt;sub&gt;cand&lt;/sub&gt;        ( P&lt;sub&gt;other_cand&lt;/sub&gt; ):        &lt;blockquote&gt;          &lt;b&gt;If&lt;/b&gt; P&lt;sub&gt;cand&lt;/sub&gt; is a sufficient distance from the          P&lt;sub&gt;other_cand&lt;/sub&gt;, it can be &lt;i&gt;accepted&lt;/i&gt;.&lt;br&gt;&lt;br&gt;          &lt;b&gt;Else&lt;/b&gt; P&lt;sub&gt;cand&lt;/sub&gt; it cannot be &lt;i&gt;accepted&lt;/i&gt;.        &lt;/blockquote&gt;        &lt;b&gt;Loop&lt;/b&gt; over nodes of containing element for P&lt;sub&gt;cand&lt;/sub&gt;        ( N&lt;sub&gt;cand&lt;/sub&gt; ):        &lt;blockquote&gt;          &lt;b&gt;Loop&lt;/b&gt; over surrounding elements of N&lt;sub&gt;cand&lt;/sub&gt;          ( E&lt;sub&gt;n-cand&lt;/sub&gt; ):          &lt;blockquote&gt;            &lt;b&gt;If&lt;/b&gt; P&lt;sub&gt;cand&lt;/sub&gt; is a sufficient distance from the            candidate points contained in E&lt;sub&gt;n-cand&lt;/sub&gt;,             it can be &lt;i&gt;accepted&lt;/i&gt;.&lt;br&gt;&lt;br&gt;            &lt;b&gt;Else&lt;/b&gt; P&lt;sub&gt;cand&lt;/sub&gt; it cannot be &lt;i&gt;accepted&lt;/i&gt;.          &lt;/blockquote&gt;        &lt;/blockquote&gt;      &lt;/blockquote&gt;    &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7904784-109656445760276369?l=sparsepundit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sparsepundit.blogspot.com/feeds/109656445760276369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7904784&amp;postID=109656445760276369' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7904784/posts/default/109656445760276369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7904784/posts/default/109656445760276369'/><link rel='alternate' type='text/html' href='http://sparsepundit.blogspot.com/2002/03/global-check-of-candidate-points_22.html' title='Global Check of Candidate Points'/><author><name>SparseMatrix</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7904784.post-109656422232309607</id><published>2002-03-22T13:07:00.000-06:00</published><updated>2004-09-30T12:11:37.240-05:00</updated><title type='text'>Area Coordinate Search</title><content type='html'>&lt;h2&gt;Algorithm&lt;/h2&gt;    &lt;h3&gt;&lt;i&gt;Recursive&lt;/i&gt;&lt;/h3&gt;    &lt;TABLE&gt;      &lt;TR&gt; &lt;TH align="right"&gt;Name: &lt;/TH&gt; &lt;TD&gt;&lt;b&gt;&lt;i&gt;Search&lt;/i&gt;&lt;/b&gt; &lt;/TD&gt; &lt;/TR&gt;      &lt;TR&gt; &lt;TH align="right"&gt;Variables Received: &lt;/TH&gt;         &lt;TD&gt;&lt;b&gt;Element&lt;sub&gt;search&lt;/sub&gt;&lt;/b&gt; (first received is          the element from which the &lt;i&gt;ideal&lt;/i&gt; point was generated)&lt;/TD&gt;       &lt;/TR&gt;      &lt;TR&gt; &lt;TH align="right"&gt;Variables Returned: &lt;/TH&gt; &lt;TD&gt; Whether or not the           &lt;i&gt;ideal&lt;/i&gt; point can be found           ( &lt;b&gt;Return 1&lt;/b&gt;: &lt;i&gt;cannot&lt;/i&gt; or          &lt;b&gt;Return 0&lt;/b&gt;: &lt;i&gt;can&lt;/i&gt; )&lt;/TD&gt; &lt;/TR&gt;      &lt;TR&gt; &lt;TH align="right"&gt;&lt;/TH&gt; &lt;TD&gt;Containing element          for the &lt;i&gt;ideal&lt;/i&gt; point           ( &lt;b&gt;Element&lt;sub&gt;found&lt;/sub&gt;&lt;/b&gt; )&lt;/TD&gt; &lt;/TR&gt;      &lt;TR&gt; &lt;TH align="right"&gt;&lt;/TH&gt; &lt;TD&gt;Weights for the distribution function          values of the containing element's nodes           ( &lt;b&gt;PHI&lt;sub&gt;1&lt;/sub&gt;&lt;/b&gt;, &lt;b&gt;PHI&lt;sub&gt;2&lt;/sub&gt;&lt;/b&gt;, and          &lt;b&gt;PHI&lt;sub&gt;3&lt;/sub&gt;&lt;/b&gt; )&lt;/TD&gt; &lt;/TR&gt;    &lt;/TABLE&gt;    &lt;h3&gt;Pseudocode&lt;/h3&gt;    &lt;b&gt;Compute&lt;/b&gt; the area of Element&lt;sub&gt;search&lt;/sub&gt;     ( Area&lt;sub&gt;search&lt;/sub&gt; ).    &lt;br&gt;&lt;br&gt;&lt;b&gt;Compute&lt;/b&gt; the area of triangle made by the     &lt;i&gt;ideal&lt;/i&gt; point    and Node 2 and Node 3 of Element&lt;sub&gt;search&lt;/sub&gt;:    &lt;blockquote&gt;      Area&lt;sub&gt;1&lt;/sub&gt; = (Point&lt;sub&gt;n2&lt;/sub&gt;-Point&lt;sub&gt;ideal&lt;/sub&gt;)                                &lt;b&gt;x&lt;/b&gt;                          (Point&lt;sub&gt;n3&lt;/sub&gt;-Point&lt;sub&gt;ideal&lt;/sub&gt;)    &lt;/blockquote&gt;    &lt;b&gt;Compute&lt;/b&gt; the area of triangle made by the &lt;i&gt;ideal&lt;/i&gt; point    and Node 3 and Node 1 of Element&lt;sub&gt;search&lt;/sub&gt;:    &lt;blockquote&gt;      Area&lt;sub&gt;2&lt;/sub&gt; = (Point&lt;sub&gt;n3&lt;/sub&gt;-Point&lt;sub&gt;ideal&lt;/sub&gt;)                                 &lt;b&gt;x&lt;/b&gt;                          (Point&lt;sub&gt;n1&lt;/sub&gt;-Point&lt;sub&gt;ideal&lt;/sub&gt;)    &lt;/blockquote&gt;   &lt;b&gt;Compute&lt;/b&gt; the area of triangle made by the &lt;i&gt;ideal&lt;/i&gt; point    and Node 1 and Node 2 of Element&lt;sub&gt;search&lt;/sub&gt;:    &lt;blockquote&gt;      Area&lt;sub&gt;3&lt;/sub&gt; = (Point&lt;sub&gt;n1&lt;/sub&gt;-Point&lt;sub&gt;ideal&lt;/sub&gt;)                                 &lt;b&gt;x&lt;/b&gt;                          (Point&lt;sub&gt;n2&lt;/sub&gt;-Point&lt;sub&gt;ideal&lt;/sub&gt;)    &lt;/blockquote&gt;    &lt;b&gt;Compute&lt;/b&gt; the minimum of these areas:    &lt;blockquote&gt;      Area&lt;sub&gt;min&lt;/sub&gt; = MIN( Area&lt;sub&gt;1&lt;/sub&gt;, Area&lt;sub&gt;2&lt;/sub&gt;,      Area&lt;sub&gt;3&lt;/sub&gt; )    &lt;/blockquote&gt;    &lt;b&gt;If&lt;/b&gt; Area&lt;sub&gt;min&lt;/sub&gt; is greater than the negative of     the minimum distribution function (-PHI&lt;sub&gt;min&lt;/sub&gt;):    &lt;blockquote&gt;      PHI&lt;sub&gt;1&lt;/sub&gt; = Area&lt;sub&gt;1&lt;/sub&gt;/Area&lt;sub&gt;search&lt;/sub&gt;&lt;br&gt;      PHI&lt;sub&gt;2&lt;/sub&gt; = Area&lt;sub&gt;2&lt;/sub&gt;/Area&lt;sub&gt;search&lt;/sub&gt;&lt;br&gt;      PHI&lt;sub&gt;3&lt;/sub&gt; = Area&lt;sub&gt;3&lt;/sub&gt;/Area&lt;sub&gt;search&lt;/sub&gt;&lt;br&gt;      &lt;b&gt;Return 0&lt;/b&gt;    &lt;/blockquote&gt;    &lt;b&gt;If&lt;/b&gt; Area&lt;sub&gt;1&lt;/sub&gt; is negative:    &lt;blockquote&gt;      &lt;b&gt;Set&lt;/b&gt; Element&lt;sub&gt;search&lt;/sub&gt; to the neighboring      element across from Point&lt;sub&gt;1&lt;/sub&gt;.&lt;br&gt;&lt;br&gt;      &lt;b&gt;If&lt;/b&gt; this neighbor is not a boundary &lt;b&gt;and&lt;/b&gt; hasn't already      been searched:      &lt;blockquote&gt;        &lt;b&gt;&lt;i&gt;Search&lt;/i&gt;&lt;/b&gt; the neighbor.&lt;br&gt;&lt;br&gt;        &lt;b&gt;If&lt;/b&gt; the containing element is found (i.e. &lt;i&gt;Search&lt;/i&gt;        &lt;b&gt;Returns 0&lt;/b&gt; ):        &lt;blockquote&gt;          Element&lt;sub&gt;found&lt;/sub&gt; = Element&lt;sub&gt;search&lt;/sub&gt;&lt;br&gt;          &lt;b&gt;Return 0&lt;/b&gt;        &lt;/blockquote&gt;        &lt;b&gt;Else&lt;/b&gt;:        &lt;blockquote&gt;          &lt;b&gt;Return 1&lt;/b&gt;        &lt;/blockquote&gt;      &lt;/blockquote&gt;      &lt;b&gt;Else&lt;/b&gt;:      &lt;blockquote&gt;        &lt;b&gt;Return 1&lt;/b&gt;      &lt;/blockquote&gt;    &lt;/blockquote&gt;    &lt;b&gt;If&lt;/b&gt; Area&lt;sub&gt;2&lt;/sub&gt; is negative:    &lt;blockquote&gt;      &lt;b&gt;Set&lt;/b&gt; Element&lt;sub&gt;search&lt;/sub&gt; to the neighboring      element across from Point&lt;sub&gt;2&lt;/sub&gt;.&lt;br&gt;&lt;br&gt;      &lt;b&gt;If&lt;/b&gt; this neighbor is not a boundary &lt;b&gt;and&lt;/b&gt; hasn't already      been searched:      &lt;blockquote&gt;        &lt;b&gt;&lt;i&gt;Search&lt;/i&gt;&lt;/b&gt; the neighbor.&lt;br&gt;&lt;br&gt;        &lt;b&gt;If&lt;/b&gt; the containing element is found (i.e. &lt;i&gt;Search&lt;/i&gt;        &lt;b&gt;Returns 0&lt;/b&gt; ):        &lt;blockquote&gt;          Element&lt;sub&gt;found&lt;/sub&gt; = Element&lt;sub&gt;search&lt;/sub&gt;&lt;br&gt;          &lt;b&gt;Return 0&lt;/b&gt;        &lt;/blockquote&gt;        &lt;b&gt;Else&lt;/b&gt;:        &lt;blockquote&gt;          &lt;b&gt;Return 1&lt;/b&gt;        &lt;/blockquote&gt;      &lt;/blockquote&gt;      &lt;b&gt;Else&lt;/b&gt;:      &lt;blockquote&gt;        &lt;b&gt;Return 1&lt;/b&gt;      &lt;/blockquote&gt;    &lt;/blockquote&gt;    &lt;b&gt;If&lt;/b&gt; Area&lt;sub&gt;3&lt;/sub&gt; is negative:    &lt;blockquote&gt;      &lt;b&gt;Set&lt;/b&gt; Element&lt;sub&gt;search&lt;/sub&gt; to the neighboring      element across from Point&lt;sub&gt;3&lt;/sub&gt;.&lt;br&gt;&lt;br&gt;      &lt;b&gt;If&lt;/b&gt; this neighbor is not a boundary &lt;b&gt;and&lt;/b&gt; hasn't already      been searched:      &lt;blockquote&gt;        &lt;b&gt;&lt;i&gt;Search&lt;/i&gt;&lt;/b&gt; the neighbor.&lt;br&gt;&lt;br&gt;        &lt;b&gt;If&lt;/b&gt; the containing element is found (i.e. &lt;i&gt;Search&lt;/i&gt;        &lt;b&gt;Returns 0&lt;/b&gt; ):        &lt;blockquote&gt;          Element&lt;sub&gt;found&lt;/sub&gt; = Element&lt;sub&gt;search&lt;/sub&gt;&lt;br&gt;          &lt;b&gt;Return 0&lt;/b&gt;        &lt;/blockquote&gt;        &lt;b&gt;Else&lt;/b&gt;:        &lt;blockquote&gt;          &lt;b&gt;Return 1&lt;/b&gt;        &lt;/blockquote&gt;      &lt;/blockquote&gt;      &lt;b&gt;Else&lt;/b&gt;:      &lt;blockquote&gt;        &lt;b&gt;Return 1&lt;/b&gt;      &lt;/blockquote&gt;    &lt;/blockquote&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7904784-109656422232309607?l=sparsepundit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sparsepundit.blogspot.com/feeds/109656422232309607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7904784&amp;postID=109656422232309607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7904784/posts/default/109656422232309607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7904784/posts/default/109656422232309607'/><link rel='alternate' type='text/html' href='http://sparsepundit.blogspot.com/2002/03/area-coordinate-search.html' title='Area Coordinate Search'/><author><name>SparseMatrix</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7904784.post-109656351749710055</id><published>2002-03-22T11:55:00.000-06:00</published><updated>2004-09-30T11:58:37.496-05:00</updated><title type='text'>Centroid Method for Point Placement</title><content type='html'>    &lt;h2&gt;Algorithm&lt;/h2&gt;    &lt;h3&gt;Pseudocode&lt;/h3&gt;    &lt;b&gt;Loop&lt;/b&gt; over each element in a given triangulation:    &lt;blockquote&gt;      &lt;b&gt;If&lt;/b&gt; the element is &lt;i&gt;modifiable&lt;/i&gt;:    &lt;blockquote&gt;     &lt;b&gt;Compute&lt;/b&gt; the element's centroid:    &lt;blockquote&gt;   centroid&lt;sub&gt;x&lt;/sub&gt; = (1/3)*(x&lt;sub&gt;1&lt;/sub&gt; + x&lt;sub&gt;2&lt;/sub&gt; + x&lt;sub&gt;3&lt;/sub&gt;)          &lt;br&gt;centroid&lt;sub&gt;y&lt;/sub&gt; = (1/3)*(y&lt;sub&gt;1&lt;/sub&gt; + y&lt;sub&gt;2&lt;/sub&gt; + y&lt;sub&gt;3&lt;/sub&gt;)        &lt;/blockquote&gt;       &lt;b&gt;Compute&lt;/b&gt; the centroid's distribution function value:        &lt;blockquote&gt;         centroid&lt;sub&gt;df&lt;/sub&gt; = (1/3)*(df&lt;sub&gt;1&lt;/sub&gt; + df&lt;sub&gt;2&lt;/sub&gt; + df&lt;sub&gt;3&lt;/sub&gt;)      &lt;/blockquote&gt;      &lt;b&gt;Compute&lt;/b&gt; the distances of each point in the element to the    centroid.     &lt;br&gt;&lt;br&gt;&lt;b&gt;If&lt;/b&gt; the least of these distances are greater than the       distribution function value for the centroid:        &lt;blockquote&gt;         &lt;b&gt;Add&lt;/b&gt; the point/centroid to the list of candidate points.        &lt;/blockquote&gt;        &lt;b&gt;Else&lt;/b&gt;        &lt;blockquote&gt;          &lt;b&gt;Set&lt;/b&gt; the element as &lt;i&gt;unmodifiable&lt;/i&gt;.       &lt;/blockquote&gt;      &lt;/blockquote&gt;    &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7904784-109656351749710055?l=sparsepundit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sparsepundit.blogspot.com/feeds/109656351749710055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7904784&amp;postID=109656351749710055' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7904784/posts/default/109656351749710055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7904784/posts/default/109656351749710055'/><link rel='alternate' type='text/html' href='http://sparsepundit.blogspot.com/2002/03/centroid-method-for-point-placement.html' title='Centroid Method for Point Placement'/><author><name>SparseMatrix</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7904784.post-109656274279009700</id><published>2002-03-22T11:27:00.000-06:00</published><updated>2004-10-04T09:06:03.313-05:00</updated><title type='text'>Studies in Unstructured Grid Generation Using AFLR2E</title><content type='html'>&lt;i&gt;&lt;b&gt;Note:&lt;/b&gt; This is a report written for a class I had in grad school in 2002. I found it using the Wayback Machine and decided that the algorithms alone were reason enough to keep it. The original report is provided here mainly for some semblance of context.&lt;/i&gt;&lt;h2&gt;Methods&lt;/h2&gt; &lt;h3&gt;Centroid method&lt;/h3&gt; &lt;p&gt;Given the &lt;a href="http://sparsepundit.blogspot.com/2002/03/centroid-method-for-point-placement.html"&gt;algorithm's&lt;/a&gt; simplicity, the function wasn't too difficult to produce. The results, though, were a little disturbing, given the quality of results with more complex algorithms such as AF. This degree of difference defied explanation when trying to re-evaluate my code. I eventually gave up in favor of resignation to the fact that the AFLR2E code is probably more finely tuned (i.e. better choices for cdfn, etc.). &lt;/p&gt;    &lt;table border="1"&gt;    &lt;tbody&gt;&lt;tr&gt; &lt;th&gt;Circle  &lt;/th&gt;&lt;th&gt;AFLR2E  &lt;/th&gt;&lt;th&gt;Class &lt;/th&gt; &lt;/tr&gt;&lt;tr&gt; &lt;th&gt;Number of Elements &lt;/th&gt;&lt;td&gt;542  &lt;/td&gt;&lt;td&gt;536 &lt;/td&gt; &lt;/tr&gt;   &lt;tr&gt; &lt;th&gt;Max Angle                &lt;/th&gt;&lt;td&gt;113.114  &lt;/td&gt;&lt;td&gt;112.302 &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt; &lt;th&gt;Min Angle                &lt;/th&gt;&lt;td&gt;23.19    &lt;/td&gt;&lt;td&gt;23.19 &lt;/td&gt; &lt;/tr&gt;      &lt;tr&gt; &lt;th&gt;Percent above 90 degrees &lt;/th&gt;&lt;td&gt;2.03     &lt;/td&gt;&lt;td&gt;2.612 &lt;/td&gt; &lt;/tr&gt;      &lt;tr&gt; &lt;th&gt;Percent below 30 degrees &lt;/th&gt;&lt;td&gt;14.945   &lt;/td&gt;&lt;td&gt;14.925 &lt;/td&gt; &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;  &lt;table border="1"&gt;   &lt;tbody&gt;&lt;tr&gt; &lt;th&gt;Atlantic &lt;/th&gt;&lt;th&gt;AFLR2E   &lt;/th&gt;&lt;th&gt;Class&lt;/th&gt; &lt;/tr&gt;  &lt;tr&gt; &lt;th&gt;Number of Elements &lt;/th&gt;&lt;td&gt;31116    &lt;/td&gt;&lt;td&gt;41396 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th&gt;Max Angle  &lt;/th&gt;&lt;td&gt;148.802  &lt;/td&gt;&lt;td&gt;116.301 &lt;/td&gt; &lt;/tr&gt;      &lt;tr&gt; &lt;th&gt;Min Angle  &lt;/th&gt;&lt;td&gt;10.54    &lt;/td&gt;&lt;td&gt;20.37 &lt;/td&gt; &lt;/tr&gt;    &lt;tr&gt; &lt;th&gt;Percent above 90 degrees &lt;/th&gt;&lt;td&gt;15.834     &lt;/td&gt;&lt;td&gt;0.469 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th&gt;Percent below 30 degrees &lt;/th&gt;&lt;td&gt;5.399   &lt;/td&gt;&lt;td&gt;0.014 &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;hr /&gt;  &lt;h3&gt;Advancing front method&lt;/h3&gt; &lt;p&gt;This &lt;a href="http://sparsepundit.blogspot.com/2004/09/advancing-front-method-for-point.html"&gt;algorithm&lt;/a&gt; was much more complex, and as such, I had many more problems. But, in the end, it all worked out. Here are some results.&lt;/p&gt;  &lt;table border="1"&gt;   &lt;tbody&gt;&lt;tr&gt; &lt;th&gt;Atlantic&lt;/th&gt;&lt;th&gt;AFLR2E&lt;/th&gt;&lt;th&gt;Class&lt;/th&gt;&lt;/tr&gt; &lt;tr&gt; &lt;th&gt;Number of Elements&lt;/th&gt;&lt;td&gt;41408&lt;/td&gt;&lt;td&gt;41408&lt;/td&gt; &lt;/tr&gt;     &lt;tr&gt; &lt;th&gt;Max Angle &lt;/th&gt;&lt;td&gt;116.301&lt;/td&gt;&lt;td&gt;116.301&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt; &lt;th&gt;Min Angle &lt;/th&gt;&lt;td&gt;20.37&lt;/td&gt;&lt;td&gt;20.37&lt;/td&gt; &lt;/tr&gt;     &lt;tr&gt; &lt;th&gt;Percent above 90 degrees &lt;/th&gt;&lt;td&gt;0.452&lt;/td&gt;&lt;td&gt;0.452 &lt;/td&gt; &lt;/tr&gt;     &lt;tr&gt; &lt;th&gt;Percent below 30 degrees &lt;/th&gt;&lt;td&gt;0.017&lt;/td&gt;&lt;td&gt;0.017 &lt;/td&gt; &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;p&gt;As you can see, the results for the two are exactly the same. So, I would assume the algorithm is a success.&lt;/p&gt; &lt;p&gt;Also, here is an animated gif of my advancing front algorithm at work in the Gulf of Mexico.&lt;/p&gt;  &lt;hr /&gt;  &lt;h2&gt;Secondary Functions&lt;/h2&gt;  &lt;h3&gt;Area Coordinate Search&lt;/h3&gt;  &lt;p&gt;This &lt;a href="http://sparsepundit.blogspot.com/2002/03/area-coordinate-search.html"&gt;algorithm&lt;/a&gt; was not as difficult as the AF    or the Global Check, but it proved to be a bit of a bear in the beginning.&lt;/p&gt;  &lt;p&gt;This experiment involves using AFLR2E's &lt;i&gt;fadd&lt;/i&gt; and &lt;i&gt;fchk&lt;/i&gt; functions while toggling the &lt;i&gt;srch&lt;/i&gt; function.  &lt;/p&gt;  &lt;table border="1"&gt;    &lt;tbody&gt;&lt;tr&gt; &lt;th&gt;Atlantic  &lt;/th&gt;&lt;th&gt;AFLR2E   &lt;/th&gt;&lt;th&gt;Class &lt;/th&gt; &lt;/tr&gt;    &lt;tr&gt; &lt;th&gt;Number of Elements&lt;/th&gt;&lt;td&gt;41408    &lt;/td&gt;&lt;td&gt;41408 &lt;/td&gt; &lt;/tr&gt;    &lt;tr&gt; &lt;th&gt;Max Angle &lt;/th&gt;&lt;td&gt;116.301  &lt;/td&gt;&lt;td&gt;116.301 &lt;/td&gt; &lt;/tr&gt;    &lt;tr&gt; &lt;th&gt;Min Angle                &lt;/th&gt;&lt;td&gt;20.37    &lt;/td&gt;&lt;td&gt;20.37 &lt;/td&gt; &lt;/tr&gt;    &lt;tr&gt; &lt;th&gt;Percent above 90 degrees &lt;/th&gt;&lt;td&gt;0.452    &lt;/td&gt;&lt;td&gt;0.452 &lt;/td&gt; &lt;/tr&gt;    &lt;tr&gt; &lt;th&gt;Percent below 30 degrees &lt;/th&gt;&lt;td&gt;0.017    &lt;/td&gt;&lt;td&gt;0.017 &lt;/td&gt; &lt;/tr&gt;  &lt;/tbody&gt;&lt;/table&gt;  &lt;hr /&gt;  &lt;h3&gt;Global Candidate Point Check&lt;/h3&gt;  &lt;p&gt;This &lt;a href="http://sparsepundit.blogspot.com/2002/03/global-check-of-candidate-points_22.html"&gt;algorithm&lt;/a&gt; was the oddest in testing.    The differences seen in the AF algorithm below are unexplainable by me. I haven't the foggiest idea why the numbers are different (given how small the difference is).  &lt;/p&gt;  &lt;p&gt;This experiment involves using AFLR2E's &lt;i&gt;fadd&lt;/i&gt; function and the class &lt;i&gt;srch&lt;/i&gt; function (given no difference in performance) while toggling  the &lt;i&gt;fchk&lt;/i&gt; function. &lt;/p&gt;  &lt;table border="1"&gt;   &lt;tbody&gt;&lt;tr&gt; &lt;th&gt;Atlantic &lt;/th&gt;&lt;th&gt;AFLR2E   &lt;/th&gt;&lt;th&gt;Class &lt;/th&gt; &lt;/tr&gt;   &lt;tr&gt; &lt;th&gt;Number of Elements &lt;/th&gt;&lt;td&gt;41408    &lt;/td&gt;&lt;td&gt;41384 &lt;/td&gt; &lt;/tr&gt;   &lt;tr&gt; &lt;th&gt;Max Angle  &lt;/th&gt;&lt;td&gt;116.301  &lt;/td&gt;&lt;td&gt;116.301 &lt;/td&gt; &lt;/tr&gt;   &lt;tr&gt; &lt;th&gt;Min Angle   &lt;/th&gt;&lt;td&gt;20.37    &lt;/td&gt;&lt;td&gt;20.37 &lt;/td&gt; &lt;/tr&gt;   &lt;tr&gt; &lt;th&gt;Percent above 90 degrees &lt;/th&gt;&lt;td&gt;0.452    &lt;/td&gt;&lt;td&gt;0.462 &lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt; &lt;th&gt;Percent below 30 degrees &lt;/th&gt;&lt;td&gt;0.017    &lt;/td&gt;&lt;td&gt;0.014 &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;hr /&gt; &lt;h2&gt;Conclusions&lt;/h2&gt; &lt;p&gt;Regarding the centroid algorithm, I would have to assert from my findings that AFLR2E has a distinctive means of producing a centroid-type grid. From what I know about the algorithm in concept, my code should perform correctly (as it does for the most part). The differences in its results and that of AFRL2E's can only be accounted by a slight difference in approach (possibly a different node factor).&lt;/p&gt; &lt;p&gt; The advancing front algorithm seems to work quite well. Aside from being a (seemingly) robust tool, it also produces satisfying results. Its only down side is the computational cost. I can see that for very large fields, it might be prohibitive.&lt;/p&gt; The two secondary functions were not difficult to produce, but "debugging" them got to be a bear, especially the global candidate point check. As stated above, the differences in AFLR2E's and my fchk functions are beyond my comprehension. &lt;hr /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7904784-109656274279009700?l=sparsepundit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7904784/posts/default/109656274279009700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7904784/posts/default/109656274279009700'/><link rel='alternate' type='text/html' href='http://sparsepundit.blogspot.com/2002/03/studies-in-unstructured-grid.html' title='Studies in Unstructured Grid Generation Using AFLR2E'/><author><name>SparseMatrix</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
