Подскажите пожалуйста. У меня даны координаты точек. Эти точки нужно последовательно соединить с помощью DrawPoly. координат много (приведу в пример несколько): (7,0), (7,-1), (6.5,-2.5) и т.д. Эти координаты нужно как-то переводить в пиксели?Я правильно понимаю?Если да,то как это сделать?
volvo
12.05.2007 4:18
Цитата
Эти координаты нужно как-то переводить в пиксели?
Естественно... DrawPoly работает с массивом TPoint-ов, представляющих собой координаты точек в пикселях...
Цитата
как это сделать?
Ну, для начала - пробежать по всему массиву, найти мин/макс значение для X и для Y, чтобы масштабировать изображение... Допустим, твой вариант:
Цитата
(7,0), (7,-1), (6.5,-2.5)
Xmin = 6.5; Xmax = 7; то есть, DX(разброс значений X) = 0.5
Ymin = -2.5; Ymax = 0; DY = 2.5
Теперь решаешь, на каком участке экрана ты хочешь видеть свой полигон... Допустим, на полный экран... Тогда mx = 640 / DX; my = 480 / DY; теперь еще раз идем по массиву и КАЖДОЕ значение X меняем на ((X - Xmin)*mx), и каждое значение Y - на ((Y - Ymin)*my)
Все, теперь можно отчерчивать полигон с помощью DrawPoly...
По-моему, ничего не перепутал.
Sensitive
12.05.2007 4:36
спасибо, я попробую. О результате отчитаюсь:)
Sensitive
13.05.2007 17:17
у меня не получается...чего-то не понимаю наверное... посмотрите что не так,пожалуйста. Изображение "вверх-ногами" выводится:(
const x:array[1..35] of real=(7,8,7,5,2,-1,-3,-5,-5,-6,-7,-7.5,-10,-9.5,-7,-5,-5,-4,-4,-5,-4,-3,-3,-2,-2, 1,3.5,5,6,5,6,7,6.5,7,7); y:array[1..35] of real=(-3,-2,2,3,3,3,4,6,7,6,6,5.5,5.5,4.5,4,2,0,-2,-5.5,-6.5,-6.5,-5.5,-3,-2,-1, -1,-0.5,-2,-5.5,-6.5,-6.5,-5.5,-2.5,-1,0); var xmin,xmax,ymin,ymax,dx,dy,mx,my:real; i:byte; a:array[1..35] of PointType; begin setcolor(white); xmin:=-10; xmax:=8; dx:=18; ymin:=-6.5; ymax:=7; dy:=13.5; mx:=640/dx; my:=480/dy; for i:=1 to 35 do begin x[i]:=(x[i]-xmin)*mx; y[i]:=(y[i]-ymin)*my; end; for i:=1 to 35 do begin a[i].x:=trunc(x[i]); a[i].y:=trunc(y[i]); end; drawpoly(35,a); readln; CloseGraph; end.
volvo
13.05.2007 17:27
Так лучше?
uses graph; const x:array[1..35] of real=( 7,8,7,5,2,-1,-3,-5,-5,-6,-7,-7.5,-10,-9.5,-7,-5,-5,-4,-4,-5,-4,-3,-3, -2,-2,1,3.5,5,6,5,6,7,6.5,7,7); y:array[1..35] of real=( -3,-2,2,3,3,3,4,6,7,6,6,5.5,5.5,4.5,4,2,0,-2,-5.5,-6.5,-6.5,-5.5,-3, -2,-1,-1,-0.5,-2,-5.5,-6.5,-6.5,-5.5,-2.5,-1,0); var xmin,xmax,ymin,ymax,dx,dy,mx,my:real; i:byte; a:array[1..36] of PointType;
for i:=1 to 35 do begin x[i]:=(x[i]-xmin)*mx; y[i]:=getmaxy - (y[i]-ymin)*my; { <--- "Переворачиваем" изображение } end;
for i:=1 to 35 do begin a[i].x:=trunc(x[i]); a[i].y:=trunc(y[i]); end;
a[36] := a[1]; { <--- Чтобы полигон был замкнутым } drawpoly(36,a); readln; CloseGraph; end.
Sensitive
13.05.2007 17:37
Намного лучше,спасибо! P.S. "замкнуть" полигон вообще забыла...(
Sensitive
13.05.2007 20:43
Не понимаю... Изображение это я получила...(собака)... осталось "сделать" ей лапы...не получается... помогите пожалуйста и объясните если сможете... вот что у меня получается... одна лапа:
Procedure leg1; const x:array [1..6] of real=(5.5,5.5,4.5,3.5,4.5,5); y:array [1..6] of real=(-4.5,-5.5,-6.5,-6.5,-5.5,-2); var xmin,xmax,ymin,ymax,dx,dy,mx,my:real; begin xmin:=3.5; xmax:=5.5;dx:=2; ymin:=-6.5; ymax:=-2;dy:=4.5; mx:=85/dx; my:=160/dy; for i:=1 to 6 do begin x[i]:=(x[i]-xmin)*mx; y[i]:=getmaxy-(y[i]-ymin)*my; end; for i:=1 to 6 do begin b[i].x:=trunc(x[i]); b[i].y:=trunc(y[i]); end; b[7]:=b[1]; drawpoly(7,b); end;
и вторая:
Procedure leg2; const x:array[1..6] of real=(-2,-1.5,-2.5,-3.5,-2.5,-3); y:array[1..6] of real=(-2,-5.5,-6.5,-6.5,-5.5,-3); var xmin,xmax,ymin,ymax,dx,dy,mx,my:real; begin xmin:=-3.5; xmax:=-1.5;dx:=2; ymin:=-6.5; ymax:=-2;dy:=4.5; mx:=150/dx; my:=280/dy; for i:=1 to 6 do begin x[i]:=(x[i]-xmin)*mx; y[i]:=getmaxy-(y[i]-ymin)*my; end; for i:=1 to 6 do begin c[i].x:=trunc(x[i]); c[i].y:=trunc(y[i]); end; c[7]:=c[1]; drawpoly(7,c); end;
на второй ноге вообще не получается...ноги находятся в начале экрана...а мне надо прикрепить их к изображению собаки с помощью DrawPoly...
volvo
14.05.2007 15:31
Обязательно надо разбивать отрисовку на подпрограммы? Никак нельзя отрисовать "не отрывая карандаша" от бумаги весь рисунок?
Sensitive
14.05.2007 15:56
неа, а этом теперь и стоит проблема... именно отдельно идет собачка, отдельно одна нога,и отдельно другая нога...
Sensitive
15.05.2007 19:40
А может нужно как-то эту процедуру (построения ног) "совместить" с координатной сеткой. я у вас спрашивала про нее уже... вот вы мне ответили...
x:=0; while x<getmaxx do begin line(x,0,x,getmaxy); x:=x+20; end; y:=0; while y<getmaxy do begin line(0,y,getmaxy,y); y:=y+20; end;
P.S. Помогите плиз с этим рисунком... завтра сдавать уже:( не могу придумать как эти ноги "прицепить" собаке с помощью DrawPoly!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.