Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.26;
Скачать: CL | DM;

Вниз

Line   Найти похожие ветки 

 
Bobby Digital ©   (2004-12-10 15:57) [0]

Как имея две точки A(x,y) и B (x,y) связать их линией?


 
begin...end ©   (2004-12-10 16:03) [1]

> Bobby Digital ©   (10.12.04 15:57)

Задача имеет бесчисленное множество решений.


 
Bobby Digital ©   (2004-12-10 16:05) [2]

Замечательно, приведи хотя бы один пример


 
Семен Сорокин ©   (2004-12-10 16:06) [3]


> приведи хотя бы один пример

with SomeaCanvas do begin
MoveTo(A.X, A.Y);
LineTo(B.X, B.Y);
end;


 
Bobby Digital ©   (2004-12-10 16:13) [4]


> Семен Сорокин ©

Сенкс


 
ninja ©   (2004-12-10 16:16) [5]

я вот как делал. может, код корявый, но я только так умею :)
параметр mas - ето указатель на дин. массив из точек, в который записываем их координаты. x0,y0 - откуда, x1, y1 - куда.

procedure DoLine(mas: PPointArray; x0, y0, x1, y1: Integer);
label Quit;
var
 counter: integer;
 k:       Real;     //коэффициент наклона прямой
begin                      
 counter:=0;              
 SetLength(mas^, 10000);   //с запасом на всякий случай
                           
 if (x1-x0) = 0 then begin //прямая вида х=у  
   while y0<>y1 do begin  
     if y0<y1 then inc(y0) else dec(y0);
     mas^[counter].x:=x0;
     mas^[counter].y:=y0;
     inc(counter);
   end;
   goto Quit;              
 end;

 if (y1-y0) = 0 then begin //прямая вида у=х
   while x0<>x1 do begin
     if x0<x1 then inc(x0) else dec(x0);
     mas^[counter].x:=x0;
     mas^[counter].y:=y0;
     inc(counter);
   end;
   goto Quit;
 end;

 if abs(x1-x0)>=abs(y1-y0) then begin //ф-ция вида у(х)=kx
   k:=(y1-y0)/(x1-x0);
   while abs(x1-x0)>0 do begin
     if x0<x1 then inc(x0);
     if x0>x1 then dec(x0);
     mas^[counter].x:=x0;
     mas^[counter].y:=y1+round((x0-x1)*k);  
     inc(counter);
   end;
   goto Quit;
 end;

 if abs(x1-x0)<abs(y1-y0) then begin //ф-ция вида х(у)=ky
   k:=(x1-x0)/(y1-y0);
   while abs(y1-y0)>0 do begin
     if y0<y1 then inc(y0);
     if y0>y1 then dec(y0);
     mas^[counter].y:=y0;
     mas^[counter].x:=x1+round((y0-y1)*k);
     inc(counter);
   end;
 end;

Quit:
 SetLength(mas^, counter);
end;


 
begin...end ©   (2004-12-10 16:20) [6]

> [2] Bobby Digital ©   (10.12.04 16:05)

> Замечательно, приведи хотя бы один пример

Один уже привели, приведу ещё один:

var
 A, B: TPoint;
 Canvas: TCanvas;
begin
 ...
 Canvas.PolyLine([A, Point(A.X + 5, A.Y + 5), B])
end.



Страницы: 1 вся ветка

Текущий архив: 2004.12.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
3-1101660393
midavik
2004-11-28 19:46
2004.12.26
Запись через параметр значение null в поле типа integer


14-1102435800
RDA
2004-12-07 19:10
2004.12.26
расчет зарплаты по сдельной системе оплаты труда


1-1102972333
STK
2004-12-14 00:12
2004.12.26
Загруженность процессора(100%) процессом(как облегчить)


4-1099505032
CAMCOH
2004-11-03 21:03
2004.12.26
Как программно проскролить текст в memo ?


1-1103047048
mixamixa
2004-12-14 20:57
2004.12.26
Пузырьковая сортировка.