| Цитата(Pavia @ 8.5.2009, 19:24) | | Код | //Выбираем дескритизацию. //Пусть NR=50 определяет число полудуг. //Пусть NFov=180 определяет число радиусов.
SetLength(Arcs,NR); //Задаем размер массива дуг h:=hypot(Width/2,Height/2); for i:=0 to Width/2 do for j:=0 to Height div 2 -1 do if bp.Canvas.Pixel[i,j]=ClBlack then // Проверяем пиксель черный или нет begin Inc(Arcs[Round(hypot(i-Width/2,J-Height/2)/h*NR)],1); // Вычисляем радиус накоторой находить полу дуга и увеличиваем счетчик соответсвующего массива на 1 end; SetLength(Radius,NFov); //Задаем размер массива радиусов h:=-Pi; for i:=0 to Width/2 do for j:=Height div 2 to Height-1 do if bp.Canvas.Pixel[i,j]=ClBlack then begin Inc(Radius[Abs(Round(ArcTan2(j-Height/2,i-Width/2)/h*NFov))],1); // Вычисляем угол накоторой повернут радиус и увеличиваем счетчик соответсвующего массива на 1 ABS () Для перестраховки. end;
|
Можно и точнее. Перебираешь не точки и радиусы и углы и проверяешь цвет точки в пикселе.
Добавлено @ 19:28
| Код | //Выбираем дескритизацию. //Пусть NR=50 определяет число полудуг. //Пусть NFov=180 определяет число радиусов.
SetLength(Arcs,NR); //Задаем размер массива дуг h:=hypot(Width/2,Height/2); for i:=0 to Width/2 do for j:=0 to Height div 2 -1 do if bp.Canvas.Pixel[i,j]=ClBlack then // Проверяем пиксель черный или нет begin Inc(Arcs[Round(hypot(i-Width/2,J-Height/2)/h*NR)],1); // Вычисляем радиус накоторой находить полу дуга и увеличиваем счетчик соответсвующего массива на 1 end; SetLength(Radius,NFov); //Задаем размер массива радиусов h:=-Pi; for i:=0 to Width/2 do for j:=Height div 2 to Height-1 do if bp.Canvas.Pixel[i,j]=ClBlack then begin Inc(Radius[Abs(Round(ArcTan2(j-Height/2,i-Width/2)/h*NFov))],1); // Вычисляем угол накоторой повернут радиус и увеличиваем счетчик соответсвующего массива на 1 ABS () Для перестраховки. end;
|
Можно и точнее. Перебираешь не точки и радиусы и углы и проверяешь цвет точки в пикселе. |
Спасибо а можно это както перевести на С++ Builder или visual |