rawanessam's picture
Upload 79 files
e9fe176 verified
import sys
import os
def compute_line_limits(w, rect):
'''For a line defined as ax + by + c = 0, find its two endpoints within the bounding box [x1, y1, x2, y2]'''
# First check the sign of the four points.
a, b, c = w
x1, y1, x2, y2 = rect
ax1 = a * x1
ax2 = a * x2
by1 = b * y1
by2 = b * y2
s11 = ax1 + by1 + c
s12 = ax1 + by2 + c
s21 = ax2 + by1 + c
s22 = ax2 + by2 + c
intersect = []
if s11 * s21 < 0: intersect.append( (-(c+by1) / float(a), y1) )
if s21 * s22 < 0: intersect.append( (x2, -(c+ax2) / float(b)) )
if s12 * s22 < 0: intersect.append( (-(c+by2) / float(a), y2) )
if s11 * s12 < 0: intersect.append( (x1, -(c+ax1) / float(b)) )
if len(intersect) < 2:
if s11 == 0: intersect.append((x1, y1))
if s12 == 0: intersect.append((x1, y2))
if s21 == 0: intersect.append((x2, y1))
if s22 == 0: intersect.append((x2, y2))
return intersect