|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - реализация алгоритма Дугласа Пекера MVS2008 |
|
C/C++ - реализация алгоритма Дугласа Пекера MVS2008
|
Новый участник Сообщения: 2 |
Профиль | Отправить PM | Цитировать проги написаны в MVS2008
Ломанная рисуется алгоритмом Брезенхема. Координаты считываются по умолчанию с файла linia.txt либо файл задается первым аргументом ком.строки. В файле первая цифра=число точек. Исходник http://ifolder.ru/19474320 Т.О. получается что с файла считываются точки в массив типа int. struct XY{ //структура точки int x,y; }; XY array[200]; массив считанных точек В эту программу необходимо дополнить данным алгоритмом Дугласа-Пекера. на русскомhttp://habrahabr.ru/blogs/personal/81854/ на английсскомhttp://en.wikipedia.org/wiki/Ramer%E...cker_algorithm Алгоритм Дугласа-Пекера предназначен для сокращения числа точек аппроксимированной кривой. Поскольку кривая состоит из отрезков необходимо построить аналогичную кривую, используя меньшее число точек. Упрощенная кривая состоит из подмножества точек, составляющих исходную кривую. Псевдокод. function DouglasPeucker(PointList[], epsilon) //Find the point with the maximum distance dmax = 0 index = 0 for i = 2 to (length(PointList) - 1) d = OrthogonalDistance(PointList[i], Line(PointList[1], PointList[end])) if d > dmax index = i dmax = d end end //If max distance is greater than epsilon, recursively simplify if dmax >= epsilon //Recursive call recResults1[] = DouglasPeucker(PointList[1...index], epsilon) recResults2[] = DouglasPeucker(PointList[index...end], epsilon) // Build the result list ResultList[] = {recResults1[1...end-1] recResults2[1...end]} else ResultList[] = {PointList[1], PointList[end]} end //Return the result return ResultList[] end. В данный момент написана только подфункция высчитывающая расстояние от точки до отрезка d = OrthogonalDistance(PointList[i], Line(PointList[1], PointList[end])) Все точки задаются в самой программе. Исходник http://ifolder.ru/19474350 Проблемы: 1-Несоответствия типов структуры XY т.к. в рисующей программе с файла считывают тип int, а в рассчитывающей программе из-за дробного расстояния, корней и округления до целых чисел используется тип long double. надо как то считать сразу в тип long double или преобразовать считанные значения с файла... 2-При самой реализации алгоритма не могу представить как передавать сам массив... в псевдокоде есть переменная end, кот. обозначает крайнюю точку массива, а как её найти самому? да и в саму функцию DouglasPeucker передается не указатель, а сам массив целиком... В общем не могу представить как работать с этим массивом PointList О_О, у меня он array в проге... |
|
Отправлено: 21:34, 25-09-2010 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Реализация доступа к интернет. | zubkoff.s | Microsoft Windows NT/2000/2003 | 24 | 01-02-2010 11:28 | |
C/C++ - Реализация Zoom`а в Borland C++ Builder | DaRiYs | Программирование и базы данных | 2 | 21-12-2009 02:12 | |
Реализация конвейера на Си! NEED HELP! | st031 | Программирование в *nix | 2 | 24-01-2009 10:57 | |
C/C++ - Реализация формулы... | ganselo | Программирование и базы данных | 1 | 20-01-2009 19:38 | |
Разное - Ситема терминалов (реализация) | piling | Microsoft Windows 2000/XP | 2 | 13-02-2008 22:52 |
|