Уведомления

Группа в Telegram: @pythonsu

#1 Март 28, 2014 20:21:29

Wolko_dav
От: Ярославль
Зарегистрирован: 2014-02-12
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Алгоритм разбиения средней точкой

Всем привет. Ткните носом в ошибку… Вообщем алгоритм отсечения от отрезка, при отображение в прямоугольнике.
Вот код:

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)
Народ, пожалуйста, ткните носом в ошибку в коде… Не вижу в упор. Могу дать ссылку на алгоритм.

Офлайн

#2 Март 28, 2014 20:49:10

Wolko_dav
От: Ярославль
Зарегистрирован: 2014-02-12
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Алгоритм разбиения средней точкой

Народ, если чего докинуть, напишите, скину.

Офлайн

#3 Март 28, 2014 21:08:48

Singularitty
От:
Зарегистрирован: 2012-02-02
Сообщения: 61
Репутация: +  5  -
Профиль   Отправить e-mail  

Алгоритм разбиения средней точкой

нет спасибо

  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)

Офлайн

#4 Март 28, 2014 21:12:00

Wolko_dav
От: Ярославль
Зарегистрирован: 2014-02-12
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Алгоритм разбиения средней точкой

Singularitty, это было для отладки сделано… print можно убрать.

Офлайн

#5 Март 28, 2014 23:30:22

Wolko_dav
От: Ярославль
Зарегистрирован: 2014-02-12
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Алгоритм разбиения средней точкой

Ау?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version