IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Нарисовать взвешенный граф
klik1602
сообщение 19.06.2011 19:47
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 49
Пол: Женский
Реальное имя: Натали

Репутация: -  1  +


ребят, помогите, очень срочно нужно. пишу курсовую "Алгоритмы на графах" там нужно визуально представить граф. Если граф не взвешенный (т.е. не заданы стоимости дуг), я такой граф нарисовать могу, но если взвешенный - нужно чтобы ещё на дуге отображалась ещё и её стоимость, а я не знаю как вычислить середину дуги чтобы туда вставить текст (вес дуги). помогите пожалуйста. вот код процедуры, рисующей не взвешенный граф:
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; 
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 26.07.2025 11:18
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"