![]() |
|
![]() ![]() ![]() |
|
BOB4uK |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 28.2.2004 Репутация: нет Всего: нет |
Хелп!
Есть задачка над которой ломаю голову целый месяц! Надо построить дугу любой степени вогнутости! Дается две точки(начало и конец дуги) и длина дуги, большая длины отрезка(кот образуют две точки)! Если длина дуги большая то может получиться пости круг. Если возможно то как сделать дугу не через окружность а через эллипс? |
|||
|
||||
xamloru |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 2.8.2007 Репутация: нет Всего: нет |
Методом деления пополам, точно можно найти наибольшее соответствие, чтобы точное соответствие, пока не знаю
|
|||
|
||||
BOB4uK |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 28.2.2004 Репутация: нет Всего: нет |
смутно представляю себе этот метод если честно!
|
|||
|
||||
xamloru |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 2.8.2007 Репутация: нет Всего: нет |
значит так, нужно чтобы была написана функция, которая через две точки проводит дугу определенного радиуса, и считает ее длину. задача вполне решимая. далее мы меняем радиус, не очень большой(дуга получиться большая), и большой(дуга будет маленькая). далее делим к примеру большой радиус пополам, и сравниваем длину дуги с заданной, если она меньше, то радиус увеличиваем, если больше то уменьшаем(опять же делением пополам).
таким образом мы можем найти приближение с заданной точностью. Это сообщение отредактировал(а) xamloru - 21.7.2008, 14:30 |
|||
|
||||
BOB4uK |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 28.2.2004 Репутация: нет Всего: нет |
||||
|
||||
xamloru |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 2.8.2007 Репутация: нет Всего: нет |
не опубликовалась твоя картинка
|
|||
|
||||
BOB4uK |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 28.2.2004 Репутация: нет Всего: нет |
это сервер ipicture вчера тупил... картинка есть!
|
|||
|
||||
Dobermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 992 Регистрация: 7.1.2008 Репутация: нет Всего: 0 |
||||
|
||||
BOB4uK |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 28.2.2004 Репутация: нет Всего: нет |
||||
|
||||
de_Nis |
|
|||
![]() Старательный ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 19.10.2006 Где: Молдова Репутация: нет Всего: 6 |
Дано: координаты двух точек, длина дуги.
Обозначим точки буквами А и Б, длину дуги ДД. Представим, что АБ - диаметр искомой окружности. Тогда дуга, ограниченная этими точками, должна быть равна половине длины окружности диаметром АВ. Вычисляем и сравниваем с заданным размером дуги. Если вычисленное значение БОЛЬШЕ заданного - это не наш случай. А вот если МЕНЬШЕ заданного значения длины дуги ДД - продолжаем расчет. Обозначим центральный угол (меньший из углов, образованных радиусами, проведенными из точек А и Б) буквой а (в градусах), радиус искомой окружности R. Длина отрезка АВ известна (так как известны координаты точек А и Б). С другой стороны, это хорда, стягивающая угол а в нашей окружности. Длина хорды равна 2*R*Sin(а/2)=АВ Длина дуги, равная ДД, равна Pi*R*(360-a)/180 = ДД. Получается система двух уравнений с двумя неизвестными (радиус R и центральный угол а): 2*R*Sin(а/2)=АВ Pi*R*(360-a)/180 = ДД после решения которой можно определить радиус искомой окружности. Это сообщение отредактировал(а) de_Nis - 22.7.2008, 10:37 --------------------
Несчастлив не тот, у кого ничего нет, а тот, кто ничего не хочет… |
|||
|
||||
Dobermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 992 Регистрация: 7.1.2008 Репутация: нет Всего: 0 |
||||
|
||||
de_Nis |
|
|||
![]() Старательный ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 19.10.2006 Где: Молдова Репутация: нет Всего: 6 |
Когда я написал "... Если вычисленное значение БОЛЬШЕ заданного - это не наш случай...", я имел в виду, что в этом случае вид дуги не соответствует рисунку BOB4uKа
--------------------
Несчастлив не тот, у кого ничего нет, а тот, кто ничего не хочет… |
|||
|
||||
BOB4uK |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 28.2.2004 Репутация: нет Всего: нет |
||||
|
||||
BOB4uK |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 28.2.2004 Репутация: нет Всего: нет |
Вроди методом тыка нашел формулы как найти одно из другого! Прошу оценки и вероятности сбоя!
h=(sqrt((L2/2)*(L2/2)-(L1/2)*(L1/2)))/1.11, где 1,11 это 11% разницы между половиной дуги и высотой! L2=sqrt(h*h+(L1/2)*(L1/2)); L2=L2+L2*0.11; L2=L2*2; |
|||
|
||||
Dobermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 992 Регистрация: 7.1.2008 Репутация: нет Всего: 0 |
||||
|
||||
BOB4uK |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 28.2.2004 Репутация: нет Всего: нет |
вот смотри дуга 314, пол дуги 157, а высота в нашем примере извесна 100! следовательно а=100(L1/2=100? L1=200), b=100 - высота -> c=141
141*0,11+141=157, чтобы найти 141 мы 157/1,11! |
|||
|
||||
4d5a |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 10.6.2007 Репутация: 1 Всего: 1 |
de_Nis,
только вот эта система не имеет аналитического решения (по крайней мере я его не знаю) А в радианах там проще считать : | AB=2*R*sin(a/2) { | LL=R*a (где LL есть ДД a-угол [рад] AB-хорда ) после подстановки AB=2*R*sin( LL/(2*R) ) А это вид a/x=Sin b/x, только численно! конечно его можно решить методом хорд или деления пополам, но думаю вначале эту функцию нужно проинтерполировать какой нибудь более простой для вычислений, например полиномом, а затем уже искать корни. (возможно это уменьшит вычислительные затраты ?) ЗЫ кстати вот здесь формулы по элементарной геометрии, кому надо ) http://www.bymath.net/studyguide/geo/sec/geo10.htm http://calc.ru/105.html |
|||
|
||||
BOB4uK |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 28.2.2004 Репутация: нет Всего: нет |
Я нашел формулу для нахождения длины дуги зная высоту и радиус! одну часть задачи решил спасибо 4d5a за ссылку!
Вот осталось найти высоту по длине дуги и хорде! то что я писал с 0,11 не катит! при малой дуге не срабатывает! У кого каке мысли по этому поводу? |
|||
|
||||
BOB4uK |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 28.2.2004 Репутация: нет Всего: нет |
Я нашел формулу для нахождения длины дуги зная высоту и радиус! одну часть задачи решил спасибо 4d5a за ссылку!
Вот осталось найти высоту по длине дуги и хорде! то что я писал с 0,11 не катит! при малой дуге не срабатывает! У кого каке мысли по этому поводу? |
|||
|
||||
de_Nis |
|
|||
![]() Старательный ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 19.10.2006 Где: Молдова Репутация: нет Всего: 6 |
Длина дуги (приблизительно) = квадратный корень из (хорда в квадрате +5,3333... *высота в квадрате), отсюда можно найти высоту
( Анурьев, Справочник конструктора - машиностроителя, т.1) Это сообщение отредактировал(а) de_Nis - 23.7.2008, 12:26 --------------------
Несчастлив не тот, у кого ничего нет, а тот, кто ничего не хочет… |
|||
|
||||
BOB4uK |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 28.2.2004 Репутация: нет Всего: нет |
Спасибо большое! Точность на много больше чем у меня ![]() Я думаю тему можно считать закрытой! Всем спасибо за помощь! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |