Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Есть две точки соединённые линией.


Автор: Kaban4eG 10.2.2009, 13:20
У меня есть две точки с координатами соединённые линией, на самих точках я построил круг, но мне нужно чтоб он по всей линии строился)))

Извините если что за язык, я с України.

Автор: Snowy 10.2.2009, 14:57
Вопрос не совсем понятен.
Но думаю, что нужно вот это:
Код

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    x1, y1: Integer; // координаты первой точки
    x2, y2: Integer; // координаты второй точки
    cx, cy, r:   integer; // координаты центра круга и радиус
  end;

var Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
  x1 := Random(Width); // Случайно задаём координаты двух точек
  y1 := Random(Height);
  x2 := Random(Width);
  y2 := Random(Height);
  cx := (x1 + x2) div 2; // Вычисляем координаты центра круга
  cy := (y1 + y2) div 2;
  r := Round(Sqrt(Sqr(x2 - x1) + Sqr(y2 - y1))) div 2; // вычисляем радиус круга
end;

procedure TForm1.FormPaint(Sender: TObject);
begin // рисуем нашу картинку на форме
  Canvas.Ellipse(cx - r, cy - r, cx + r, cy + r); // круг 
  Canvas.MoveTo(x1, y1); // соединяющая линия
  Canvas.LineTo(x2,y2);
  Canvas.Ellipse(x1-2, y1-2, x1+2, y1+2); // точки
  Canvas.Ellipse(x2-2, y2-2, x2+2, y2+2);
  Canvas.Ellipse(cx-2, cy-2, cx+2, cy+2);
end;

Автор: Kaban4eG 11.2.2009, 00:18
user posted image

Автор: Kaban4eG 11.2.2009, 00:38
Как здесь картинку загрузить? сообщение сверху не удачная попытка.
Мне не так нужно. Ты сделал 1 круг на всю длину, а мне нужно построить круг в первой точки с любым радиусам и протянуть єво до второй точки (круг должен строится во всех пикселях линии). И выйдет такой прямоугольник с выдутыми краями.

Автор: Qu1nt 11.2.2009, 10:32
А зачем так? Не проще соединить два круга линиями?

Автор: Kaban4eG 11.2.2009, 12:30
У меня задание: "Построение эквидистанты вокруг заданного многоугольника".
Я уже всё сделал, осталось кругом зарисовать)))  Мне нужно чтобы зарисовано было))) 

Автор: Snowy 11.2.2009, 12:58
Правильно поставленая задача - наполовину решённая.
А в твоей только набор слов и никакой постановки задачи.
Ну и как тебя понимать?

Цитата
У меня есть две точки с координатами соединённые линией, на самих точках я построил круг, но мне нужно чтоб он по всей линии строился
Из вопроса ясно, что тебе нужен круг на всю линию.


Цитата(Kaban4eG @  11.2.2009,  00:38 Найти цитируемый пост)
нужно построить круг в первой точки с любым радиусам и протянуть єво до второй точки
Круг невозможно тянуть - он круглый.


Цитата(Kaban4eG @  11.2.2009,  00:38 Найти цитируемый пост)
(круг должен строится во всех пикселях линии). И выйдет такой прямоугольник с выдутыми краями.
Тут уже немного яснее.
То есть в каждой точке отрезка, тебе нужно построить окружность фиксированного радиуса.


Цитата(Kaban4eG @  11.2.2009,  12:30 Найти цитируемый пост)
"Построение эквидистанты вокруг заданного многоугольника".
Ну и где здесь многоугольник? Если строить эквидистанту от прямой, то круг тут совсем не нужен, а как заметил Qu1nt, строятся 2 параллельные линии, соединённые по краям полукругом.
Но это в случае прямой. В случае многоугольника всё намного сложнее.

Автор: Kaban4eG 11.2.2009, 13:20
Цитата

(круг должен строится во всех пикселях линии). И выйдет такой прямоугольник с выдутыми краями.
Тут уже немного яснее.
То есть в каждой точке отрезка, тебе нужно построить окружность фиксированного радиуса. 


Вот єто мне и нужно. А так как сказал Qu1nt нужно много дописывать и сложнее. Я вечером выкину прогу, щас ухожу на практику. Мне просто тяжело объяснить на русском. Большое спасибо что хотите понять и помогаете)))  smile  

Автор: Snowy 11.2.2009, 13:31
Это будет совсем не эквидистанта.
Таким способом ты нарисуешь цилиндр, а не то, что хочешь.
Чтобы нарисовать эквидистанту к прямой, нужно делать именно, как я писал:
Цитата(Snowy @  11.2.2009,  12:58 Найти цитируемый пост)
строятся 2 параллельные линии, соединённые по краям полукругом.

Автор: Kaban4eG 12.2.2009, 01:23
Здесь программа для построения многоугольника. Так  как Ты, Snowy, предлогаеш, я сделать не смог. Будем надеяться что у тебя выйдет)))

Автор: AntonN 12.2.2009, 01:40
если нужно именно по картинке, можно напролом, но это некрасиво smile
Код

procedure TForm1.Button1Click(Sender: TObject);
  function get_long(x1,y1,x2,y2:double):double;
  begin
    result:=sqrt(sqr(abs(x1-x2)) + sqr(abs(y1-y2)));
  end;
var p1,p2:tpoint; r,i,l:integer; dx,dy:double;
begin
 p1.X:=100;
 p1.Y:=100;
 p2.X:=350;
 p2.Y:=200;
 r:=24;

 canvas.Brush.Style:=bssolid;
 canvas.Brush.Color:=clblack;
 l:=trunc(get_long(p1.X,p1.Y,p2.X,p2.Y));
 dx:=(p2.X-p1.X)/l;
 dy:=(p2.y-p1.y)/l;
 for i:=0 to l do begin
  canvas.Ellipse( p1.X+round(dx*i)-r,p1.y+round(dy*i)-r,p1.X+round(dx*i)+r,p1.y+round(dy*i)+r );
 end;
end;

Автор: Kaban4eG 12.2.2009, 01:56
 smile  smile  smile 
Большое спасибо, єто то что надо, и нормально смотрится)))
 smile  smile  smile 

Автор: Kaban4eG 15.2.2009, 03:10
Одна проблемка есть, у меня по циклу рисует, строит нормально, тока последняя линия не замыкает многоугольник, ее в центр тянет почему то. 
Вот программа, посмотрите пожалуйста, я там заблокировал кусок, он рабочий, просто чтоб видеть как в центр сворачивает.

Автор: AntonN 16.2.2009, 01:16
Kaban4eG, выложи готовый скриншот, а то не понять.

Автор: Kaban4eG 16.2.2009, 01:36
http://ipicture.ru/

я строил квадрат а мне .....

Автор: AntonN 16.2.2009, 01:49
Код

for i:=1 to k do
begin
 p1.X:=xx[i]+250;
 p1.Y:=250-yy[i];
 p2.X:=xx[i+1]+250;
 p2.Y:=250-yy[i+1];

попробуй позадавать 10 вершин, будет интересно smile
и так же нужно циклить с 1 до k, но при i=(k) для второй вершины p2 брать первый элемент из массива, а не xx[i+1] (чтобы завершить рисование из последней вершины к первой)

Автор: Kaban4eG 16.2.2009, 01:49
http://pic.ipicture.ru/uploads/090216/KK49f47wAf.jpg

Автор: Kaban4eG 16.2.2009, 02:13
Цитата

попробуй позадавать 10 вершин, будет интересно smile


долго думает но строит, тока опять же последнюю не замыкает.

Добавлено через 10 минут и 49 секунд
Цитата

попробуй позадавать 10 вершин, будет интересно smile


долго думает но строит, тока опять же последнюю не замыкает.

Добавлено через 12 минут и 43 секунды
Цитата

попробуй позадавать 10 вершин, будет интересно smile


долго думает но строит, тока опять же последнюю не замыкает. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)