IPB
ЛогинПароль:

> 

Начальные контакты ТОЛЬКО через личку!!

 
 Ответить  Открыть новую тему 
> требуется решить задачу на Delphi
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


Здравствуйте. Требуется решение такой вот задачки.
Нужно читая из файла координаты отрезков выводить их на форме.
После этого выбирать на форме рандомную точку и рисовать окружность с центром в этой точке, рандомного радиуса, и если эта окружность пересекает какие либо отрезки, то то что находится с другой стороны отрезка (от центра) является "невидимым". Нужно же посчитать площадь видимой части окружности.
Заранее благодарен.
сроки горят

Сообщение отредактировано: daiver -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Имеются в виду "окружность пересекает какие либо отрезки дважды"?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


О какой форме идет речь?
Это все в графике нужно делать или просто посчитать?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 7
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


привет daiver... Предлагаю вместе подумать над зодачкой...
ИМХО интересная задачка...

Я попробовал сделать и конкретно запарился... возникло много вопросов и нюансов...
У меня логика получилось следующее:
берутся координаты концов отрезков из файла;
строятся отрезки;
строится окружность;
в первую очередь я решил, что нужно определять для каждого отрезка - пересекает ли он окружность...
попробовал реализовать следующим образом:
рассматривается треугольник между центром окружности и координатами концов отрезка;
в этом "придуманном" треугольнике рассматривается высота, проведённая из центра окружности;
если она меньше радиуса окружности, то соответственно отрезок пересекает окружность;
высота треугольника в данном случае находится так:
по координатам вершин треугольника рассчитываются длины его сторон;
находим площадь треугольника по формуле Герона: sqrt(p*(p-a)*(p-b)*(p-c)) , где p=(a+b+c)/2;
также площадь треугольника равна (a*Ha)/2 => Ha=(2*S)/a , где Ha - высота...

вроде бы всё просто: зная эту высоту, если она меньше радиуса, то ясно, что отрезок пересекает окружность => можно найти стрелу сегмента (r-Ha) => можно найти площадь сегмента => можно найти площадь окружности-площадь сегмента...

НО!!! Пипец косяков: во-первых данный алгоритм распознаёт отрезок, направленный на окружность, как отрезок пересекающий её, т.к. строит треугольник и находит в нём высоту, которая соответственно меньше радиуса... Как сделать так, чтобы он распознавал отрезок, который ИМЕННО ПЕРЕСЕКАЕТ окружность в двух точках??? Я тут думал - может проверку, чтобы стороны трегуольника, прилегающие к центру окружности были обе больше или равны радиусу? Это будет гарантировать, что внутри окружности нет концов отрезка... Дальше я думал сделать проверку, чтобы сторона, противоположная вершине с центром окружности была наибольшей длины (в этом случае похоже будет находится нужная "высота")... но нифига... даже при соблюдении этих условий можно запросто построить отрезок который отсечёт часть окружности, но при этом высота будет рассчитана неправильно...

Даже если додумать этот вариант, то слишком много вопросов остаётся... Он будет работать с одной окружностью и с одним отрезком. А если два отрезка пересекают окружность и внутри неё пересекаются друг с другом??? Тогда вообще не всё так просто... А если таких отрезков 10 ?

Есть ещё идея решить эту задачку дебильным методом "в лоб":
построить всё а затем запустить рекурсивную процедуру, которая будет закрашивать точки на экране каким нибудь одним цветом и при этом считать количество закрашенных точек и запустить эту рекурсию из центра окружности, соответственно указав в качестве границ закраски цвет окружности и линий и цвет, которым закрашивает сама рекурсия...
Метод конечно немного идиотский, как мне кажется, но зато наверняка )))))))

По ходу здеся должно быть чисто математическое решение, но у меня пока москов ни хфатает (((
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.11.2020 23:28
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name