Рассмотрим отрезок, конечные точки которого имеют характеристические коды о, = outcode(xb>^i) и о2 = outcode(Ar2, у2). Возможны четыре варианта сочетания характеристических кодов двух конечных точек (рис. 7.7).

1. (о\ = о2 = 0) Обе конечные точки лежат внутри рамки отсечения - этот случай представлен отрезком АВ на рис. 7.7. Весь отрезок при этом также находится внутри рамки отсечения и может быть передан дальше для выполнения растрового преобразования.

2. (о} * 0, о2 = О или наоборот.) Одна точка находится внутри рамки отсечения, а вторая - вне ее (отрезок CD на рис. 7.7). В этом случае отрезок необходимо разделить. Отличный от нуля характеристический код указывает, в какой внешней области находится одна из конечных точек и какая именно граница (или границы) рамки пересекается отрезком. В этом случае необходимо вычислить одну или в худшем варианте две точки пересечения отрезка с границами рамки. Обращаю ваше внимание на то, что после вычисления первой точки пересечения (например, с горизонтальной границей) можно сформировать ее характеристический код и выяснить, требуется ли определять вторую точку пересечения (на этот раз с вертикальной границей).

3. (с»! & о2 * 0.) По результату побитовой операции AND над характеристическими кодами крайних точек можно выяснить, лежат ли они по одну сторону от границы рамки или по разные. Если результат отличен от нуля, то конечные точки лежат по одну сторону от какой-либо границы, а значит, весь отрезок лежит вне рамки отсечения и его можно спокойно отбросить (отрезок EF на рис. 7.7).

4. (о, & о2 = 0.) Обе конечные точки лежат вне рамки отсечения, но по разные стороны от двух ее границ. Этот вариант представлен отрезками GH и IJ на рис. 7.7, и мы не можем с уверенностью сказать, пересекает отрезок зону видимости или нет. Требуется более тщательный анализ - нужно вычислить точку пересечения с одной из границ рамки и проанализировать характеристические коды крайних точек двух новых отрезков.

Для анализа характеристических кодов достаточно только булевых побитовых операций над двоичными числами, которые выполняются очень быстро. Вычисление точек пересечения выполняется чрезвычайно редко и только там, где без этой информации не обойтись, - во втором и четвертом вариантах сочетаний характеристических кодов.


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