Помощь - Поиск - Пользователи - Календарь
Полная версия: Нарисовать взвешенный граф
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
klik1602
ребят, помогите, очень срочно нужно. пишу курсовую "Алгоритмы на графах" там нужно визуально представить граф. Если граф не взвешенный (т.е. не заданы стоимости дуг), я такой граф нарисовать могу, но если взвешенный - нужно чтобы ещё на дуге отображалась ещё и её стоимость, а я не знаю как вычислить середину дуги чтобы туда вставить текст (вес дуги). помогите пожалуйста. вот код процедуры, рисующей не взвешенный граф:
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
Что значит "не знаешь"? Сложить начало/конец и поделить пополам, для каждой координаты:
    Draw_Form.Canvas.LineTo(px,py); // Нарисовал дугу
Draw_Form.Canvas.TextOut((x + px) div 2, (y + py) div 2, 'Text'); // подписал ее
, 'Text' заменить на нужное...
klik1602
=)) блин) а мне почему-то показалось, что нужно отнимать (x-px) div 2)) а нужно было складывать))) спасибо за помощь))) спасли))
IUnknown
Цитата
а мне почему-то показалось, что нужно отнимать (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
чистая математика)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.