Vladimir Yanakiev
Vladimir Yanakiev

Reputation: 1300

function for intersection of 2 lines design

I have class Line, which represent 2 dimensional line. It has function for checking if 2d point lie on this line.

class Line
{
    private:
       float a,b,c: //line coefficients
    public:
    bool checkPointOnLine();
    .....
}

now I have to check find point of intersectionof 2 lines. I'm wondering if it is better to put new member function in class Line like

class Line
{
    private:
       float a,b,c: //line coefficients
    public:
    bool checkPointOnLine();
    Point getIntersectionPoint(const  Line& line);
    .....
}

or to use non member function

Point getIntersectionPoint(const Line& l1,const Line& l2);

Upvotes: 1

Views: 84

Answers (1)

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726849

Although to a large measure this is a matter of preference, a static or non-member function approach is slightly more preferable because of symmetry.

When two calls

a.someFunction(b)

and

b.someFunction(a)

always return the same result, a symmetric function

someFunction(a, b)

is more intuitive.

Note that since an intersection may not exist (for parallel lines) or have an infinite number of points (for two identical lines) returning a Point is not ideal. You would be better off returning a pair of Point and some indicator of its validity, for example

enum LineIntersectionKind {
    Valid
,   Empty
,   Infinite
};

pair<Point,LineIntersectionKind> getIntersectionPoint(const Line& l1,const Line& l2);

Upvotes: 2

Related Questions