Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.12.2011, 22:24
adik adik вне форума
Прохожий
 
Регистрация: 10.12.2011
Сообщения: 5
Репутация: 10
По умолчанию Помогите с построением вершин (графы)

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    ColorDialog1: TColorDialog;
    Image1: TImage;
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  count:integer=0;
  pointmassiv:array of TPoint;
  r:integer=20;
   s:array of array of integer;
   v:array of array of integer;
implementation

{$R *.dfm}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);

begin
ColorDialog1.Color:=clBlue;
Image1.Canvas.Brush.color:=form1.colordialog1.color;
Image1.Canvas.Ellipse((x-r),(y-r),(x+r),(y+r));
Image1.Canvas.Textout(x-4,y-6,inttostr(count));
inc(count);
SetLength(pointmassiv,count);
SetLength(s,count,count);
setlength(v,count,count);
pointmassiv[count-1].x:=x;
pointmassiv[count-1].y:=y;

end;
procedure TForm1.Button1Click(Sender: TObject);
  var kol,i:integer;
  begin
  Image1.Canvas.Brush.Color:=clWhite;
  Image1.Canvas.FloodFill(50,50,clPurple,fsBorder);
  Image1.Canvas.Brush.Color:=clBlack;


  Randomize;
  kol:=StrToInt(form1.edit1.text);
  for i:=1 to kol do

  Image1MouseDown(Sender,mbLeft,[ssLeft],50+random(Image1.Width-100),50+random(Image1.Height-100));

end;

end.

lmikle: пользуемся тегами!!!


Создает вершины(то есть круги) к которым в будущем будут проведены узлы и тем самым созданы графы
Как мне сделать так что бы от одной вершине к другой было какое то ограничение на расстояние то есть что бы они не появлялись впритык.
Изображения
Тип файла: jpg 1.JPG (68.7 Кбайт, 12 просмотров)

Последний раз редактировалось lmikle, 14.12.2011 в 22:27.
Ответить с цитированием
  #2  
Старый 14.12.2011, 22:31
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,024
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Сохранять координаты центров кругов в массиве и при создании нового круга проверять, что расстояние от его центра до центра любого уже нарисованного составляет не менее (2*R + D) по обеим координатам, где R - радиус отрисовки круга, D - поправочный коэф. для того, что бы круги не касалист друг друга (т.е. минимальная длинна линии между кругами).

ЗЫ. Кстати, рекомендую сначала рисовать линии (связи), а уже сверху них рисовать круги (вершины), что бы на заморачиваться с вычислением координат начала/конца линий на границах кругов
Ответить с цитированием
  #3  
Старый 14.12.2011, 22:40
adik adik вне форума
Прохожий
 
Регистрация: 10.12.2011
Сообщения: 5
Репутация: 10
По умолчанию

В центре кругов выводится их номер, значит
Image1.Canvas.Textout(x-4,y-6,inttostr(count));
x-4, y-6 каждого круга и будут координаты их центров, получается мне нужно создать массив поинтов еще один и записать для каждого такие координаты.Потом циклом пробежатся по всем координатам с твоим условием, я правильно понял?

А что разве будет намного сложнее начать с кругов? я конечно еще не думал насчет узлов, но я так понимаю, что я буду просто проводить линию и буду брать за начало пускай тот же центр круга 1 и к центру круга 2.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter