Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2010, 11:47   #1
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
Плохо График кардиограммы

Всем добрый день! Подскажите пожалуйста, вот у меня есть код

Код:
procedure TForm4.btn2Click(Sender: TObject);
var
     prev: tpoint;
     center, i, delta: integer;
begin
imggraph.Visible:=True;
lbl4.Visible:=True;
lbl5.Visible:=True;
lbl6.Visible:=True;
lbl7.Visible:=True;
lbl8.Visible:=True;
Try
                points[1] := strtoint(edta.Text);
                points[2] := 0;
                points[3] := 0;
                points[4] := strtoint(edtb.Text);
                points[5] := strtoint(edtc.Text);
                points[6] := strtoint(edtd.Text);
                points[7] := 0;
                points[8] := 0;
                points[9] := strtoint(edte.Text);
     except on EConvertError do begin
                MessageBox(0, 'Неправильное число', 'Ошибка', MB_OK);
                exit;
     end;
     end;

     if (points[1] < 5) or (points[1] > 35) or
        (points[4] < -90) or (points[4] > 0) or
                (points[5] < 60) or (points[5] > 100) or
                        (points[6] < -100) or (points[6] > 0) or
                                (points[9] < 0) or (points[9] > 40) then begin
                MessageBox(0, 'Неправильный диапазон', 'Ошибка', MB_OK);
                exit;
     end;

     imggraph.Canvas.Rectangle(0, 0, imggraph.Width, imggraph.Height);
     center := imggraph.Height div 2;
     delta := imggraph.Width div 36;
     prev.x := delta * 3;
     prev.y := center;
      
     imggraph.Canvas.MoveTo(0, center);
     imggraph.Canvas.LineTo(delta, center);
    imggraph.Canvas.Arc(delta, center - points[1], 3 * delta, center + points[1], 3 * delta, center, delta, center);
     for i := 3 to 8 do begin
          imggraph.Canvas.PenPos := prev;
          prev.x := prev.x + delta;
          prev.y := center - points[i];
          imggraph.Canvas.LineTo(prev.x, prev.y)
     end;
     imggraph.Canvas.Arc(9 * delta, center - points[9], 11 * delta, center + points[9], 11 * delta, center, 9 * delta, center);
     imggraph.Canvas.MoveTo(11 * delta, center);
     imggraph.Canvas.LineTo(13 * delta, center);
    imggraph.Canvas.Arc(13*delta, center - points[1], 15 * delta, center + points[1], 15 * delta, center, 13*delta, center);
    imggraph.Canvas.MoveTo(15*delta,center);
    prev.X:=15*delta;
       for i := 3 to 8 do begin
          imggraph.Canvas.PenPos := prev;
          prev.x := prev.x + delta;
          prev.y := center - points[i];
          imggraph.Canvas.LineTo(prev.x, prev.y)
     end;
     imggraph.Canvas.Arc(21 * delta, center - points[9], 23 * delta, center + points[9], 23 * delta, center, 21 * delta, center);
     imggraph.Canvas.MoveTo(23 * delta, center);
     imggraph.Canvas.LineTo(25*delta,center);
     imggraph.Canvas.Arc(25*delta, center - points[1], 27 * delta, center + points[1], 27 * delta, center, 25*delta, center);
    imggraph.Canvas.MoveTo(27*delta,center);
    prev.X:=27*delta;
       for i := 3 to 8 do begin
          imggraph.Canvas.PenPos := prev;
          prev.x := prev.x + delta;
          prev.y := center - points[i];
          imggraph.Canvas.LineTo(prev.x, prev.y)
     end;
     imggraph.Canvas.Arc(33 * delta, center - points[9], 35 * delta, center + points[9], 35 * delta, center, 33 * delta, center);
     imggraph.Canvas.MoveTo(35*delta,center);
     imggraph.Canvas.LineTo(36*delta,center);
     //                         А вот тут кончилось!
end;
И он строит воот такой график

Меня в принципе все устраивает)) все работает и строит все отлично, но Я хотел бы иметь возможность менять ширину комплекса QRS, то есть расстояние от зубца Q до S. Как сделать, если оно вообще возможно, я не врубаю... пока...) Был бы благодарен за помощь
Zibiv вне форума Ответить с цитированием
Старый 11.06.2010, 11:56   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Вы ресуете график по точкам. Просто измените координаты этих точек и график изменит вид. В чем проблема?
Sibedir вне форума Ответить с цитированием
Старый 11.06.2010, 12:01   #3
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
По умолчанию

Ну я пока понял как двиать Q и S вверх и вниз, а как двигать их в право в лево?)


prev.x := prev.x + delta; вот это менять надо, я так понимаю

Последний раз редактировалось Zibiv; 11.06.2010 в 12:11.
Zibiv вне форума Ответить с цитированием
Старый 11.06.2010, 12:29   #4
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Ну да. Только одно но. Следующий цикл четко привязан к конкретной координате, а не к концу предыдущего
Код:
imggraph.Canvas.Arc(9 * delta, center - points[9], 11 * delta, center + points[9], 11 * delta, center, 9 * delta, center);
Вам нужно будет изменить все эти константы (а лучше сделать их вычисляемыми).
Sibedir вне форума Ответить с цитированием
Старый 11.06.2010, 14:40   #5
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
По умолчанию

Хмммм... Как привязать imggraph.Canvas.Arc(9 * delta, center - points[9], 11 * delta, center + points[9], 11 * delta, center, 9 * delta, center) к предыдущей части. можно поподробнее?
Zibiv вне форума Ответить с цитированием
Старый 11.06.2010, 16:16   #6
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Ну вот вы когда карандашом ломаную рисуете, вы как делаете. Каждый следующий отрезок начинается с последней точки предидущего. Вам нужно хранить эту точку. Обратите внимание, переменная prev, впринципе, и есть такая точка.
Обобщая выше сказанное, имеем вместо
Код:
imggraph.Canvas.Arc(9 * delta, center - points[9], 11 * delta, center + points[9], 11 * delta, center, 9 * delta, center);
вот это
Код:
imggraph.Canvas.Arc(prev.x, center - points[9], prev.x+2*delta, center + points[9], prev.x+2*delta, center, prev.x, center);
prev.x := prev.x+2*delta;
И не ленитесь начать. Если бы вы начали хоть что-то исправлять, вы бы поняли, что это элементарно-просто.
Sibedir вне форума Ответить с цитированием
Старый 11.06.2010, 16:31   #7
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
По умолчанию

Спасибо! да я начал. просто немного не так делал, из-за этого у меня наоборот друг на друга все наезжало...
Zibiv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
График в C# Linore Общие вопросы .NET 12 01.07.2014 08:04
график ddeman666 Помощь студентам 1 03.06.2010 16:50
график ddeman666 Помощь студентам 1 02.06.2010 11:37
График Sasuke-cun Общие вопросы Delphi 0 12.12.2009 18:45
График xsexrexga Общие вопросы Delphi 1 27.01.2007 21:26