Форум сайта python.su
0
Всем привет. Ткните носом в ошибку… Вообщем алгоритм отсечения от отрезка, при отображение в прямоугольнике.
Вот код:
LEFT = 1 RIGHT = 2 BOT = 4 TOP = 8 def vcode(rect, p): value = 0 if p.x < rect.x_min: value += LEFT if p.x > rect.x_max: value += RIGHT if p.y < rect.y_min: value += BOT if p.y > rect.y_max: value += TOP return value def average_point(rect, p1, p2, count=0): code_a = vcode(rect, p1) code_b = vcode(rect, p2) if math.sqrt((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y)) < EPS: return if not (code_a | code_b): return p1, p2, count if code_a & code_b: return print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' average_point(rect, p1, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0)) print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' average_point(rect, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0), p2)
Офлайн
0
Народ, если чего докинуть, напишите, скину.
Офлайн
5
нет спасибо
p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' ' print p1.x, p1.y, ' ', p2.x, p2.y, ' ', Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).x, Point((p1.x + p2.x)/2.0, (p1.y + p2.y)/2.0).y, ' '
Отредактировано Singularitty (Март 28, 2014 21:10:03)
Офлайн
0
Singularitty, это было для отладки сделано… print можно убрать.
Офлайн
0
Ау?
Офлайн