|
Вопрос # 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.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|