ребят, помогите, очень срочно нужно. пишу курсовую "Алгоритмы на графах" там нужно визуально представить граф. Если граф не взвешенный (т.е. не заданы стоимости дуг), я такой граф нарисовать могу, но если взвешенный - нужно чтобы ещё на дуге отображалась ещё и её стоимость, а я не знаю как вычислить середину дуги чтобы туда вставить текст (вес дуги). помогите пожалуйста. вот код процедуры, рисующей не взвешенный граф:
procedure Draw_Graf; var i,j:integer; //для цикла cntrx,cntry:integer; //центр формы R,rm:integer; //радиус вспомогательной окружности и радиус вершины x,y:integer; //координаты вершины l,b:integer; // левый нижний угол области вывода графа w,h:integer; // ширина и высота области вывода px,py: integer; //координаты вершин на поверхности формы begin Draw_Form.Canvas.Rectangle(0,0,Draw_Form.ClientWidth,Draw_Form.ClientHeight); cntrx := round(Draw_Form.ClientWidth/2); cntry := round(Draw_Form.ClientHeight/2); R := round(cntrx/1.5); rm := 10; Draw_Form.Canvas.brush.color := clWhite; Draw_Form.canvas. pen. color := clWhite; Draw_Form.canvas. pen. width := 1; Draw_Form.Canvas.Ellipse(cntrx-R,cntry-R,cntrx+R,cntry+R); Draw_Form.canvas. pen. color := clBlack; for i:=1 to n do for j:=1 to n do begin if j>i then begin if a[i,j]=1 then begin Draw_Form.Canvas.MoveTo(x,y); px:= round(cntrx+R*cos(j*2*pi/n)); py:= round(cntry+R*sin(j*2*pi/n)); Draw_Form.Canvas.LineTo(px,py); end; end; x := round(cntrx+R*cos(i*2*pi/n)); y := round(cntry+R*sin(i*2*pi/n)); Draw_Form.Canvas.Ellipse(x-rm,y-rm,x+rm,y+rm); Draw_Form.Canvas.TextOut(x-4,y-6,inttostr(i)); end; end; end;
IUnknown
20.06.2011 0:01
Что значит "не знаешь"? Сложить начало/конец и поделить пополам, для каждой координаты:
Draw_Form.Canvas.LineTo(px,py); // Нарисовал дугу Draw_Form.Canvas.TextOut((x + px) div 2, (y + py) div 2, 'Text'); // подписал ее
, 'Text' заменить на нужное...
klik1602
20.06.2011 1:09
=)) блин) а мне почему-то показалось, что нужно отнимать (x-px) div 2)) а нужно было складывать))) спасибо за помощь))) спасли))
IUnknown
20.06.2011 3:11
Цитата
а мне почему-то показалось, что нужно отнимать (x-px) div 2))
Вообще-то вот так: X = X1 + (X2 - X1) div 2
Но ... X1 + (X2 - X1) div 2 = 2 * (X1 div 2) + (X2 div 2) - (X1 div 2) = (X1 div 2) + (X2 div 2) = чему? Правильно: (X1 + X2) div 2
klik1602
20.06.2011 3:16
чистая математика)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.