
Dean Michael Berris wrote: <snip>
No, I meant "it" being the tutorial. I get that the geometry library is supposed to be generic but it doesn't seem so generic when (forgive me for pointing out) you and the company you work with is in the chip design/manufacturing business offer a tutorial which best fits that specific use case. ;)
<snip>
Okay, so this is only for integer-coordinate based polygons... But there are a lot of algorithms that fall under the field of geometry like area, perimeter, center of gravity, etc. that can be used to illustrate the power of the library, right? I primarily would like to get a better idea of these algorithms that are available and usable "right away" with minimum effort. The tutorial I read didn't do that because, well, I think the area you chose to demonstrate the library is a little... well... contrived. ;)
<snip>
Oh, okay. I think there is a disconnect between what your intention is and what is actually in the tutorial. I think I'm just missing a lot of context to better understand how to really use the library. The example in the tutorial was just too complex (necessarily so I think to demonstrate the power of the library) but I'm missing the simple utilities that I want to be able to use as a normal non-chip-designing C++ developer having to deal with simple polygon problems.
Would a tutorial like that be at all possible to write?
<snip>
How about the simple problems like finding out whether two lines intersect, the resulting area of the union of two or more polygons, or maybe the convex hull problem? Those would really be interesting problems to illustrate solving using your library and would generally be more suitable to demo how to use and leverage the data structures and algorithms in the library.
Did you read the example code named polygon usage https://svn.boost.org/svn/boost/sandbox/gtl/doc/gtl_polygon_usage.htm and polygon set usage https://svn.boost.org/svn/boost/sandbox/gtl/doc/gtl_polygon_set_usage.htm? //now lets see what we can do with this polygon assert(gtl::area(poly) == 100.0f); assert(gtl::contains(poly, gtl::construct<Point>(5, 5))); assert(!gtl::contains(poly, gtl::construct<Point>(15, 5))); gtl::rectangle_data<int> rect; assert(gtl::extents(rect, poly)); //get bounding box of poly assert(gtl::equivalence(rect, poly)); //hey, that's slick assert(gtl::winding(poly) == gtl::COUNTERCLOCKWISE); assert(gtl::perimeter(poly) == 40.0f); //add 5 to all coords of poly gtl::convolve(poly, gtl::construct<Point>(5, 5)); //multiply all coords of poly by 2 gtl::scale_up(poly, 2); gtl::set_points(rect, gtl::point_data<int>(10, 10), gtl::point_data<int>(30, 30)); assert(gtl::equivalence(poly, rect)); Here I show how to get the area of a polygon, the winding orientation of a polygon, the perimeter of a polygon, check if a polygon contains a point, get the bounding box (envelope) of a polygon, translate a polygon by convolving it with a point and scale a polygon. //now lets do something interesting PolygonSet ps2; ps2 += rectangle_data<int>(5, 5, 15, 15); PolygonSet ps3; assign(ps3, ps * ps2); //woah, I just felt the room flex around me PolygonSet ps4; ps4 += ps + ps2; //assert that area of result is equal to sum of areas //of input geometry minus the area of overlap between inputs assert(area(ps4) == area(ps) + area(ps2) - area(ps3)); Here I am getting the resulting area of the union of two or more polygons.... Convex hull would be a feature I could add to the library, and I could certainly write a document describing how I implemented it, however I don't plan on implementing it and would refer people to the boost.geometry implementation of that algorithm. Since it is clear that people would prefer a simpler tutorial with no domain specific slant I'll write an additional tutorial demonstrating some different features of the library. Thanks for taking the time to look at the tutorial, Luke