| 
| 
 | Вопрос # 4 856/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!Подскажите пожалуйста как можно нарисовать пирамиду, так чтобы при ее вращении по трем осям удалялись невидимые линии. через полигоны???
 
|  |   Вопрос задала: Синельникова Ирина (статус: Посетитель)Вопрос отправлен: 24 декабря 2010, 21:13
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 4; последнее сообщение — 27 декабря 2010, 00:18; участников в обсуждении: 3. 
|   | Ерёмин А.А. (статус: *Администратор), 24 декабря 2010, 22:13 [#1]:А вы её хотя бы с видимыми линиями построили? |  
|   | Синельникова Ирина (статус: Посетитель), 25 декабря 2010, 14:32 [#2]:с видимыми линиями получилось, а вот с удалением что то никак |  
|   | Синельникова Ирина (статус: Посетитель), 25 декабря 2010, 15:03 [#3]:vektor=array[1..4]of real; matrix=array[1..4,1..4]of real;
 const
 cosf=0.96592;
 sinf=0.25882;
 e1:vektor=(1,0,0,1);
 e2:vektor=(0,1,0,1);
 e3:vektor=(0,0,1,1);
 e4:vektor=(0,0,0,1);
 m_D_Plus:matrix=((1.1,0,0,0),
 (0,1.1,0,0),
 (0,0,1.1,0),
 (0,0,0,1));
 m_D_Minus:matrix=((0.9,0,0,0),
 (0,0.9,0,0),
 (0,0,0.9,0),
 (0,0,0,1));
 m_Rx:matrix=((1,0,0,0),
 (0,cosf,-sinf,0),
 (0,sinf,cosf,0),
 (0,0,0,1));
 m_Ry:matrix=((cosf,0,sinf,0),
 (0,1,0,0),
 (-sinf,0,cosf,0),
 (0,0,0,1));
 m_Rz:matrix=((cosf,-sinf,0,0),
 (sinf,cosf,0,0),
 (0,0,1,0),
 (0,0,0,1));
 m_Pro:matrix=((1,0,1.4142/4,0),
 (0,1,1.4142/4,0),
 (0,0,0,0),
 (0,0,0,1));
 m_My:matrix=((1,0,0,0),
 (0,-1,0,0),
 (0,0,1,0),
 (0,0,0,1));
 m_D_P:matrix=((1.5,0,0,0),
 (0,1.5,0,0),
 (0,0,1.5,0),
 (0,0,0,1));
 
 var
 Form1: TForm1;
 M:matrix;
 x0,x1,y0,y1:real;
 
 function MultMatrix(M1,M2:matrix):matrix;
 function Mult(A:matrix;B:vektor):vektor;
 function ii(x:real):integer;
 function jj(y:real):integer;
 procedure Drawing(G:matrix);
 
 implementation
 
 {$R *.dfm}
 
 function MultMatrix(M1,M2:matrix):matrix;
 var i,j,k:integer;
 M:matrix;
 begin
 for i:=1 to 4 do
 for k:=1 to 4 do
 for j:=1 to 4 do
 M[i,j]:=M[i,j]+M1[i,k]*M2[k,j];
 Result:=M
 end;
 
 function Mult(A:matrix;B:vektor):vektor;
 var i,j:integer;
 C:vektor;
 begin
 for i:=1 to 4 do
 begin
 C[i]:=0;
 for j:=1 to 4 do
 C[i]:=A[i,j]*B[j]+C[i];
 end;
 Result:=C
 end;
 
 function ii(x:real):integer;
 begin
 ii:=trunc(Form1.Image1.Width*(x-x0)/(x1-x0));
 end;
 
 function jj(y:real):integer;
 begin
 jj:=trunc(Form1.Image1.Height*(y1-y)/(y1-y0));
 end;
 
 procedure Drawing(G:matrix);
 var a,b,c,d,w:vektor;
 t:real;
 Ic,Jc,i,j,p,q,s,r:integer;
 begin
 Form1.Image1.Canvas.Rectangle(0,0,Form1.Image1.Width,Form1.Image1.Height);
 Ic:=Form1.Image1.Width div 2;
 Jc:=Form1.Image1.Height div 2;
 
 Form1.Image1.Canvas.MoveTo(Ic,Jc);
 Form1.Image1.Canvas.Pen.Color:=clblue;
 a:=Mult(G,e1);
 i:=ii(a[1]);
 j:=jj(a[2]);
 Form1.Image1.Canvas.LineTo(i,j);
 Form1.Image1.Canvas.TextOut(i,j,'x');
 
 Form1.Image1.Canvas.MoveTo(Ic,Jc);
 Form1.Image1.Canvas.Pen.Color:=clblue;
 a:=Mult(G,e2);
 i:=ii(a[1]);
 j:=jj(a[2]);
 Form1.Image1.Canvas.LineTo(i,j);
 Form1.Image1.Canvas.TextOut(i,j,'y');
 
 Form1.Image1.Canvas.MoveTo(Ic,Jc);
 Form1.Image1.Canvas.Pen.Color:=clblue;
 a:=Mult(G,e3);
 i:=ii(a[1]);
 j:=jj(a[2]);
 Form1.Image1.Canvas.LineTo(i,j);
 Form1.Image1.Canvas.TextOut(i,j,'z');
 
 Form1.Image1.Canvas.MoveTo(Ic,Jc);
 Form1.Image1.Canvas.TextOut(Ic,Jc,'0');
 
 t:=0;
 d[1]:=t;
 d[2]:=(5+t)/3;
 d[3]:=(17-5*t)/6;
 d[4]:=1;
 d:=Mult(G,d);
 s:=ii(d[1]);
 r:=jj(d[2]);
 Form1.Image1.Canvas.MoveTo(s,r);
 repeat
 t:=t+1;
 d[1]:=t;
 d[2]:=(5+t)/3;
 d[3]:=(17-5*t)/6;
 d[4]:=1;
 d:=Mult(G,d);
 i:=ii(d[1]);
 j:=jj(d[2]);
 Form1.Image1.Canvas.Pen.Color:=clred;
 Form1.Image1.Canvas.LineTo(i,j);
 until t<>2;
 
 t:=0;
 b[1]:=t;
 b[2]:=(t+5)/2;
 b[3]:=(-3*t-1)/2;
 b[4]:=1;
 b:=Mult(G,b);
 Form1.Image1.Canvas.MoveTo(i,j);
 repeat
 t:=t+1;
 b[1]:=t;
 b[2]:=(t+5)/2;
 b[3]:=(-3*t-1)/2;
 b[4]:=1;
 b:=Mult(G,b);
 p:=ii(b[1]);
 q:=jj(b[2]);
 Form1.Image1.Canvas.Pen.Color:=clred;
 Form1.Image1.Canvas.LineTo(p,q);
 until t<>2;
 
 t:=0;
 c[1]:=t;
 c[2]:=(5+3*t)/4;
 c[3]:=(9-5*t)/2;
 c[4]:=1;
 c:=Mult(G,c);
 Form1.Image1.Canvas.MoveTo(p,q);
 repeat
 t:=t+1;
 c[1]:=-t;
 c[2]:=(5+3*t)/4;
 c[3]:=(9-5*t)/2;
 c[4]:=1;
 c:=Mult(G,c);
 k:=ii(c[1]);
 n:=jj(c[2]);
 Form1.Image1.Canvas.Pen.Color:=clred;
 Form1.Image1.Canvas.LineTo(s,r);
 until t<>2;
 
 w[1]:=0;
 w[2]:=0;
 w[3]:=0;
 w[4]:=1;
 w:=Mult(G,w);
 Form1.Image1.Canvas.MoveTo(Ic,Jc);
 Form1.Image1.Canvas.Pen.Color:=clyellow;
 Form1.Image1.Canvas.LineTo(s,r);
 Form1.Image1.Canvas.MoveTo(Ic,Jc);
 Form1.Image1.Canvas.Pen.Color:=clgray;
 Form1.Image1.Canvas.LineTo(i,j);
 Form1.Image1.Canvas.MoveTo(Ic,Jc);
 Form1.Image1.Canvas.Pen.Color:=clgreen;
 Form1.Image1.Canvas.LineTo(p,q);
 end;
 
 procedure TForm1.DrawClick(Sender: TObject);
 begin
 M:=m_Pro;
 Drawing(M);
 end;
 
 procedure TForm1.PlusClick(Sender: TObject);
 begin
 M:=MultMatrix(M,m_D_Plus);
 Drawing(M);
 end;
 
 procedure TForm1.MinusClick(Sender: TObject);
 begin
 M:=MultMatrix(M,m_D_Minus);
 Drawing(M);
 end;
 
 procedure TForm1.XvrClick(Sender: TObject);
 begin
 M:=MultMatrix(M,m_Rx);
 Drawing(M);
 end;
 
 procedure TForm1.YvrClick(Sender: TObject);
 begin
 M:=MultMatrix(M,m_Ry);
 Drawing(M);
 end;
 
 procedure TForm1.ZvrClick(Sender: TObject);
 begin
 M:=MultMatrix(M,m_Rz);
 Drawing(M);
 end;
 
 procedure TForm1.FormActivate(Sender: TObject);
 begin
 x0:=-3;
 x1:=3;
 y0:=-3;
 y1:=3;
 end;
 
 end.
 |  
|   | IlluminatI (статус: 2-ой класс), 27 декабря 2010, 00:18 [#4]:о_О epic fail. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |