Исследование систем управления манипулятором MR-999Е

Диссертация - Компьютеры, программирование

Другие диссертации по предмету Компьютеры, программирование

членом.

 

Рисунок 1.5 - Приращения, вносимые элементарными векторами в значение площади, ограниченной контуром [8]

 

Таблица 1.3 - Значение площадей и приращений

Направление вектораПриращение площадиУдвоенное приращение-8Y2Y-7Y-1/22Y-1-600-5(Y-1/2)(-1)-2Y+1-4Y(-1)-2Y-3(Y+1/2)(-1)-2Y-1-200-1Y+1/22Y+1

Рисунок 1.6 - Вычисление площади, ограниченной контуром

Таблица 1.4 - Нахождение суммарной площади

Номер элемента цепочкиЗначение элемента цепочкиУдвоенное приращениеУдвоенная площадь-1-200-2-200-3-200-4-8-8-8-5-1-7-15-6-20-15-7-8-4-19-8-8-4-23-9-8-4-31-10-80-31-11-60-31-12-60-31-13-60-31-14-6+13-31-15-5+15-18-16-5+15-3-17-4+16+13-18-4+16+29-19-3+15+44-20-4+14+58Суммарная площадь = 29

Операций с коэффициентом 1/2 избегают так же, как при вычислении площади, - вычисляя значение 2 ДМХ. Это значение вычисляется удвоенной длины XMOMENT процедурой SUMXMOMENT.

При завершении процедуры EDGETRACE XMOMENT делится на значение AREA2. Округляя результат до ближайшего целого, получаем координату Y центра площади - YCENTROID.

Точно так же, суммируя моменты площади относительно оси у получаем значение XCENTROID. На рис. 1.8 показаны значения, вносимые векторами различных направлений в суммарный момент.

Одна или небольшое число смежных "шумовых" точек, соответствующих, например, случайно попавшему в поле зрения обломку стружки, образуют контуры, состоящие из малого числа элементарных векторов. Подходящим значением для переменной MINCHAIN оказалось -10, т.е. любой замкнутый контур, длина которого не превышает 10 векторов, попросту не рассматривается.

 

Рисунок 1.7 - Моменты первого порядка относительно оси Х [8]

 

Таблица 1.5 - Значение моментов относительно оси Х

Направление вектораПриращение площадиУдвоенное приращение-8Y2/2Y2-7Y2/2- Y/2+1/6Y(Y-1)-600-5-Y2/2+ Y/2-1/6Y(-Y+1)-4-Y2/2Y2-3-Y2/2+ Y/2-1/6Y(-Y+1)-200-1Y2/2- Y/2+1/6Y(Y-1)

Рисунок 1.8 - Моменты первого порядка относительно оси Y [8]

Таблица 1.6 - Значение моментов относительно оси Y

Направление вектораПриращение площадиУдвоенное приращение-800-7X2/2+X/2+1/6X(X+1)-6X2/2X2-5X2/2- X/2+1/6X(X-1)-400-3-X2/2+ X/2-1/6X(-X+1)-2-X2/2-X2-1-X2/2+ X/2-1/6X(-X-1)

Матрица образа после процедуры EDGETRACE. Описанный алгоритм прослеживания границ, обрабатывая дифференцированную матрицу, обнуляет все просмотренные точки, но это не означает, что будут просмотрены и обнулены все точки контура. Оставшиеся в матрице единичные точки обычно не составляют полного контура и при последующих операциях выступают как "шумовые". Для минимизации их влияния должны предприниматься специальные меры. На рис. 1.9 показан вид матрицы образа FRAME после того, как процедура EDGETRACE обработала оба контура. Видны оставшиеся шумовые точки.

Идентификация отверстий - процедура INSIDE. Процедура INSIDE определяет, внутри или снаружи определенного контура лежит некоторая точка, принадлежащая матрице образа FRAME [18].

Предполагается, что контур, выделенный процедурой EDGETRACE, хранится в виде массива CHAIN и переменная CHAINCOUNT определяет его длину. Начальная точка цепочки задается целыми переменными PARTXSTART и PARTYSTART.

 

Рисунок 1.9 - Матрица изображения после прослеживания обоих границ [8]

 

Рисунок 1.10 - К теореме о пересечении прямой и замкнутой линии [8]

 

Координаты проверяемой точки вводятся в переменные STARTX и STARTY и вызывается логическая процедура-функция INSIDE. Она вырабатывает значение "истина", если проверяемая точка лежит внутри контура. При этом никакие значения в памяти не меняются.

Используемый алгоритм основан на следующей справедливой для плоскости теореме: если точка Р, лежащая вне замкнутой кривой S, соединена отрезком прямой с точкой Q, то точка Q тоже лежит вне кривой S тогда и только тогда, когда отрезок PQ пересекает кривую S четное число раз. Если PQ пересекает кривую S нечетное число раз, точка Q лежит внутри замкнутой кривой S (рис. 1.10). Доказательство приводится Курантом и Роббинсом.

В процедуре INSIDE упомянутый отрезок прямой проводится из проверяемой точки до края матрицы FRAME параллельно оси х, т.е. представляет собой часть луча Y = STARTY, X > STARTX. Пара локальных переменных (XCOORD и YCOORD) первоначально устанавливаются равными координатам начала хранимого контура. Из массива CHAIN последовательно считываются элементарные векторы. В зависимости от их значения модифицируются XCOORD и YCOORD (процедура UNCHAIN). Таким образом, XCOORD и YCOORD последовательно принимают значения координат всех точек, прослеженных в исходном контуре [19].

На каждом шаге проверяется, не лежит ли точка контура на луче У = STARTY, х > STARTX. Количество пересечений контура с этим лучом подсчитывается в целой переменной CROSSCOUNT. Множественные пересечения, когда линия контура совпадает с тестовым лучом в нескольких смежных точках, не учитываются. В момент вхождения линии контура в тестовый луч в переменной STRIKEDIRN записывается индекс направления вектора, входящего в луч. Для последующих точек, лежащих на луче, никаких действий не предпринимается. Когда очередной вектор контура выходит из тестового луча, текущее направление сравнивается со значением, записанным в STRIKEDIRN для проверки: был ли пересечен контуром тестовый луч (CROSSCOUNT увеличивается на единицу) или контур прошел касательно к лучу (CROSSCOUNT не меняется).

Когда все точки хранимого контура будут восстановлены, и проверены, проверяется значение CROSSCOUNT и процедура завершается с соответствующим результатом. Неоднозначные предельные случаи, когда проверяемые точки лежат на самом контуре, исключаются, т.к. в процессе прослеживания г?/p>