hej,potrzebóje napisac program w pascalu który rysował by figure geometryczna czworościan,w trójwymiarze (same krawędzie!!!)i obok były obliczenia objętośći i pola.niech mi ktoś pomoże!!!!!!!!
magda:)
Owszem, można użyć OpenGl lub DXa. tylko po co. To ma być prosty programik, do wyświetlania siatki. OpenGl jest dosyć złożony i pytająca będzie miała kłopoty się z tym połapać. jak chcecie obracający się sześcian to zapraszam do postu: sześcian 3d delphi, 15.05.2006, jest tam mój programik do tego celu. Poza tym, pytanie dotyczy języka Pascal. Z tego co wiem, to tam nie ma OpenGl. :>

- Rejestracja:prawie 21 lat
- Ostatnio:ponad 11 lat
Tommy the Thunderer napisał(a)
Odysseus - przypuśćmy, że ma się obracać wokół osi - czy da się to zrobić bez pomocy bibliotek OpenGL? bo w Delph chyba nie ma wbudowanego wspomagania dla grafiki 3D?
Da się i to jak. Da się nawet zmienić oś obrotu w trakcie działania animacji. Ale to wszystko to matematyka.
- Rejestracja:ponad 19 lat
- Ostatnio:ponad 14 lat
To jest program pierwszego podejścia.
Nie stosowałem poważnych metod obliczania wyznacznika.
Wystarczało mi zwykłe rozwinięcie Laplac'a..
Reszta to iloczyny wektorowe i mieszane.
program czworoscian;
uses Crt,Graph;
var xa,ya,za,xb,yb,zb,xc,yc,zc,xd,yd,zd :Real;
AB,AC,AD,BC,BD : array[1..3] of Real;
W :array[1..3,1..3] of Real;
v,Pabc,Pabd,Pacd,Pbcd,det :Real;
W1i,W1j,W1k,W2i,W2j,W2k,
W3i,W3j,W3k,W4i,W4j,W4k :Real;
procedure ekran;
var ster,tryb :Integer;
x1,y1 :Real;
begin
Ster:=Detect;
InitGraph(ster,tryb,'c:\tp\bgi');
SetBkColor(White);
SetColor(Blue);
SetLineStyle(SolidLn,0,NormWidth);
x1:=-120*Sqrt(2);
y1:=120*Sqrt(2);
Line(320,240,320,20);
OutTextXY(325,10,'z');
Line(320,240,320+Round(x1),240+Round(y1));
OutTextXY(310+Round(x1),245+Round(y1),'x');
Line(320,240,560,240);
OutTextXY(565,245,'y');
end;
procedure wspolrz;
begin
Writeln('podaj wspolrzedne wierzcholka A');
Readln(xa,ya,za);
Writeln('podaj wspolrzedne wierzcholka B');
Readln(xb,yb,zb);
Writeln('podaj wspolrzedne wierzcholka C');
Readln(xc,yc,zc);
Writeln('podaj wspolrzedne wierzcholka D');
Readln(xd,yd,zd);
end;
procedure rysczw;
var xea,yea,xeb,yeb,xec,yec,xed,yed :Real;
k:Integer;
begin
SetColor(Red);
k:=20;
xea:=k*ya-k*0.5*sqrt(2)*xa;
yea:=-k*za+k*0.5*sqrt(2)*xa;
MoveTo(320+Round(xea),240+Round(yea));
xeb:=k*yb-k*0.5*sqrt(2)*xb;
yeb:=-k*zb+k*0.5*sqrt(2)*xb;
LineTo(320+Round(xeb),240+Round(yeb));
xec:=k*yc-k*0.5*sqrt(2)*xc;
yec:=-k*zc+k*0.5*sqrt(2)*xc;
LineTo(320+Round(xec),240+Round(yec));
LineTo(320+Round(xea),240+Round(yea));
xed:=k*yd-k*0.5*sqrt(2)*xd;
yed:=-k*zd+10*0.5*sqrt(2)*xd;
MoveTo(320+Round(xea),240+Round(yea));
LineTo(320+Round(xed),240+Round(yed));
MoveTo(320+Round(xeb),240+Round(yeb));
LineTo(320+Round(xed),240+Round(yed));
MoveTo(320+Round(xec),240+Round(yec));
LineTo(320+Round(xed),240+Round(yed));
OutTextXY(Round(320+xed+5),Round(240+yed+5),'D');
OutTextXY(Round(320+xea+5),Round(240+yea+5),'A');
OutTextXY(Round(320+xeb+5),Round(240+yeb+5),'B');
OutTextXY(Round(320+xec+5),Round(240+yec+5),'C');
end;
procedure komplan;
var i,j,k,m,n :Integer;
wyz,wsp,m11,m12,m13 :Real;
s,t,e,d,f,g:string[20];
begin
n:=3;
AB[1]:=xb-xa;
AB[2]:=yb-ya;
AB[3]:=zb-za;
AC[1]:=xc-xa;
AC[2]:=yc-ya;
AC[3]:=zc-za;
AD[1]:=xd-xa;
AD[2]:=yd-ya;
AD[3]:=zd-za;
W[1,1]:=AB[1];
W[1,2]:=AB[2];
W[1,3]:=AB[3];
W[2,1]:=AC[1];
W[2,2]:=AC[2];
W[2,3]:=AC[3];
W[3,1]:=AD[1];
W[3,2]:=AD[2];
W[3,3]:=AD[3];
m11:=W[2,2]*W[3,3]-W[3,2]*W[2,3];
m12:=W[2,1]*W[3,3]-W[3,1]*W[2,3];
m13:=W[2,1]*W[3,2]-W[3,1]*W[2,2];
det:=W[1,1]*m11-W[1,2]*m12+W[1,3]*m13;
if det<>0 then
begin
v:=0.16666*abs(det);
Str(v,s);
OutTextXY(410,400,'V='+s);
BC[1]:=xc-xb;
BC[2]:=yc-yb;
BC[3]:=zc-zb;
BD[1]:=xd-xb;
BD[2]:=yd-yb;
BD[3]:=zd-zb;
W1i:=AB[2]*AC[3]-AC[2]*AB[3];
W1j:=AC[1]*AB[3]-AB[1]*AC[3];
W1k:=AB[1]*AC[2]-AC[1]*AB[2];
Pabc:=0.5*sqrt(W1i*W1i+W1j*W1j+W1k*W1k);
Str(Pabc,t);
OutTextXY(410,415,'Pabc='+t);
W2i:=AB[2]*AD[3]-AD[2]*AB[3];
W2j:=AD[1]*AB[3]*AD[3]*AB[1];
W2k:=AB[1]*AD[2]-AD[1]*AB[2];
Pabd:=0.5*sqrt(W2i*W2i+W2j*W2j+W2k*W2k);
Str(Pabd,e);
OutTextXY(410,430,'Pabd='+e);
W3i:=AC[2]*AD[3]-AD[2]*AC[3];
W3j:=AD[1]*AC[3]-AD[3]*AC[1];
W3k:=AC[1]*AD[2]-AC[2]*AD[1];
Pacd:=0.5*sqrt(W3i*W3i+W3j*W3j+W3k*W3k);
Str(Pacd,f);
OutTextXY(410,445,'Pacd='+f);
W4i:=BC[2]*BD[3]-BC[3]*BD[2];
W4j:=BD[1]*BC[3]-BD[3]*BC[1];
W4k:=BC[1]*BD[2]-BC[2]*BD[1];
Pbcd:=0.5*sqrt(W4i*W4i+W4j*W4j+W4k*W4k);
Str(Pbcd,g);
OutTextXY(410,460,'Pbcd='+g);
end
else OutTextXY(10,10,'to nie jest czworoscan');
end;
begin
TextMode(CO80);
wspolrz;
ekran;
rysczw;
komplan;
Readln;
end.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.