Попалась мне тут задача с построением дуги по трём точкам(начало, середина дуги и конец). До этого неоднократно встречал, хранящуюся таким образом дугу, в различных агрегатах. А вот сейчас нужно построить её и посчитать длину. Думаю эта задача уже жёвана и пережёвана. Может кто покидает наилучшими алгоритмами. Вспомнил тут геометрию немножко, нашёл центр окружности а затем угол между радиусами ну а дальше понятно. Так вот, интересуют другие варианты. И алгоритмы построения. Заранее благодарю
Ghjcnjbvz Соединяешь три точки, получаешь треугольник, который является вписанным в искомую окружность. Задачка кажись 8 класса: восстанавливаешь перпендикуляторы из середин сторон треугольника, точка их пересечения и будет центром искомой окружности. Что может быть проще? Вот насчет длины сомневаюсь, как известно геометрическими построениями сделать это невозможно.
Задача уже решена. Именно таким методом я и нашёл центр окружности. Также имеется формула примерного нахождения длины. Которыя даёт погрешность 0,1% при углах до 45-и градусов и 0,8% при бОльших. Однако из-за погрегностей в ходе вычисления центра, то самое примерное число получается более точным. А так как измеряемых дуг много к концу разница огромна.
Ghjcnjbvz А центр зачем искать? Для вычисления длины дуги нужны ее радиус и угол. Радиус получаешь сразу, как радиус описанной окружности(a/2sin(\alpha), если правильно помню), а угол можно через arcsin вычислить. Откуда такая большая погрешность?
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)). Погрешности вычислений должны быть минимальны.
Спасибо ребят. То что напомнили вы и то что прочитал в учебнике помогло. Построил и измерил. Всё работает. Извините за невежество. Как-то очень давно с этим не работал. Спасибо.