Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2010, 22:49   #1
Link1993
 
Регистрация: 20.12.2010
Сообщений: 2
По умолчанию Проблема с заресовкой невидимых линий

я написал прогу каторая будует геометричиские фигури...теперь надо зарисововать невидимые линии но я незнаю как...

кстати данние можно зфайлачитать... а можно вводить в стрынггрид координити точок...

вот то что я делал для зарисовки
var
Form1: TForm1;
x,y,z: array [1..100] of real;
x1: array [1..100] of integer;
y1: array [1..100] of integer;
t:array[1..2,1..100] of integer;
b: array [1..100] of Boolean;
k: real;
xc,yc,zc,zk:real;
const f=1/2; alfa=45;
implementation

{$R *.dfm}



procedure prih(x,y,z: real; var b:boolean);
var i,j:integer;
L,R,V,N:real;
xk1,yk1:integer;
begin
xc:=0;
yc:=0;
zc:=0;
for i:=1 to Form1.stringgrid1.rowcount-1 do
begin
xc:=xc+Unit1.x[i];
yc:=yc+Unit1.y[i];
zc:=zc+Unit1.z[i];
end;
xc:=xc/i;
yc:=yc/i;
zc:=zc/i;
{zk1:=unit1.z[1];
for i:=1 to form1.stringgrid1.rowcount-1 do
begin
if zk1<unit1.z[i] then zk1:=unit1.z[i]
end; }
b:=true;
if (z>zc) then
b:=False;
xk1:=0;
yk1:=0;
for i:=1 to form1.stringgrid1.rowcount-1 do
begin
if xk1>unit1.x[i] then xk1:=i;
if yk1>unit1.y[i] then yk1:=i;
end;
for i:=1 to Form1.stringgrid1.rowcount-1 do
if strtoint(Form1.stringgrid1.cells[1,xk1])*50=strtoint(Form1.stringgrid1.cel ls[1,i])*50 Then
b:=true;
for i:=1 to Form1.stringgrid1.rowcount-1 do
if strtoint(Form1.stringgrid1.cells[2,yk1])*50=strtoint(Form1.stringgrid1.cel ls[2,i])*50 Then
b:=True;
end;

procedure Fig;
var
Mal:array [1..100] of TPoint;
centr_x, centr_y: integer;
i,j:integer;
L,R,V,N:real;
begin
form1.PaintBox1.Canvas.Brush.Color: =clMenuText;
form1.PaintBox1.Canvas.Rectangle(0, 0,1000,1000);
centr_x:=Form1.PaintBox1.Width div 2;
centr_y:=Form1.PaintBox1.Height div 2;
for i:=1 to form1.stringgrid1.rowcount do
begin
mal[i].X:=centr_x+x1[i];
mal[i].Y:=centr_y+y1[i];
end;
for i:=1 to Form1.stringgrid1.rowcount-1 do
for j:=i+1 to Form1.stringgrid1.rowcount-1 do
begin
if mal[i].X>mal[j].X then l:=mal[j].X;
if mal[i].X<mal[j].X then r:=mal[j].X;
if mal[i].y<mal[j].y then n:=mal[j].y;
if mal[i].y>mal[j].Y then v:=mal[j].y;
end;
for i:=1 to Form1.stringgrid1.rowcount-1 do
begin
if ((mal[i].X=l) and (mal[i].y=n)) or ((mal[i].X=l) and (mal[i].y=v)) or
((mal[i].X=r) and (mal[i].y=n)) or ((mal[i].X=r) and (mal[i].y=v)) then
B[i]:=true;
end;
form1.PaintBox1.Canvas.Pen.Color:=c lBtnFace;
for i:=1 to form1.stringgrid2.rowcount do
begin
if (unit1.b[t[1,i]]) and (unit1.b[t[2,i]]) then begin
form1.PaintBox1.Canvas.MoveTo(mal[t[1,i]].X,mal[t[1,i]].Y);
form1.PaintBox1.Canvas.LineTo(mal[t[2,i]].X,mal[t[2,i]].Y);
end;
end;
end;


procedure proekcia(x,y,z: real; var x1,y1: integer);
begin
x1:=Round(x+0.5*-z*f*cos(alfa));
y1:=Round(y+0.5*-z*f*sin(alfa));
end;

procedure povoroty(x,y: real;var fi: real; var x22,y22: real);
begin
x22:=x*cos(fi)-y*sin(fi);
y22:=y*cos(fi)+x*sin(fi);
end;



procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=1 to stringgrid1.rowcount-1 do
x[i]:=strtoint(stringgrid1.cells[1,i])*50;
for i:=1 to stringgrid1.rowcount-1 do
y[i]:=strtoint(stringgrid1.cells[2,i])*50;
for i:=1 to stringgrid1.rowcount-1 do
z[i]:=strtoint(stringgrid1.cells[3,i])*50;
for i:=1 to stringgrid2.rowcount-1 do
t[1,i]:=strtoint(stringgrid2.cells[0,i]);
for i:=1 to stringgrid2.rowcount-1 do
t[2,i]:=strtoint(stringgrid2.cells[1,i]);
xc:=0;
yc:=0;
zc:=0;
zk:=z[1];
for i:=1 to stringgrid1.rowcount-1 do
begin
xc:=xc+x[i];
yc:=yc+y[i];
zc:=zc+z[i];
if zk<z[i] then zk:=z[i]
end;
xc:=xc/i;
yc:=yc/i;
zc:=zc/i;
for i:=1 to stringgrid1.rowcount-1 do
begin
x[i]:=round(x[i]-xc);
y[i]:=-round(y[i]-yc);
z[i]:=-round(z[i]-zc);
end;
for i:=1 to stringgrid1.rowcount-1 do
begin
prih(x[i],y[i],z[i],b[i]);
proekcia(x[i],y[i],z[i],x1[i],y1[i]);
end;
fig;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
x2,y2: real;
begin
k:=-0.1;
for i:=1 to stringgrid2.rowcount-1 do
begin
povoroty(z[i],x[i],k,x2,y2);
z[i]:=x2;
x[i]:=y2;
prih(x[i],y[i],z[i],b[i]);
proekcia(x[i],y[i],z[i],x1[i],y1[i]);
end;
fig;
end;

Ето поворот в одну сторону...
procedure TForm1.Button3Click(Sender: TObject);
var
i: integer;
x2,y2: real;
begin
k:=0.1;
for i:=1 to stringgrid2.rowcount-1 do
begin
povoroty(z[i],x[i],k,x2,y2);
z[i]:=x2;
x[i]:=y2;
prih(x[i],y[i],z[i],b[i]);
proekcia(x[i],y[i],z[i],x1[i],y1[i]);
end;
fig;

end;



если нужно вот мая прога без зарисовки полностю:
Вложения
Тип файла: rar Labs 5 Graf.rar (212.1 Кб, 7 просмотров)
Link1993 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пересечение линий PastoriXx Общие вопросы по Java, Java SE, Kotlin 5 22.12.2010 16:54
Удаление невидимых линий(Z-буфер) Ruschel Мультимедиа в Delphi 0 10.12.2010 16:39
Отрисовка линий Rave MSD Общие вопросы Delphi 2 16.06.2010 14:01
Удаление невидимых файлов. Дикий Общие вопросы Delphi 34 14.05.2008 00:57