2线设计的交叉功能

时间:2016-09-29 12:48:46

标签: c++ oop linear-algebra

我有类Line,代表二维线。它具有检查2d点是否位于此行的功能。

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

现在我必须检查找到两条线的交叉点。我想知道将新成员函数放在类Line中是否更好(如

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

或使用非会员功能

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

1 个答案:

答案 0 :(得分:2)

虽然在很大程度上这是一个偏好问题,但由于对称性,静态或非成员函数方法稍微更优选。

两次通话时

a.someFunction(b)

b.someFunction(a)

总是返回相同的结果,一个对称函数

someFunction(a, b)

更直观。

请注意,由于交叉点可能不存在(对于平行线)或者具有无限数量的点(对于两条相同的线),因此返回Point并不理想。你最好返回一对Point及其有效性的一些指标,例如

enum LineIntersectionKind {
    Valid
,   Empty
,   Infinite
};

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