Whenever you are dealing with intersections you are dealing with tolerances. And when you deal with tolerances things get tricky. It is not unusual for a ray very close to an edge to indicate a hit when arriving from one direction, and indicate a miss when arriving from another, despite the fact that they pass through the same point closest to the edge. This is why commercial geometric modelers typically have additional logic to bring topological information to bear on problems like this. In your case for example, you could enforce two hits (assuming that you are working with 3D cells), or just one hit in the cases where it hits an edge or vertex.<br>
<br>The code in VTK handles near misses through a tolerancing mechanism. Since it is not a geometric modeler, it is not as thorough as it could be. Of course, there is always the possibility that there is a bug, and its not as complex as I am making it out to be.<br>
<br>In situations like this it's a good idea to construct more robust, fault tolerant algorithms. Anticipating failure due to precision issues in geometric computation is generally very desireable, and yields better results. For example, rather than intersecting, you could try sampling a sequence of points along the line, and then logicially build all the cells along the line using a combination of geometric and tolopological relationships.<br>
<br>W<br><br><br><br><div class="gmail_quote">On Wed, Jul 2, 2008 at 6:03 AM, Kaushik . <<a href="mailto:shekhar.kaushik@gmail.com">shekhar.kaushik@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<span>    </span><br><br><div class="gmail_quote"><div class="Ih2E3d">On Wed, Jul 2, 2008 at 3:01 PM, Will Schroeder <<a href="mailto:will.schroeder@kitware.com" target="_blank">will.schroeder@kitware.com</a>> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div>"From these faces I choose the one that is nearer to the<br>
end point of the ray and the next cell to search is the cell adjacent to the chosen face."<br><br></div>What does it mean to have a face nearer to an end point? How are you determining this? This is not as straight frward as it sounds and could be an issue.</blockquote>


</div><div><br>I find the intersection point of each face with the line segment ( representing the viewing ray in world coordinates ).<br>From those faces that intersect the line , i choose the one whose intersection point is closest to the farther point of the <br>


viewing ray. And I need only those cells that intersect the viewing ray . Only these cell will contribute to the color value<br>at the corresponding pixel.<br><br>I find some peculiar outputs from the intersection calculations. When I find the intersections with the faces of a cell, I get <br>


cases where the line intersects only one face. This does not make sense as I have confirmed the ray for sure does not end within the cell<br><br>Upon looking into the code (vtkQuad.cxx) , I found that the intersection is done by splitting the quad along one of the <br>

diagonal into two triangles. What happens when the line passes exactly through the diagonal of the quad ? Does the <br>triangle intersection handle this ?<br> <br>shekhar<br><br></div><div><div></div><div class="Wj3C7c">
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<br>
<br>W<br><br><div class="gmail_quote">2008/7/1 Kaushik . <<a href="mailto:shekhar.kaushik@gmail.com" target="_blank">shekhar.kaushik@gmail.com</a>>:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">


<div><div></div><div>
Hi<br><br>I am trying to implement the following algorithm and I am stuck. I need to cast rays<br>from each pixel into a dataset. Along each ray , I need to find the first cell that satisfies<br>some characteristics. I go about implementing it as follows :<br>




Using the vtkCellLocator::IntersectWithLine() , i find the first cell the ray intersects in the dataset.<br>If this cell satisfies the conditions , we exit. <br>else we continue searching cells along the ray until one such cell is found , or until we eventually reach <br>




the boundary of the dataset.<br>Now this searching cell along a ray is causing me trouble. Given the first cell that the ray intersected,<br>I find the faces of the cell that the ray intersects. From these faces I choose the one that is nearer to the<br>




end point of the ray and the next cell to search is the cell adjacent to the chosen face.<br>The algorithm seems to be correct logically atleast.<br><br>The vtkCell::IntersectWithLine() functions however seem to be giving inconsistent results ! Are there<br>




any known issues with these functions ? Please advise.<br><br>Also can you please comment on the algorithm above ? Is there any other way( better ? ) to do the same ?<br><font color="#888888"> <br>--<br>shekhar
</font><br></div></div>_______________________________________________<br>
vtk-developers mailing list<br>
<a href="mailto:vtk-developers@vtk.org" target="_blank">vtk-developers@vtk.org</a><br>
<a href="http://www.vtk.org/mailman/listinfo/vtk-developers" target="_blank">http://www.vtk.org/mailman/listinfo/vtk-developers</a><br>
<br></blockquote></div><font color="#888888"><br><br clear="all"><br>-- <br>William J. Schroeder, PhD<br>Kitware, Inc.<br>28 Corporate Drive<br>Clifton Park, NY 12065<br><a href="mailto:will.schroeder@kitware.com" target="_blank">will.schroeder@kitware.com</a><br>



<a href="http://www.kitware.com" target="_blank">http://www.kitware.com</a><br>518-371-3971 (phone and fax)
</font></blockquote></div></div></div><br><br clear="all"><br>
</blockquote></div><br><br clear="all"><br>-- <br>William J. Schroeder, PhD<br>Kitware, Inc.<br>28 Corporate Drive<br>Clifton Park, NY 12065<br><a href="mailto:will.schroeder@kitware.com">will.schroeder@kitware.com</a><br>
<a href="http://www.kitware.com">http://www.kitware.com</a><br>518-371-3971 (phone and fax)