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

> ВНИМАНИЕ!

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

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Нарисовать взвешенный граф
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


Что значит "не знаешь"? Сложить начало/конец и поделить пополам, для каждой координаты:
    Draw_Form.Canvas.LineTo(px,py); // Нарисовал дугу
Draw_Form.Canvas.TextOut((x + px) div 2, (y + py) div 2, 'Text'); // подписал ее
, 'Text' заменить на нужное...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


=)) блин) а мне почему-то показалось, что нужно отнимать (x-px) div 2)) а нужно было складывать))) спасибо за помощь))) спасли))

Сообщение отредактировано: klik1602 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


Цитата
а мне почему-то показалось, что нужно отнимать (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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


чистая математика)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 29.04.2024 3:41
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name