def intersect_lines(p1, p2, p3, p4):
    """
    Calculates intersection point between two lines defined as (p1, p2)
    and (p3, p4).
    
    Args:
        p1: (float, float)
            Point 1 as (x, y) coordinates.
        
        p2: (float, float)
            Point 2 as (x, y) coordinates.
        
        p3: (float, float)
            Point 3 as (x, y) coordinates.
        
        p4: (float, float)
            Point 4 as (x, y) coordinates.
    
    Returns:
        (float, float) or None
            Coordinates of the intersection point. Returns None if
            there is no intersection.
    """
    
    a_dx = p2[0] - p1[0]
    a_dy = p1[1] - p2[1]
    a_sq = p2[0]*p1[1] - p1[0]*p2[1]
    
    b_dx = p4[0] - p3[0]
    b_dy = p3[1] - p4[1]
    b_sq = p4[0]*p3[1] - p3[0]*p4[1]
    
    d = a_dy * b_dx - a_dx * b_dy
    dx = a_sq * b_dx - a_dx * b_sq
    dy = a_dy * b_sq - a_sq * b_dy
    
    if d == 0:
        return None
    
    return dx/d, dy/d