Про дугу и три точки

Тема в разделе "WASM.A&O", создана пользователем Ghjcnjbvz, 9 июл 2008.

  1. Ghjcnjbvz

    Ghjcnjbvz New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2008
    Сообщения:
    4
    Попалась мне тут задача с построением дуги по трём точкам(начало, середина дуги и конец). До этого неоднократно встречал, хранящуюся таким образом дугу, в различных агрегатах. А вот сейчас нужно построить её и посчитать длину. Думаю эта задача уже жёвана и пережёвана. Может кто покидает наилучшими алгоритмами. Вспомнил тут геометрию немножко, нашёл центр окружности а затем угол между радиусами ну а дальше понятно. Так вот, интересуют другие варианты. И алгоритмы построения.
    Заранее благодарю
     
  2. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Ghjcnjbvz
    Соединяешь три точки, получаешь треугольник, который является вписанным в искомую окружность. Задачка кажись 8 класса: восстанавливаешь перпендикуляторы из середин сторон треугольника, точка их пересечения и будет центром искомой окружности. Что может быть проще?
    Вот насчет длины сомневаюсь, как известно геометрическими построениями сделать это невозможно.
     
  3. Ghjcnjbvz

    Ghjcnjbvz New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2008
    Сообщения:
    4
    Задача уже решена. Именно таким методом я и нашёл центр окружности. Также имеется формула примерного нахождения длины. Которыя даёт погрешность 0,1% при углах до 45-и градусов и 0,8% при бОльших. Однако из-за погрегностей в ходе вычисления центра, то самое примерное число получается более точным. А так как измеряемых дуг много к концу разница огромна.
     
  4. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    Ghjcnjbvz

    А центр зачем искать? Для вычисления длины дуги нужны ее радиус и угол. Радиус получаешь сразу, как радиус описанной окружности(a/2sin(\alpha), если правильно помню), а угол можно через arcsin вычислить. Откуда такая большая погрешность?
     
  5. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Ghjcnjbvz
    Из контекста вроде бы следовало, что требуется геометрический способ построения.
    Алгебраический способ (точная формула):
    Пусть стороны равнобедренного треугольника (о котором говорилось выше) a, a, 2b (длина основания).
    Радиус описанной окружности (вокруг произвольного треугольника со сторонами a, b, c):
    R=abc/4S, S - площадь треугольника.
    Площадь нашего треугольника равна S=b*sqrt(a^2 - b^2).
    Пусть A - угол, стягиваемый дугой (хордой 2b), тогда sin(A/2) = b/R = sqrt(1 - (b/a)^2).
    Длина нашей дуги L = R*A = 2R * arcsin(sqrt(1 - (b/a)^2)). Погрешности вычислений должны быть минимальны.
     
  6. Ghjcnjbvz

    Ghjcnjbvz New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2008
    Сообщения:
    4
    Спасибо ребят. То что напомнили вы и то что прочитал в учебнике помогло. Построил и измерил. Всё работает. Извините за невежество. Как-то очень давно с этим не работал. Спасибо.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ghjcnjbvz
    Это не невежество.