Hi Paul, You make an excellent point (no pun intended!), this is correct and I made the mistake of not considering points vs vectors here. Would it be suitable then just to assume those using 4D vectors are aware of the pitfalls/issues?
Thanks, Andrew On Wed, Dec 7, 2011 at 9:03 PM, Paul Melis <[email protected]> wrote: > Hi Andrew, > > On 12/02/2011 12:47 PM, Andrew Hale wrote: > > I've written a proposal to change the current handling of transfomations > of > > vectors and remove the use cases for 4D vectors. The proposal can be > found > > here: > > > http://wiki.blender.org/index.php/User:TrumanBlending#Proposal:_Four_Dimensional_Mathutils_Vectors > > A few comments on your proposal: > > (x1, y1, z1, 1) + (x2, y2, z2, 1) = (x1+x2, y1+y2, z1+z2, 2) > > This addition doesn't make much sense. You're adding two 3D points here, > i.e. 3D coordinates, for which there is no sensable geometric > interpretation. Addition of two 3D *vectors*, i.e. 3D directions, does > make sense, but in that case the w component should be 0. E.g. > > (x1, y1, z1, 0) + (x2, y2, z2, 0) = (x1+x2, y1+y2, z1+z2, 0) > > The value of w is also the major difference between representations of > points and vectors in homogenous coordinates. When sticking to w=0 for > vectors and w=1 for points things like subtraction actually make sense: > > (4, 4, 4, 1) - (1, 1, 1, 1) = (3, 3, 3, 0) > > That is, subtracting two 3D points results in a vector that points from > the second point to the first. Subtraction of vectors also just works: > > (0, 1, 0, 0) - (1, 0, 0, 0) = (-1, 1, 0, 0) > > Adding a vector to a point gets you a new point: > > (1, 2, 3, 1) + (4, 4, 4, 0) = (5, 6, 7, 1) > > The point being that in these cases you don't need to explicitly worry > about the w component, as for the sensible operations the results are > correct. It's only with applying transformation matrices that you need > to normalize the result by dividing by the w-component of the result > (but only if it is non-zero). > > > In general I would say, just like Stephen Swaney did somewhere in this > thread, that there's two kinds of users: > > 1. The first type of user doesn't need/want to know about the underlying > complexities of 3D math. He/she just wants to do simple manual > transformations on 3D geometry. The easiest interface would be to > provide methods in the Matrix class for transforming points, vectors and > normals specified as 3-tuples (e.g. transformPoint(Vector3), > transformVector(Vector3), transformNormal(Vector3)). These methods can > then hide the underlying assumptions about the value of the w component > and the different method needed for transforming vectors versus normals. > The results from these methods would be 3-tuples as well. By using > multiplication of transformation matrices you can simply compose > transformations from separate steps. I think that's about all the > operations this group of users wants to do (but correct me if I'm wrong). > > 2. The second type of user knowns his 3D math and just wants to work > with general 4x4 transformation matrices and the operations on length-4 > tuples. They will worry themselves about homogenous coordinates and > such. These users also know that v*M and M*v produce different results > and ignore the fact that v plays the role of column-vector versus > row-vector here, etc. > > I consider myself to be in the second category and completely removing > vectors with homogenous coordinates from the Blender API makes me > nervous. I don't think the two types of usage conflict, it's more about > providing different APIs for accomplishing the same thing and educating > users in the first category what methods to use, providing good example > scripts, etc. > > Just my 2 euro-cents, > Paul > > > > > _______________________________________________ > Bf-committers mailing list > [email protected] > http://lists.blender.org/mailman/listinfo/bf-committers > _______________________________________________ Bf-committers mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-committers
