Ненулевое правило

В двумерной компьютерной графике правило ненулевой обмотки — это средство определения того, попадает ли данная точка в замкнутую кривую. В отличие от аналогичного правила чет-нечет , оно основано на знании направления штриха для каждой части кривой.
Для данной кривой C и данной точки P: построить луч (прямую линию), исходящий из P в любом направлении к бесконечности. Найдите все пересечения C с этим лучом. Подсчитайте число витков следующим образом: за каждое пересечение по часовой стрелке (кривая, проходящая через луч слева направо, если смотреть со стороны Р) вычтите 1; для каждого пересечения против часовой стрелки (кривая, проходящая справа налево, если смотреть со стороны P) прибавляйте 1. Если общее число витков равно нулю, P находится вне C; в противном случае оно находится внутри.
Число витков фактически является подсчетом того, сколько полных оборотов против часовой стрелки («витков») кривая делает вокруг P без повторного удвоения. (Если бы P был гвоздем, а C — петлей из веревки, попробуйте оттянуть некоторую часть веревки вбок от гвоздя: она либо высвободится, либо окажется, что она несколько раз обмотана вокруг гвоздя. )
В некоторых реализациях вместо этого подсчитывается количество оборотов по часовой стрелке, так что пересечения по часовой стрелке получают +1, а пересечения против часовой стрелки - -1. Результат тот же.
Одно формальное определение числа витков точки P относительно кривой C (где P не лежит на кривой) выглядит следующим образом:
Рассмотрим точку Q, которая проходит один раз вокруг C. Конечная точка вектора от P до Q после нормализации движется по единичной окружности с центром в P. Если мы представим путь этой конечной точки как резиновую ленту и позволим ленте сжиматься , в конечном итоге он будет обернут вокруг круга несколько раз. Число намоток — это количество витков (для витков по часовой стрелке число намоток отрицательное). [1]
Стандарт векторной компьютерной графики SVG по умолчанию использует ненулевое правило при рисовании многоугольников. [2]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Джеймс Д. Фоли, Андрис Ван Дам, Стивен К. Фейнер и Джон Ф. Хьюз (1996) Компьютерная графика: принципы и практика , с. 965. Аддисон-Уэсли. ISBN 9780201848403
- ^ [1] , w3c.org, получено 28 марта 2019 г.