Анализ графиков релаксации напряжений с использованием Delphi 2011
Жунисбеков Т.М., Шевцов А.Н., Джакияев Д.К., Юсупова Л.Х., ТарГУ им. М.Х. Дулати, Тараз
При изучении кривых релаксации эпоксидных полимеров часто возникает проблема обработки экспериментальных данных [1]. Рассмотрим графики зависимости напряжения от времени (Рис.1.). Отсканируем график, для его последующего компьютерного анализа.
релаксация эпоксидный напряжение полимер
Рис. 1. Отсканированные графики релаксации напряжений
Как видно из графика: напряжения заданы в пределе от 0 до 5000 на вертикальной координате, а время в пределах от 1 до 8. Причем есть два графика и узловые точки каждого графика.
Разработаем алгоритм нахождения координат узловых точек. Для этого пометим один пиксель каждой узловой точки 1-го графика - синим цветом, 2-го графика - красным цветом, а точки на координатных осях - зеленым (Рис.2.). Составим программу на языке Delphi-2011 для поиска пикселей красного, зеленого и синего цветов. После того как найденны координаты каждого цветного пикселя, необходимо найти точку начала координат, определить масштаб по осям Ох и Оу и перевести координаты всех узловых точек в масштаб координатных осей графика.
Рис. 2. Разноцветные пиксели на отсканированном графике
Создадим форму, разместим на ней кнопку и три компонента Memo - для сохранения найденных координат точек (Рис.3.).
Рис. 3. Окно программы
Получим следующий алгоритм программы:
|
procedure TForm1.Button1Click(Sender: TObject); type TRGB = record B, G, R: Byte; end; pRGB = ^TRGB; var bit:tbitmap; i,j:integer; Dest: pRGB; begin bit:=tbitmap.Create; bit.LoadFromFile('0 001.bmp'); memo1.Clear; memo2.Clear; memo3.Clear; image1.Picture.Bitmap:=bit; for I := 0 to bit.Height - 1 do begin Dest := Bit.ScanLine[i]; for j := 0 to bit.Width - 1 do begin if (Dest^.r=0)and(Dest^.g=255)and(Dest^.b=0) then memo1.Lines.Add(floattostr(round((j-57)/112))+' '+floattostr(5000*round((bit.Height-i-48)/578))); if (Dest^.r=0)and(Dest^.g=0)and(Dest^.b=255) then memo2.Lines.Add(floattostr(round(100*(j-57)/112)/100)+' '+floattostr(round(5000*(bit.Height-i-48)/578))); if (Dest^.r=255)and(Dest^.g=0)and(Dest^.b=0) then memo3.Lines.Add(floattostr(round(100*(j-57)/112)/100)+' '+floattostr(round(5000*(bit.Height-i-48)/578))); Inc(Dest); end; end; Button2.Click; bit.Free; end; |
Создаем тип в формате RGB Задаем переменные Загружаем отсканированное изображение Очищаем Memo Сканируем изображение на наличие цветных точек Сохраняем координаты: найденной зеленой точки, синей точки, красной точки Сортируем координаты по возрастанию |
Процедура сортировки:
|
procedure TForm1.Sort(memo:tmemo); var xmin, I,k,xt: Integer; begin memo4.Clear; xmin:=1; for k := 1 to 900 do begin for I := 0 to memo.Lines.Count - 1 do begin xt:=trunc(100*strtofloat(GetToken(memo.Lines.Strings[i],' ',1))); if xmin=xt then memo4.Lines.Add(memo.Lines.Strings[i]); end; Inc(xmin); end; memo.Text:=memo4.Text; end; procedure TForm1.Button2Click(Sender: TObject); var xmin, I,k,xt: Integer; begin memo4.Clear; xmin:=strtoint(GetToken(memo1.Lines.Strings[0],' ',1)); for k := 1 to 8 do begin for I := 0 to memo1.Lines.Count - 1 do begin xt:=strtoint(GetToken(memo1.Lines.Strings[i],' ',1)); if xmin=xt then memo4.Lines.Add(memo1.Lines.Strings[i]); end; Inc(xmin); end; memo1.Text:=memo4.Text; Sort(memo2); Sort(memo3); end; |
Получим координаты узловых точек в масштабе осей графика (Рис.3.). Полученные данные, в дальнейшем, можно будет аппроксимировать для получения аналитического вида функции релаксации напряжений.
Разработанная программа позволяет анализировать любой график, находить координаты узловых точек, и отображать их в масштабе анализа экспериментальных данных.осей графика, что дает исследователю мощный алгоритм
Рис. 4. Результаты компьютерного анализа графиков
Литература
1. Джунисбеков Т.М., Кестельман В.Н., Малинин Н.И.. Релаксация напряжений в вязкоупругих материалах. - Алматы: ?ылым, 1998. -308с.
2. Nevzorov V. Delphi Russian Knowledge Base. -Chicago, USA. -2007, more than 4000 p.