|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.09.2014, 00:20 | #1 |
Регистрация: 16.05.2009
Сообщений: 3
|
Разбить вып. многоугольник на 4 равновеликие части (C++), run-time error
Здравствуйте!
Решаю следующую задачу: на стандартный ввод подаётся число вершин выпуклого многоугольника, а потом пары чисел - координаты вершин в порядке обхода. Необходимо "разрезать" этот многоугольник взаимно перпендикулярными прямыми на 4 равновеликие части - точнее, указать точку, где располагается пересечение этих самых прямых и угол наклона одной из прямой. Я использую следующий алгоритм, использующий следующие соображения: 1) для любого направления (направлением будем называть пару чисел (A,B), семейство прямых с уравнением Ax+By+C = 0) есть ровно 1 прямая данного направления, делящая многоугольник на 2 равновеликие части (в силу непрерывности); 2) если мы разрежем многоугольник 2 перпендикулярными прямыми, каждая из которых отвечает п.1, то если мы будем перечислять площади кусков по часовой стрелке, то получится последовательность вида {a,b,a,b}, т.е. площади противоположных кусков будут равны, причём такой разрез единственен в силу единственности каждой из прямых. Произведём разрез 2 прямыми (назовём их первой и второй), каждая из которых делит многоугольник пополам, причём пусть "первая" параллельна оси Ox, и назовём площади получившихся кусков в порядке обхода по часовой стрелке {a, b, a, b}. Не умаляя общности, будем считать a > b. Теперь будем поворачивать прямые по часовой стрелке. Когда угол достигнет pi/2, "первая" прямая будет параллельна уже оси Oy, а последовательность площадей выглядит теперь как {b,a,b,a}, т.е. a и b поменялись ролями. Т.е. первая площадь этой последовательности непрерывно из a перешла в b, т.е. существует такой угол между 0 и pi/2, т.ч. a' = b' => все 4 куска равновелики. Я написала код на C++, который по идее решает эту задачу таким методом. Если чуть подробнее, то я рассматриваю углы от 0 до pi/2 и методом бисекции ищу нужный - рассматриваю среднее значение угла на текущем отрезке, для этого значения строю прямые по пункту 1, смотрю на разность площадей четвертей, после этого решаю, какую из половин текущего отрезка рассматривать на следующей итерации. Программа проходит 3 теста с верным ответом, однако на 4ом происходит run-time error, который мне не удаётся, но содержимое теста, к сожалению, неизвестно. Насколько я понимаю, такая ошибка может возникать, если я повторно очищаю динамически выделенную память (такого вроде не наблюдается), если я выхожу за границы массива (вроде тоже проверила) или делю на 0 (таких возможностей в коде я усмотрела лишь 2 и поставила в тех местах if-ы, отправила код снова и тем не менее run-time error сохранилась). Какие варианты появления этой ошибки ещё возможны? Кроме того, я нагенерила 1000 выпуклых многоугольников и прогнала код на них - никаких падений программы у меня, по крайней мере, не происходит, хотя я не могу судить, насколько верный ответ она получает. Ниже привожу код, буду благодарна за помощь в поимке этого рантайма. |
21.09.2014, 00:21 | #2 |
Регистрация: 16.05.2009
Сообщений: 3
|
Код:
Последний раз редактировалось ch-el; 21.09.2014 в 00:55. |
21.09.2014, 00:22 | #3 |
Регистрация: 16.05.2009
Сообщений: 3
|
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Run-time error '91' | Ефим Петрович | Microsoft Office Access | 1 | 04.04.2014 13:09 |
Run-time error '1004'. | noskriptt | Microsoft Office Excel | 1 | 24.10.2012 10:22 |
Периодическая ошибка Run-time error -2147417848 (80010108) Automation error в файле с макросом | faraviper | Microsoft Office Excel | 0 | 24.02.2011 16:23 |
Run-time error 13 | olimpus | Microsoft Office Excel | 11 | 25.12.2010 22:49 |
Ошибка Run-time Error при изменении знака отделения дробной части | kipish_lp | Microsoft Office Excel | 4 | 06.08.2010 09:23 |