As you may know, vectors define a multitude of
operations. Three of these operations are commonly used as a basis to
overload the multiplication operator in C++; component-wise
multiplication, cross product, and dot product. However, there seems
to be no actual consensus regarding what operation to overload the
operator with. Most often, the multiplication operator is overloaded
to mean dot product. However, some people prefer to overload it to
mean the cross product, which is a completely separate concept.
Some, myself included, always preferred to define
the multiplication operator as a component-wise multiplication as
there is too much confusion regarding whether the operator meant
cross or dot product, and we 'bypass' the problem by simply not
having the operator defined as either. For those operations it would
be better to explicitly call functions named after what they do to so
as to eliminate any confusion. However, overloading the
multiplication operator to mean component-wise multiplication is also
more in line with vector subtraction and addition, and becomes very
useful for various forms of interpolation, not to mention its
usefulness with regards to color arithmetic.
However, a few months ago Jonathan Blow tweeted a
simple insight that struck me as profound.
@paniq @keefjudge @id_aa_carmack Everyone overloads operator *(vec, vec) differently, which is a good reason not to overload it at all.
— Jonathan Blow (@Jonathan_Blow) March 12, 2013
Actually, he is completely right. Avoid all
confusion by simply not overloading the multiplication operator at
all. While I am sad to
say that I still implement my vector multiplication as a
component-wise multiplication I still feel that the point being made
has affected me in other ways where if there is a risk of confusion
in anything I do, I try to rethink the situation instead of
perpetuating the problem.
No comments:
Post a Comment