|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
23.12.2010, 22:49 | #1 |
Регистрация: 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; если нужно вот мая прога без зарисовки полностю: |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Пересечение линий | 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 |