Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ графика

Автор: Formula 14.04.2010 0:44

вывести N-ое количество линий, пересекающих прямоугольник.

помогите сделать так, что б линии начинали выводится не от средины экрана,а от начала =(((


 Program Line7;
Uses Graph,CRT;
label 1;
var
x0,y0,x00,y00,x1,y1,x2,y2,g,a,b,n,i:integer;
driver,regim,error:integer;

Begin
clrscr;
Detectgraph(driver,regim);
Initgraph(driver,regim,'G:\TP7\BGI');
Error:=GraphResult;
if Error <> grOK then
begin
writeln(GraphErrorMsg(Error));
Halt(Error)
end;
readln(n);
ClearDevice;
SetColor(LightGreen);
Rectangle(5,478,300,200);
SetColor(Red);
SetLineStyle(0,0,1);
x0:=0; y0:=480;
x00:=640; y00:=0;
Line(x0,y0,x00,y00);
g:=x00 div n;
for i:=1 to n do begin
Line(x0,y0,x00+g,y00+g);
g:=g+15;
end;

Readln;
end.

Автор: Freedom 14.04.2010 1:36

Не понял вопроса как это не от середины экрана, из начала?

Автор: Formula 14.04.2010 2:01

введите 20 штук....нужно что б они выводились начиная от Line(0,480,0,0) до Line(0,480,640,480)

Автор: Freedom 14.04.2010 2:19

x00:=640; попробуйте заменить на x00:=20;

Автор: Formula 14.04.2010 2:29

2 линии выводит. остальные я так подозреваю уходят за линию(0,480,0,0)

Автор: Freedom 14.04.2010 2:30

Вот моя версия делал подругому


program p1;
uses graph;
var r,i,x0,y0,x00,y00,driver,mode,n,z:integer;
l:real;
begin
readln(n);
driver:=detect;
initgraph(driver,mode,'c:\bgi');
rectangle(5,478,300,200);
x0:=0;
y0:=480;
x00:=20;
r:=100;
z:=0;
setcolor(red);
for i:=1 to n do begin
x00:=round(x00+i+(640/n));
If (r*r-(x00)>0) then y00:=-round(sqrt(r*r-x00))-480;
line(x0,y0,x00,y00);
end;
readln;
end.



Автор: Formula 14.04.2010 2:39

тоже вариант))) большое спасибо give_rose.gif

Автор: volvo 14.04.2010 14:50

Еще лучше - не считать себя пророком, и не предполагать, что все видеокарты имеют только разрешение 640*480. Есть и другие разрешения, кстати. Может инициализироваться режим 640*350 - тогда половины картинки вообще не будет видно. Не просто так придумали функции GetMaxX и GetMaxY. Сначала получаем с их помощью максимальные значения X и Y соответственно, а потом уже используем эти значения в расчетах. Тогда неожиданностей будет меньше.

Автор: TarasBer 14.04.2010 15:01

Можно тупо жёстко устанавливать режим (Driver := VGA; Mode := VGAhi или mov ax, $0013; int $10), и всё делать под него (эти режимы нынче есть у всех). Я так делал. Но при переходе под винду мне это дало непрятности - я оказался не готов к способности окон менять размеры и к тому, что у всех разное разрешение экрана.

Автор: Romtek 22.04.2010 17:26

В графике (геометрии) следует соблюдать пропорции. Их можно достичь, если использовать относительные величины, такие как GetMaxX, GetMaxY, не зависящие от устанавливаемого режима графики.

Так что нужно перевести все величины в зависимость от этих функций. Допустим, длина отрезка линии, равная 0.15*GetMaxX.
Возня же с абсолютными величинами неоправдана и ведёт ко множеству проблем с пропорциями при любых изменениях в программе.