program rysujacy figury

0

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:)

0

Przysiągłbym, że ten post jet kopią postu: 25.05.2006 20:58 (strona 2). Co, pewnie zaliczenie tuż, tuż.

0

nie,ale ta sama grupa:D

0
  1. Czworościan nie jest figurą tylko bryłą.
  2. Powiedz czy bryła ma się..., powiedzmy obracać wokół własnej osi, czy ma być zwykłym rysunkiem w aksonometrii?
0

Mam inne pytanie: jak obliczyć pole czworościanu (to tak jak obliczanie objętości kwadratu)?.

0

Po pierwsze kwadrat nie ma objętości :-) , a pole czworościanu(ostrosłup) to 1/3 * Pole_Podstawy * Wysokość

:-D Miałem na myśli objętość. Pole to suma pól wszystkich ścian, czyli czterech trójkątów

0

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?

0

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. :>

0
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.

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1