Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.035 c