Skip to content

DivisionByZero em find_intersection_points

no arquivo geocomp/gui/tk.py, função find_intersection_points, há um bug:

def find_intersection_points(x0, y0, x1, y1):
	"""retorna os dois pontos que a reta passando pelos pontos dos argumentos 
	intersecta com as bordas do canvas
	"""
	
	print(x0, x1, x0 == x1)
	if x0 == x1: 
		return float (canvas.r2cx(x0)), 0, float (canvas.r2cx(x1)), float (canvas['height'])
	if y0 == y1:
		return 0, float (canvas.r2cy(y0)), float (canvas['width']), float (canvas.r2cy(y1))

	x0 = float (canvas.r2cx(x0))
	y0 = float (canvas.r2cy(y0))
	x1 = float (canvas.r2cx(x1))
	y1 = float (canvas.r2cy(y1))

	print(x0, x1, x0 == x1)

	dy, dx = (y1 - y0), (x1 - x0)

	alpha = (x[0] - x0) / dx

Adicionei os prints para deixar o problema mais visível.

O problema é que, ao rodar com números grandes e próximos, como por exemplo:

x0 = 9807.0
x1 = 9806.8
y0 e y1 quaisquer

x0 é diferente de x1, entretando após passar os dois na função canvas.r2cx(), os dois retornam com o mesmo valor de 537.0. Logo, dx = 0 e alpha realizará uma divisão por zero.

Daqui a pouco criarei uma MR que realiza essa correção.