IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> соединение точек с помощью DrawPoly
Sensitive
сообщение 12.05.2007 0:05
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 132
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


Подскажите пожалуйста.
У меня даны координаты точек. Эти точки нужно последовательно соединить с помощью DrawPoly. координат много (приведу в пример несколько):
(7,0), (7,-1), (6.5,-2.5) и т.д.
Эти координаты нужно как-то переводить в пиксели?Я правильно понимаю?Если да,то как это сделать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.05.2007 0:18
Сообщение #2


Гость






Цитата
Эти координаты нужно как-то переводить в пиксели?
Естественно... 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...

По-моему, ничего не перепутал. unsure.gif

 К началу страницы 
+ Ответить 
Sensitive
сообщение 12.05.2007 0:36
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 132
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


спасибо, я попробую. О результате отчитаюсь:)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Sensitive
сообщение 13.05.2007 13:17
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 132
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


у меня не получается...чего-то не понимаю наверное... посмотрите что не так,пожалуйста. Изображение "вверх-ногами" выводится:(
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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.05.2007 13:27
Сообщение #5


Гость






Так лучше?
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;

var
gd, gm: integer;

begin
initgraph(gd, gm, '');
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]:=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 13:37
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 132
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


Намного лучше,спасибо!
P.S. "замкнуть" полигон вообще забыла...(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Sensitive
сообщение 13.05.2007 16:43
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 132
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


Не понимаю... Изображение это я получила...(собака)... осталось "сделать" ей лапы...не получается... помогите пожалуйста и объясните если сможете...
вот что у меня получается...
одна лапа:
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...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.05.2007 11:31
Сообщение #8


Гость






Обязательно надо разбивать отрисовку на подпрограммы? Никак нельзя отрисовать "не отрывая карандаша" от бумаги весь рисунок?
 К началу страницы 
+ Ответить 
Sensitive
сообщение 14.05.2007 11:56
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 132
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


неа, а этом теперь и стоит проблема... именно отдельно идет собачка, отдельно одна нога,и отдельно другая нога...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Sensitive
сообщение 15.05.2007 15:40
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 132
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


А может нужно как-то эту процедуру (построения ног) "совместить" с координатной сеткой. я у вас спрашивала про нее уже... вот вы мне ответили...
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! sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.04.2024 10:31
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"