Появилась задача определения местоположения цилиндрического объекта. Объект в плане может отличаться от круга, а представлять собой фигуру неправильной формы. Если в безотражательном режиме с нескольких точек произвести съемку этого объекта по одному из ярусов, то получится набор точек (25-30 штук). Какими средствами можно наиболее быстро построить окружность, наиболее близкую к полученным точкам?
Вопрос не праздный. Полагаю, Вы знаете, что окружность задается минимум тремя точками? Самый простой и тяжелый способ - построить десяток окружностей по разным сочетаниям точек в AutoCAD, MAPINFO, КРЕДО (что у Вас?), по ним на глаз провести как бы среднюю окружность. Вы еще пишете - объект не окружность. То есть Вам надо аппроксимировать его окружностью с какой-то целью (какой?). Для этого глазомерно решайте - то ли все точки реального объекта должны быть внутри окружности, то ли снаружи, то ли отлетать от окружности усредненно в разные стороны (Какой критерий вам нужен7). Если поясните задачу более подробно, возможно появятся более конкретные ответы.
Подобные задачи я решаю в CREDO_DAT методом последовательных приближений. Точки на окружности назначаются «Исходными». Примерно в центре окружности искусственно создаётся точка-станция, с которой задаются якобы выполненные измерения расстояний (приблизительно равные радиусу окружности) до точек на окружности. После выполнения предобработки и уравнивания, получаю координаты центра окружности в первом приближении. Если «Исходные» расположены на окружности равномерно, то даже одного приближения может оказаться достаточно. Далее решаю ОГЗ от станции в центре на все «Исходные» на окружности и вычисляю среднее (уточнённое) значение фактического радиуса. Исправляю все якобы измеренные расстояния от центра до окружности на уточнённое значение радиуса. После выполнения предобработки и уравнивания, получаю координаты центра окружности во втором приближении. В большинстве случаев этого бывает достаточно. Но если требуется более строгое решение (по МНК), то можно продолжить приближения, немного изменив методику. Теперь изменять (уточнять) значение радиуса можно изменением приборной поправки C для отражателя (при этом не придётся после каждого приближения перебивать «измеренные» расстояния-радиусы, а только менять величину C). Теперь в ту или другую сторону изменяю поправку C, и после каждого очередного приближения (предобработки и уравнивания) смотрю оценку точности измерения расстояний. Добиваюсь получения минимальной СКО – это и будет окончательное решение. Координаты центра аппроксимирующей окружности будут получены из уравнивания, а фактический радиус можно вычислить путём сложения «измеренного» расстояния-радиуса с приборной поправки C.
Что-то уж слишком сложно. Задача элементарно решается в ГИС K-Mine: Импорт съёмки. Описание окружностью или, если "неправильная форма" - сплайном. Редактирование. Печать.
Оффтоп (Move your mouse to the spoiler area to reveal the content) Скільки буде коштувати ГІС K-Mine, виробництва компанії "КРИВБАСАКАДЕМІНВЕСТ", для вирішення елементарної задачі?
Я не продаю ГИС K-Mine, кстати, как и другие программы, упоминаемые ранее, и те, которые будут ещё упомянуты, применительно к данному вопросу. Эту задачу можно решить и без каких-либо программ, но уважаемый Nikonte, по-видимому, не желает отвечать на мой вопрос: потому обсуждаем тему пока без него.
Если строить именно окружность с центром в одной и той же точке, то разумно в теории действовать так: 1. вспомнить, что уравнение окружности выглядит как (x-A)^2 + (y-B)^2 = R^2 2. с учетом того, что есть параллельный перенос координат, всегда можно переписать формулу из п.1 в виде x^2 + y^2 = R^2 3. перейдем в плоскую цилиндрическую систему координат, там уравнение окружности имеет вид r=const=R, где x = R cos (f); y = R sin (f) (R- радиус, f - полярный угол) 4. с учетом того, что расстояние от окружности, которой вы хотите сделать аппроксимацию до снятой точки должно быть минимально, и в цилиндрической системе координат сие представляет просто напросто разность радиусов, то вычисляете среднее арифметическое по радиуса от центра окружности. 5. Координаты центра окружности у вас будут вычисляться как среднее арифметическое X и Y координат точек. Итого алгоритм такой: 1. Вычисляете среднее арифметическое от измеренных значений X и Y и получаете A и B - координаты центра 2. подставляя в вычисленные A и B и пары измеренных координат X и Y получаете значения радиусов 3. Считаете среднее значение радиуса и вуа-ля: A и B вычислены в п. 1 радиус вы только, что получили
Возникла следующая производсвенная задача (которая изначально мне кажется глупой): Построена дымовая труба. Допуск на вертикальность 35мм, допуск на изгиб 15мм. Все бы хорошо, да труба собрана из звеньев, которые не все имеют форму круга. Разность диаметров по заявлениям представителя заказчика колеблется от 0 до 20мм. Измеряя крен трубы стандартными геодезическими методами (прямая угловая засечка с 3 точек), я считаю невозможно зафиксировать малые величины, сравнимые с допуском, если сама труба в сечении неправильной формы. Я предположил, что если не искать легких путей, снять трубу в одной СК с разных точек по нескольким сечениям (в безотражательном режиме). Далее для каждого яруса найти точку, наиболее близкую к центру что мы здесь и обсуждаем) и уже по их положению судить о крене и изгибе трубы...заодно сравнив данные, полученные обычным методом. Данные точки имеются в Автокаде, которые экспортировались туда из кредо_дат.
Строить в автокаде вариации окружностей задача долгая, а для 30 исходных точек слишком многовариантная. Потом в этом многообразии близколежащих окружностей будет ничего не понятно. Когда снимаем круглые закладные по 3-4 точкам, то тогда ДА, на глаз лепим окружность подходящего радиуса. Точки должны располагаться равномерно (как внутри, так и снаружи) от построенной в итоге окружност.
Так Вам надо найти крен или виновного? Если крен, то сделайте с 2-ух стоянок во взаимно перпендикулярных плоскостях наблюдения и сдайте отчёт заказчику, а он уж пусть проявляет активность и пеняет на себя за плохой авторский надзор во время монтажа.
В вашей ситуации координаты оси должны быть уже известны. Окружность в каждом сегменте стройте по трем точкам, если предполагаете моделировать сечение кругом, (если не совсем кругом, я так понимаю эллипсом, то по 4-м точкам). Далее получайте координаты центра фигуры, которым моделируете сечение (круга или эллипса) и считайте разности с учетом начальных известных координат оси трубы. После для каждой пары разностей корень квадратный из (dx^2+dy^2). Ну и сие значение должно быть в рамках допуска на вертикальность и изгиб для каждого измеряемого значения. Промер лучше делать изнутри, встав на координаты центра и надев на прибор насадку специальную. P. S. отклонение от вертикальной оси я понимаю, а вот изгиб оси для вертикальной трубы? Я так понимаю под нагрузкой от ветра (тут сложно ибо величина сложно фиксируемая), или от течения воды в реке/море/океане, или от другой "железки" которая передает нагрузку. А так, если ось начинает изгибаться, от действия сжимающей нагрузки (под собственным весом конструкции, например), то сие в называется потеря устойчивости и все рушится нафиг.
Nikonte, теперь задача ясна. Совет с проведением окружности "на глаз" подошел бы для отрисовки топоплана, но не в Вашем случае. по-моему, это самый изящный способ (как сам не додумался?) - а этот подход - самый практичный - это в одном звене так гуляет диаметр? Или разность диаметров звеньев?.. Допустим, Вы наберете по 30-ть точек равномерно по внешней поверхности каждого звена. Можно предположить, что ошибка определения центра звена составит 10-17мм... А труба ЖБ? Надо учесть неровность поверхности, точность вашего обоснования и погрешность измерений... Приближаемся к 20 мм... Думаю, что однозначно изгиб не определим, а чтобы однозначно определить крен не более 35 мм надо уверенно поймать 10 мм разницы основания и верхнего сечения трубы... Если уж Вы решили так серьезно подойти к вопросу, отбросив формальности, то, на мой взгляд, не надо аппроксимировать кривые контуры окружностями, а набрать по 4-8 измерений строго вертикальными рядами на всех стыках звеньев равномерно по поверхности (по паре - нижняя деталь-верхняя). Вычертить строго по точкам сплайном, соблюдая подобие округлости в Автокаде. И делать сравнение всех уровней по точкам поверхности, а не центра... Прошу меня не бить камнями, естественно, это непростая задача в плане полевых измерений. Чтобы отстрелять строго вертикально даже 4 ряда, надо 4 раза ставить прибор во взаимно перпендикулярных плоскостях с разных сторон. Увязать станции стояния. Соблюсти оптимальные углы... А места может и не быть.
tsg, Вы тут неплохо всё расписали про уравнение окружности и прочее. Только есть одно НО – в нашей задаче точки-то не лежат на окружности. Близко к ней, НО не на окружности. И задача в том, чтобы аппроксимировать этот набор точек некой окружностью, то есть вычислить координаты её центра и радиус. Увы, данный алгоритм применим только в том случае, если точки лежат строго на окружности и пары этих точек расположены диаметрально противоположно. Предлагаю всем желающим решить любым способом задачку, показанную на рисунке. Надо вычислить координаты центра и радиус аппроксимирующей окружности. Результаты сравним с вычисленными в CREDO_DAT. Побеждает тот, у кого сумма квадратов отклонений точек от окружности будет минимальной.
Согласен, упустил важную деталь, точек должно быть достаточное количество и они должны быть раскиданы равномерно
ЮС, шобы энтузазистов прибавилось, вы можете каталог кырдинат прикрепить в текстовом файле? Распознавать растр долго, а набивать с экрана - надо второй комп включать в соседней комнате... Это тапки одевать нада (Пусть tsg посчитает по своим формулам, я, быть может, в КРЕДО или ТБЦ какой-нить другой способ попробую)