Next / Previous / Contents / Shipman's homepage

14.4. Line.twoPoint(): Define a line through two points

homcoord.py
# - - -   L i n e . t w o P o i n t

    @staticmethod
    def twoPoint(p1, p2):
        '''Find the equation of a line between two points.
        '''

The first order of business is to eliminate the case where the points coincide; see Section 7.12, “Pt.__cmp__(): Compare two points”.

homcoord.py
        #-- 1 --
        # [ if p1 and p2 coincide ->
        #     raise ValueError
        #   else ->
        #     x1  :=  abscissa of p1
        #     y1  :=  ordinate of p1
        #     x2  :=  abscissa of p2
        #     y2  :=  ordinate of p2 ]
        if p1 == p2:
            raise ValueError("Points are not distinct.")
        else:
            x1, y1 = p1.xy()
            x2, y2 = p2.xy()

Here is the formula for a line through two points:

Notice that for vertical lines x2 = x1, which would require dividing by zero. In this case, a vertical line through x1 has the equation x = x1, which in standard form would be:

If the line is not vertical, we calculate the slope m.

homcoord.py
        #-- 2 --
        # [ if x1 == x2 ->
        #     return a vertical line through x1
        #   else ->
        #     m  :=  (y2-y1)/(x2-x1) ]
        if x1 == x2:
            return Line(1.0, 0.0, -x1)
        else:
            m = (y2-y1)/(x2-x1)

After substituting m in the two-point formula, we rearrange the terms into the standard form ax + by + c = 0.

homcoord.py
        #-- 4 --
        # [ return a new Line instance having a=(-m), b=1, and
        #   c=(m*x1-y1) ]
        return Line(-m, 1.0, (m*x1-y1))