In graphics/CAD packages, a point can be considered a vector from point 0,0. This is an interpretation that makes sense to me. Adding two points and dividing by two results in a point that is minimally equidistant from both points (I.e. The midpoint of the line formed by the points). In addition, treating points as vectors make a variety of required transformations much easier. Wrapping the two numbers in an object that disallows common transformations, calculations, and combinations seems unnecessary and will result in significantly slower code.
I think the biggest point I am making is that, mathematically, a point is identical to a vector from 0,0. Greg S. > On Jun 21, 2019, at 10:04 PM, Reece R. Pollack <[email protected]> wrote: > > Whoops, hit "send" too soon. "Is a simple array" is obviously incorrect. My > point was the lack of descriptiveness is a problem. The absence of > differentiation between a location and a distance is a missed opportunity. > And the abuse of the type as a loosely-related pair of values should be > considered a bug. > >> On 6/21/19 10:54 PM, Reece R. Pollack wrote: >> A while back, Jeff emailed me a note suggesting that KiCad was trying to >> decouple from the wxWidgets type wxPoint except where needed in the UI code. >> He suggested that I should use VECTOR2I instead. >> >> I understand and support the desire to decouple from wxWidgets. However, >> looking at the implementation of vector2d.h I was surprised to discover that >> VECTOR2I is a simple array of int like I would find in an old Fortran >> program. It's not even a C structure, let alone a well-defined C++ object. >> >> One of the goals of object-oriented programming is to create descriptive >> objects. Programmers can tell what an object represents by looking at the >> name and implementation of the object. Well-crafted object help avoid >> programming errors that could result from performing undefined operations or >> using data from incompatible objects. In geometry, if we subtract the 2d >> location of one point from the 2d location of another point the result is a >> 2d vector describing the distance between these points. However, this vector >> is not a point. In OOP this vector should be a different object than a point. >> >> The wxWidgets objects wxPoint and wxRealPoint are descriptively named, >> though poorly implemented. Aside from where code abuses these, they clearly >> represent locations. Replacing these with non-OOB typedefs such as VECTOR2I >> removes the clarity that a variable is intended to represent a location. The >> name is not descriptive of a location. There is no sanity check to prevent >> performing a nonsensical operation like adding two locations. It tells the >> programmer nothing about whether a variable contains a location, a length, >> or just two loosely-related values. >> >> Rather than replacing wxPoint with VECTOR2I, let us consider how we can make >> our code more object-oriented rather than more Fortran-like. I believe we >> should replace wxPoint and wxRealPoint with KiCad-specific objects. These >> objects should be named such that they clearly indicate that they of >> represent locations rather than a simple array of integer values. They >> should be implemented such that nonsensical operations are prohibited and >> sanity checks put in place where possible. For example, attempting to add >> two locations should result in a compile-time error. Additional objects >> should be defined to represent the delta between two locations, and the >> operations of adding a delta to a location should result in a location. >> >> Just for discussion, let's assume the replacement for wxPoint is named >> KiPoint. The result of subtracting two KiPoint objects would be another >> object called KiDelta. Adding two KiPoint objects should be undefined, and >> result in a compile-time error, as this is a nonsense operation. Adding a >> KiPoint and a KiDelta should return a KiPoint. We should never abuse a >> KiPoint to represent anything else, such as using the X value as the radius >> of a circle as is currently done. I suspect most of the places where this >> would be much more than a mechanical substitution is a place where the code >> abuses the type or is a latent bug. >> >> Doing this now, before we go too far down the path of replacing wxWidgets >> types with non-OOB arrays would enhance readability and make the code more >> robust. Using VECTOR2I is going the wrong way. >> >> -Reece >> >> >> _______________________________________________ >> Mailing list: https://launchpad.net/~kicad-developers >> Post to : [email protected] >> Unsubscribe : https://launchpad.net/~kicad-developers >> More help : https://help.launchpad.net/ListHelp > > _______________________________________________ > Mailing list: https://launchpad.net/~kicad-developers > Post to : [email protected] > Unsubscribe : https://launchpad.net/~kicad-developers > More help : https://help.launchpad.net/ListHelp
_______________________________________________ Mailing list: https://launchpad.net/~kicad-developers Post to : [email protected] Unsubscribe : https://launchpad.net/~kicad-developers More help : https://help.launchpad.net/ListHelp

