LINUX.ORG.RU
ФорумTalks

[геометрия, 8ой класс]Нужна формула


0

1

Два круга заданы радиусами и расстоянием между центрами. Нужно посчитать площадь пересечения.
Точная формула пестрит арккосинусами и корнями, но точность мне не нужна - 5% погрешности вполне сойдет, а вот трудоемкость надо минимальную. Есть ли у кого какие идеи?

★★★★★

Ответ на: комментарий от Ubuntu1204LTS

Что-то мне подсказывает, что в учебнике не будет приближенной формулы. Точную формулу я знаю и так. Вот только разлагать ее в степенной ряд чтобы получить приближение - занятие неблагодарное. То есть мне конечно придется это сделать если другого варианта не будет, но я все-таки надеюсь на лучшее.

morse ★★★★★
() автор топика
Ответ на: комментарий от adriano32

Очень информативно. Может тогда приближенную формулу площади сегмента скинешь, чтоб совсем уж голословным не быть?

morse ★★★★★
() автор топика
Ответ на: комментарий от morse

>Вот только разлагать ее в степенной ряд чтобы получить приближение - занятие неблагодарное.

в чем сложность открыть максиму и ввести пару команд?

nu11 ★★★★★
()
Ответ на: комментарий от adriano32

Для особо упоротых буратин повторяю еще раз: Я ЗНАЮ ТОЧНУЮ ФОРМУЛУ. Мне нужно полиномиальное приближение. Если я начну считать арккосинусы корней в участке кода с трудоемкостью O(n^2) меня кастрируют на месте.

morse ★★★★★
() автор топика
Ответ на: комментарий от morse

меня кастрируют на месте.

Это ж ЛОР. да еще и толксы. Всем только того и надо.

thesis ★★★★★
()
Ответ на: комментарий от morse

Заведи табличку значений. Чем больше значений — тем точнее.

ChALkeR ★★★★★
()
Ответ на: комментарий от AlexCones

Треугольники покатят только когда расстояние примерно равно сумме радиусов. При площади пересечения сопоставимой с площадью круга мы получим жёпу.

morse ★★★★★
() автор топика
Ответ на: комментарий от morse

Сам ты буратина, слова подбирай, если не осилил сам найти и за помощью на ЛОР пришёл.

марш в гугл «приближённая формула площади сегмента», (2/3)*основание_сегмента*высоту_сегмента

Погрешность 1.5% при дуге в 60градусов, 0.75% при 45-ти, 0.3% при 30-ти.

Справочник Выгодского, параграф 21а

adriano32 ★★★
()

а какие ограничения по памяти? может сгенерировать табличку с нужными значениями площадей? :P

Harald ★★★★★
()
Ответ на: комментарий от adriano32

да, эту формулу я видел. Проблема только в том, что чтобы получить оную высоту нужны все те же корни. Хотя отсутсвие арккосинуса это уже плюс, да.

morse ★★★★★
() автор топика
Ответ на: комментарий от Harald

Да, табличка вариант. Я как раз обдумывал как можно уменьшить число независимых параметров.

morse ★★★★★
() автор топика
Ответ на: комментарий от morse

А сколько тактов по-твоему выполняется взятие корня? Или синуса?

adriano32 ★★★
()

А Эллипсом аппроксимировать не покатит?
r1 - среднее радиусов окружностей.
r2 - половина ширины пересечения.

unDEFER ★★★★★
()
Ответ на: комментарий от morse

Друг, а расстояние между точками ты тоже без корней считаешь?

power
()

>Есть ли у кого какие идеи?

Площадь сегмента 1 минус площадь треугольника образованного точками ABO1

плюс

Площадь сегмента 2 минус площадь треугольника образованного точками ABO2

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от morse

интеграл + крупный шаг :) Но будет ли оно менее затратно - хз )

Jetty ★★★★★
()

А почему сначала не сделать всё по точной формуле и посмотреть, насколько это медленно, и если уж совсем медленно, то искать более быстрый алгоритм. А то можно так наворочить с «быстрым» алгоритмом, а потом мучиться с поиском возможных ошибок.

Rakot ★★
()
Ответ на: комментарий от morse

> Может тогда приближенную формулу площади сегмента

Площадь сектора - площадь треугольника

cvs-255 ★★★★★
()

>8ой класс... точность мне не нужна - 5% погрешности вполне сойдет

Графическое решение, 1 класс: рисуешь кружочки на миллиметровке и считаешь количество общих клеточек.

Считать можно пальцем, или веб-камерой :)

quickquest ★★★★★
()

Возьми миллиметровку, нарисуй фигуры, вырежи пересечение и взвесь его на аптекарских весах. Зная вес, скажем квадратного дециметра миллиметровки, легко получить площадь с точность 5%

Evgueni ★★★★★
()
Ответ на: комментарий от morse

> Мне нужно полиномиальное приближение

Ряд тейлора - твой друг.

provaton ★★★★★
()
Ответ на: комментарий от Evgueni

> Возьми миллиметровку

К стати, не обязательно миллиметровку. Мой знакомый клялся что видел бабу-биолога, которая вычисляла площадь под кривой следующим алгоритмом:

1. На принтере печатается график.

2. Кривая вырезается ножницами и взвешивается на аналитических весах

3. Вырезается и взвешивается квадрат площадью в одну единицу

4. Искомая площадь = вес кривой / вес квадрата

5. Профит.

Применить этот алгоритм к сегментам - легче легкого. Так-же можно контролировать точность: нужна высокая точность: режем бумажку аккуратно, нужна скорость: режем быстро

phrm ★★
()
Ответ на: комментарий от phrm

нужна высокая точность: режем бумажку аккуратно

Еще можно несколько графиков и квадратиков вырезать, тоже точность вырастет :)

power
()
Ответ на: комментарий от phrm

Академик Л.М.Барков так в аспирантские годы интегралы брал. Принтеров, естественно, под рукой у него не было.

Evgueni ★★★★★
()
Ответ на: комментарий от Evgueni

Миллиметровка раньше делалась более-менее одной толщины.

Evgueni ★★★★★
()

Рисуешь на экране залитую окружност. Потом вторую с XOR заливкой. Считаешь незакрашеные точки. Коэффициент масштабирования не забываем.

vada ★★★★★
()

Берёшь гончарный круг. Берёшь глину, делаешь сосуд, в горизонтальном сечении которого будет область пересечения кругов. Высоту сосуда берёшь, скажем, 1 дм. Глина остывает, наливаешь туда воду, измеряешь объём сосуда, получаешь площадь основания. PROFIT.

luke ★★★★★
()

Сумма двух сегментов. Это же общеизвестная задача, и каждый, наверное, решал ее по 100 раз...

PS. А что, думать уже лень?

Deleted
()
Ответ на: комментарий от morse

Если нужно просто посчитать приближенное значение - man калькулятор.

Deleted
()
Ответ на: комментарий от Deleted

Хорошая идея, кстати. Можно таблицу сделать на переменной сетке (чтобы повысить точность линейной интерполяции).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от phrm

Где взять весы достаточной точности?

Deleted
()
Ответ на: комментарий от Evgueni

Так случай phrm - это и есть взятие интеграла.

Deleted
()
Ответ на: комментарий от Eddy_Em

Это у нас оно в почете. Как оно может быть в почете у человека, который не знает, что он имеет дело с интегралами и даже не знает, что такое интеграл?

Deleted
()

> Два круга заданы радиусами и расстоянием между центрами. Нужно посчитать площадь пересечения.

Точная формула пестрит арккосинусами и корнями, но точность мне не нужна - 5% погрешности вполне сойдет, а вот трудоемкость надо минимальную.


Есть ли у кого какие идеи?


Идея: сумма сегментов
Дано: r,R,L
Найти: S

Приближённая формула сегмента: S=(2/3)*h*c (по Выгодскому: ПЛАНИМЕТРИЯ п21а: «Приближённая формула площади сегмента»)

http://upload.wikimedia.org/wikipedia/commons/2/2b/Circle_segment.jpg

При этом высота ck по трём сторонам r,R,L (по Выгодскому: ПЛАНИМЕТРИЯ п9: «Замечательные линии и точки в треугольнике»):

p=(r+R+L)/2 ; — полупериметр
(ck)=2*sqrt(p*(p-r)*(p-R)*(p-L))/L ; — высота по трём сторонам

c=2*(ck) ; — основание сегмента

d1= sqrt(R^2-(ck)^2); — теорема Пифагора
h1=R-d1 ;
d2= sqrt(r^2-(ck)^2); — теорема Пифагора
h2=r-d2 ;

S1=(2/3)*h1*c ;
S2=(2/3)*h2*c ;
S=S1+S2 ;

Итого: три (3) операции с корнем sqrt() и погрешность (~1.5%) приближённой формулы площади сегмента по Выгодскому

P.S. справочник Выгодского 1966г. 424стр.

:-)

Neksys ★★★
()
Ответ на: комментарий от adriano32

«Еще каких то девять тысяч вёдер - и золотой ключик у нас в кармане!»// :)

Neksys ★★★
()

> Точная формула пестрит арккосинусами и корнями, но точность мне не нужна - 5% погрешности вполне сойдет...

Возьми первые два члена разложения в ряд Фурье.

ansky ★★★★★
()

На каком языке это будет написано?

Там есть ассоциативные массивы? Насколько часто будут повторяться одни и те же комбинации входных параметров? Если ответ очевиден, то можно хранить результаты расчета точной функции в ассоциативном массиве.

Если сделать с табличками, то можно попробовать так. Заводишь две таблички по 10 строк например (last10table, top10table). В первой будут храниться 10 последних результатов расчетов (вместе с аргументами, либо для ускорения сравнения хэш всех аргументов) + счетчик вызовов (hits) для каждой строки. Во второй табличке хранятся 10 наиболее часто вызываемых строк. Из первой во вторую табличку строка попадает при условии, что её персональный счетчик вызовов начинает превышать счетчик для какой-либо строки второй таблички.

justAmoment ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.