Unformatted text preview:

A question about polygonsProblem backgroundAlternative geometry?A simpler problemTriangle algorithmThe algorithm ideaCartesian AnalogyDeterminant function: 2x2Constructing a regular hexagonSubdividing the hexagonSame approach for n-gonsExtension to a tetrahedronCramer’s Rule in 3DIs point in tetrahedron?Details of Cramer RuleConvex polyhedronA question about polygonsDevising a computational method for determining if a point lies in a plane convex polygonProblem background•Recall our ‘globe.cpp’ ray-tracing demo•It depicted a scene showing two objects•One of the objects was a square tabletop•Its edges ran parallel to x- and z-axes•That fact made it easy to determine if the spot where a ray hit the tabletop fell inside or outside of the square’s boundary edges •We were lucky!Alternative geometry?•What if we wanted to depict our globe as resting on a tabletop that wasn’t a nicely aligned square? For example, could we show a tabletop that was a hexagon? •The only change is that the edges of this six-sided tabletop can’t all be lined up with the coordinate system axes•We need a new approach to determining if a ray hits a spot that’s on our tabletopA simpler problem•How can we tell if a point lies in a triangle?abcpqPoint p lies inside triangle Δabc Point q lies outside triangle ΔabcTriangle algorithm•Draw vectors from a to b and from a to c•We can regard these vectors as the axes for a “skewed” coordinate system•Then every point in the triangle’s plane would have a unique pair of coordinates•We can compute those coordinates using Cramer’s Rule (from linear algebra)The algorithm ideaabcpap = c1*ab + c2*acc1 = det( ap, ac )/det( ab, ac )c2 = det( ab, ap )/det( ab, ac )Cartesian Analogyp = (c1,c2)x-axisy-axisx + y = 1p lies outside the triangle if c1 < 0 or c2 < 0 or c1+c2 > 1Determinant function: 2x2typedef float scalar_t;typedef struct { scalar_t x, y; } vector_t;scalar_t det( vector_t a, vector_t b ){return a.x * b.y – b.x * a.y;}Constructing a regular hexagon( cos(0*theta), sin(0*theta) )( cos(1*theta), sin(1*theta) )( cos(2*theta), sin(2*theta) )( cos(3*theta), sin(3*theta) )( cos(4*theta), sin(4*theta) )( cos(5*theta), sin(5*theta) )theta = 2*PI / 6Subdividing the hexagonA point p lies out side the hexagon -- unless it lies inside one of these four sub-trianglesSame approach for n-gons•Demo program ‘hexagon.cpp’ illustrates the use of our just-described algorithm•Every convex polygon can be subdivided into triangles, so the same ideas can be applied to any regular n-sided polygon •Exercise: modify the demo-program so it draws an octagon, a pentagon, a septagonExtension to a tetrahedron•A tetrahedron is a 3D analog of a triangle•It has 4 vertices, located in space (but not all vertices can lie in the same plane)•Each face of a tetrahedron is a triangleoabcCramer’s Rule in 3Dtypedef float scalar_t;typedef struct { scalar_t x, y, z; } vector_t;scalar_t det( vector_t a, vector_t b, vector_t c ){scalar_t sum = 0.0;sum += a.x * b.y * c.z – a.x * b.z * c.y;sum += a.y * b.z * c.x – a.y * b.x * c.z;sum += a.z * b.x * c.y – a.z * b.y * c.x;return sum;}Is point in tetrahedron?•Let o, a, b, c be vertices of a tetrahedron•Form the three vectors oa, ob, oc and regard them as the coordinate axes in a “skewed” 3D coordinate system•Then any point p in space has a unique triple of coordinates:op = c1*oa + c2*ob + c3*oc•These three coordinates can be computed using Cramer’s RuleDetails of Cramer Rulec1 = det( op, ob, oc )/det( oa, ob, oc )c2 = det( oa, op, oc )/det( oa, ob, oc )c3 = det( oa, ob, op )/det( oa, ob, oc )Point p lies inside the tetrahedron – unlessc1 < 0 or c2 < 0 or c3 < 0 or c1 + c2 + c3 > 1Convex polyhedron •Just as a convex polygon can be divided into subtriangles, any convex polyhedron can be divided into several tetrahedrons •We can tell if a point lies in the polyhedron by testing to see it lies in one of the solid’s tetrahedral parts •An example: the regular dodecahedron can be raytraced by using these


View Full Document

USF CS 686 - Lecture Notes

Documents in this Course
Load more
Download Lecture Notes
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Lecture Notes and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Lecture Notes 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?