home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 November / Chip_1999-11_cd.bin / ctenari / Plavja / Exe / axonometrie.dk next >
Text File  |  1999-09-02  |  4KB  |  172 lines

  1. // knihovna: AXONOMETRIE.DK
  2. // autor: Petr Plavjanφk
  3. // obsah: funkce pro prßci r²sovßnφ v axonometrii na "papφ°e"
  4.  
  5. #vloz "zakladni.dk"
  6.  
  7. // nastavenφ axonometrie:  
  8. axonometrie(ax_x, ax_y, ax_z, *AO, *z_x, *z_y, *z_z, *osa_x, *osa_y, *osa_z, *sosa_x, *sosa_y, *sosa_z, *sSxz, *sSyz) {
  9.   zobrazeni("papir");
  10.  
  11.   // axonometrick² troj·helnφk
  12.   z_x = rovnobezka(x, _O);
  13.   MX = bod(z_x, _O, ax_x/2):0;
  14.   MY = bod(z_x, _O, ax_x/2):1;
  15.   ky = kruz(Pi, MY, ax_y);
  16.   kz = kruz(Pi, MX, ax_z);
  17.   MZ = p(ky, kz):0;  
  18.   zrus(ky);
  19.   zrus(kz);
  20.   // osy
  21.   osa_x = kolmice(z_y = primka(MZ, MY), MX);
  22.   osa_y = kolmice(z_z = primka(MZ, MX), MY);
  23.   osa_z = kolmice(z_x, MZ);
  24.   AO = p(osa_x, osa_y);
  25.   rozdel(osa_x, 1, 1,0, 1,3, AO);
  26.   rozdel(osa_y, 1, 1,0, 1,3, AO);
  27.   rozdel(osa_z, 1, 1,0, 1,3, AO);
  28.   rozdel(z_x, 1, 0,0, 1,0, MY, MX);
  29.   rozdel(z_y, 1, 0,0, 1,0, MZ, MY);
  30.   rozdel(z_z, 1, 0,0, 1,0, MZ, MX);
  31.   barva([osa_x, osa_y, osa_z], RGB(100,0,0));
  32.   barva([z_x, z_y, z_z], vse, vse, RGB(100,0,0));
  33.   
  34.   // sklopenφ os
  35.   T = (MZ + MX)/2;
  36.   t = kruz(Pi, T, v(T, MZ));
  37.   sSxz = p(t, osa_y):1;
  38.   zrus(T);
  39.   zrus(t);
  40.   T2 = (MZ + MY)/2;
  41.   t2 = kruz(Pi, T2, v(T2, MZ));
  42.   sSyz = p(t2, osa_x):1;
  43.   zrus(T2);
  44.   zrus(t2);
  45.   sosa_x = primka(sSxz, MX);
  46.   styl(sosa_x, sklopeny);
  47.   sosa_y = primka(sSyz, MY);
  48.   styl(sosa_y, sklopeny);
  49.   sosa_z = primka(sSxz, MZ);
  50.   styl(sosa_z, sklopeny);
  51.   popis(m(sosa_x, sosa_y, sosa_z, sSxz, sSyz, z_x, z_y, z_z), vse, 0);
  52. }
  53.  
  54. abod (ax, ay, az) {
  55.   BX = bod(sosa_x, sSxz, ax):0;
  56.   kx = kolmice(z_z, BX);
  57.   BY = bod(sosa_y, sSyz, ay):0;
  58.   ky = kolmice(z_y, BY);
  59.   Bp = p(kx, ky);
  60.   BZ = bod(sosa_z, sSxz, az):0;
  61.   kz = kolmice(z_z, BZ);
  62.   P = p(osa_z, kz);
  63.   v = v(AO, P);
  64.   B = Bp - bod(0,v,0);
  65.   
  66.   vrat m(B, Bp);
  67. }
  68.  
  69. aprimka (aA, aB) {
  70.   vrat [primka(aA:0, aB:0), primka(aA:1, aB:1)];
  71. }
  72.  
  73. arovina (ax, ay, az) {
  74.   AX = abod(ax, 0, 0);
  75.   AY = abod(0, ay, 0);
  76.   AZ = abod(0, 0, az);
  77.   
  78.   ap = primka(AX:0, AY:0);
  79.   at = primka(AY:0, AZ:0);
  80.   an = primka(AZ:0, AX:0);
  81.  
  82.   kdyz ( (ax > 0) & (ay > 0) & (az > 0) ) {
  83.     rozdel(ap, 1, 1,3, 1,0, AX:0, AY:0);
  84.     rozdel(at, 1, 1,3, 1,0, AY:0, AZ:0);
  85.     rozdel(an, 1, 1,3, 1,0, AZ:0, AX:0);
  86.   }
  87.  
  88.   kdyz ( (ax < 0) & (ay > 0) & (az > 0) ) {
  89.     rozdel(ap, 1, 1,3, 1,0, AY:0);
  90.     rozdel(at, 1, 1,3, 1,0, AY:0, AZ:0);
  91.     rozdel(an, 1, 1,0, 1,3, AZ:0);
  92.   }
  93.   
  94.   vrat [ap, an, at];
  95. }
  96.  
  97. kolmy_smer (p) {
  98.   R = p."A";
  99.   R = p."B";
  100.   s = rovnobezka(osa_y, R:0);
  101.   s = rovnobezka(z_x, R:1);
  102.   U = p(s:0, s:1);  
  103.   t = rovnobezka(osa_x, R:1);
  104.   t = kolmice(z_x, R:0);
  105.   P = p(t:0, t:1);
  106.   k = primka(U, P);
  107.   vrat k;
  108. }
  109.  
  110. zkraceni_na_ose_x () {
  111.   X = abod(1,0,0);
  112.   vrat v(AO, X:0);
  113. }
  114.  
  115. zkraceni_na_ose_y () {
  116.   X = abod(0,1,0);
  117.   vrat v(AO, X:0);
  118. }
  119.  
  120. zkraceni_na_ose_z () {
  121.   X = abod(0,0,1);
  122.   vrat v(AO, X:0);
  123. }
  124.  
  125. astopa(ro) {
  126.   A = p(ro:0, z_x);
  127.   B = p(ro:1, z_z);
  128.   a = primka(A, B);
  129.   rozdel(a, 1, 1,3, 1,0, A, B);
  130.   vrat a;
  131. }
  132.  
  133. kolmice_k_rovine_bodem(ro, S) {
  134.   aro = astopa(ro);
  135.   k = kolmice(aro, S:0);
  136.   k = rovnobezka(kolmy_smer(ro:0), S:1);
  137.   vrat k;
  138. }
  139.  
  140. prusecik_ro_s_p(ro, p) {
  141.   Np = p(osa_x, p:1);
  142.   r = rovnobezka(osa_z, Np);
  143.   Na = p(r, ro:1);
  144.   Pa = p(p:1, ro:0);
  145.   s = primka(Pa, Na);
  146.   R = p(s, p:0);
  147.   vrat R;
  148. }
  149.  
  150. rovnobezna_rovina_bodem (ro, B) {
  151.   ha = rovnobezka(ro:0, B:0);
  152.   h1 = rovnobezka(ro:0, B:1);
  153.   hN = p(h1, osa_x);
  154.   hM = p(h1, osa_y);
  155.   Na = p(rovnobezka(osa_z, hN), ha);
  156.   Ma = p(rovnobezka(osa_z, hM), ha);
  157.   n = rovnobezka(ro:1, Na);
  158.   m = rovnobezka(ro:2, Ma);
  159.   X = p(n, osa_x);
  160.   p = rovnobezka(ro:0, X);
  161.   vrat [p, n, m];
  162. }
  163.  
  164. prusecnice_rovin (ro, sigma) {
  165.   P = p(ro:0, sigma:0);
  166.   N = p(ro:1, sigma:1);
  167.   P1 = P;
  168.   N1 = p(rovnobezka(osa_z, N), ro:0);
  169.  
  170.   vrat [primka(P, N), primka(P1, N1)];  
  171. }
  172.