continue:
//try next Q

// проверяем следующую грань Q

// Р might obscure this Q: see if Q is marked or behind P // грань P может заслонять эту Q: смотрим, маркирована ли Q. // или находится ли она позади Р

1f (Q 1s marked) // Q маркирована {

split Q by plane of P: II разбиваем грань Q плоскостью грани P

mark and insert pieces of Q; II маркируем куски грани Q и заносим их в список

hopeful - 0:
}
else if(Q on opposite side of P's plane ||

P on same side as Q's plane) // грань Q на противоположной стороне плоскости грани Р

13.3. HSR-методы со списками приоритетов

// грань Р на той же стороне, что и плоскость грани Q {

mark Q. pur Q at end of list: II маркируем грань Q. помещаем ее в конец списка hopeful - 0:

}
else

// can't tell: They overlap too much // невозможно ничего сказать: грани перекрываются // слишком сильно {

sp7;'£ Q by plane of P: II разбиваем грань Q плоскостью грани Р

mark and insert pieces of Q; II маркируем куски грани Q и заносим их в список

hopeful - 0:
}
}

// end.. for each Q.. // конец цикла для каждой грани Q if(hopeful)

drawAndRemove(P);
}
// end of for each P

// конец цикла для каждой грани Р

}

Псевдокод этого алгоритма приведен в листинге 13.3, что помогает прояснить поток используемых тестов. Флаг hopeful остается равным 1 до тех пор, пока мы можем надеяться, что текущая грань Р не будет заслонять какую-либо из тех граней Q, с которыми она почти совпадает по г. Эта ситуация для нас желательна, поскольку в этом случае грань Р можно нарисовать и более ее не рассматривать. Если же эта надежда рухнула, что может случиться в силу множества причин, то другие грани Q уже не тестируются, а данная грань или разбивается, или помещается в конец списка.

Рассмотрим группу тестов, используемых для проверки того, может ли грань Р заслонять грань Q. Эти тесты выполняются в порядке возрастания их сложности (времени обработки); и когда любой из них выполнен успешно, то становится точно известным, что грань Р не заслоняет грань Q. Вот эти тесты.

1. Пересекаются ли х-экстенты граней Р и Q (быстрый тест)?


⇐ Предыдущая| |Следующая ⇒