
Arash Partow wrote:
Bruno Lalande wrote:
Indeed, things have to be clear on that point, and I'm a bit confused about what really constitutes the concept of a point. What I have understood until now is that a class is the point if it exposes: * the value<>() getter and setter * coordinate_type * coordinate_count
This is somewhat correct but might be an over-engineering of things to the point where it may be unuseable to a group of potential users (people that have large data sets that need things done efficiently).
I have 10^9 x,y values as doubles give me the convex hull - can you imagine in the overhead if each of those pairs were to be converted to a point_concept/class/instance?
There's not any overhead. Back in 2002, inspired by Blitz++ I wrote a template class that is entirely conceptual. The vector doesn't store any data, it merely defines a conceptual vector of N dimensions to the outside world and a an interface to get & set those elements to the subclasses that define storage layouts. In the case of vectors that just a simple array of numbers, the code was just as optimal as if I'd hand-coded the arithmetic operators (+, -, dot product, cross product) inside a concrete class. Instead, the algorithms were written for the abstract class. To give an example of optimization, please examine the following code: Matrix<float, 3, 3> m1, m2, m3; m1 = 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f; m2 = 3.0f, 5.0f, 2.0f, 7.0f, 1.0f, 3.0f, 9.0f, 6.0f, 4.0f; m3 = m1 + m2; If you look at how the comma-delimited assignment works, there is a 9-level recursively defined set of template class instances. The above code has two of those. Then there's the addition. MSVC6 would optimize that down to simply copying the 9 float values into m3 directly. There is no inherent penalty for programming to abstractions, at least in release mode. There is the possibility of expressivity and optimization.
Actually most algorithm implementations I've seen use index operators thats possibly because the underlying point types were always nD structures so it makes it easy to do something like the following:
This is what I'm used to also. I have toyed with using enums to tailor access to simulate domains. In game engines, you could have geometry vectors & points accessed using X, Y, & Z whereas you could have texture coordinates accessed with S, T and whatnot. -- Noah No virus found in this outgoing message. Checked by AVG. Version: 7.5.519 / Virus Database: 269.22.1/1346 - Release Date: 3/27/2008 10:03 AM