home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 November / Chip_1999-11_cd.bin / ctenari / Plavja / Exe / Priklady / Axonometrie_Evolventa_a_sroubovice.dg < prev    next >
Text File  |  1999-06-23  |  5KB  |  219 lines

  1. #vloz "zakladni.dk"
  2. #vloz "kuzelosecky.dk"
  3.  
  4. /*
  5. Tento soubor je p°φkladem toho, ₧e v programu DG
  6. lze pou₧φt jakoukoliv promφtacφ metodu. V programu
  7. jsou zabudovßny pouze tyto t°i: dvourozm∞rnΘ, k≤tovanΘ
  8. a mongeovo, ale ve djvourozm∞rnΘm zobrazenφ m∙₧eme 
  9. postupovat tak, jak bychom r²sovali na skuteΦnΘm
  10. papφ°e. V²hodou v programu DG je, ₧e slo₧it∞jÜφ
  11. konstrukce lze napsat do samostatn²ch funkcφ.
  12. Nap°φklad v tomto postupu existuje funkce abod(x, y, z),
  13. kterß vracφ bod v axonometrii o zadan²ch sou°adnicφch.
  14. P°esn∞ji vracφ skupinu o dvou bodech: 1. axonometrick²
  15. pr∙m∞t, 2. p∙dorys. Postup, kter²m je toto vykonßno
  16. je stejn² jako, kdy₧ jsme tuto ·lohu r²sovali na st°ednφ
  17. Ükole. JeÜt∞ p°edtφm, ne₧ zavolßme funkci abod, musφme
  18. definovat axonometrii (vytvo°it osy, axonometrick²
  19. troj·helnφk, sklopit osy).
  20. */
  21.                         
  22. abod (ax, ay, az) {
  23.   BX = bod(sosa_x, sSxz, ax):0;
  24.   kx = kolmice(z_z, BX);
  25.   BY = bod(sosa_y, sSyz, ay):0;                         
  26.   ky = kolmice(z_y, BY);
  27.   Bp = p(kx, ky);
  28.   BZ = bod(sosa_z, sSxz, az):0;
  29.   kz = kolmice(z_z, BZ);
  30.   P = p(osa_z, kz);
  31.   v = v(S, P);
  32.   B = Bp - bod(0,v,0);
  33.   
  34.   vrat m(B, Bp);
  35. }
  36.  
  37. hlavni () {  
  38.   zobrazeni("papir");
  39.   papir(29.7, 21, 2, 1); //A4
  40.   okraj(0.75,0.75,0.75,0.75,0.25,1,0);
  41.   posunutipss(2,4);  
  42.   nadpis("RYS ╚. 3", "", datum(), "PETR PLAVJAN═K", 
  43.   "EVOLVENTA A èROUBOVICE");
  44.   
  45.   // p°eddefinovanΘ styly
  46.   normal = styl();  
  47.  
  48.   sklopeny = styl();
  49.   videt(sklopeny, vse, 2, ?, ?, 1, 2);
  50.   barva(sklopeny, "seda");
  51.  
  52.   silny = styl();
  53.   videt(silny, vse, 2, 0, 3, 2, 0);
  54.  
  55.   schovany = styl();
  56.   videt(schovany, vse, 2, -1, 2, 1, 3);
  57.   
  58.   nevidet = styl();
  59.   videt(nevidet, vse, 0);
  60.   
  61.   // nastavenφ axonometrie:  
  62.   ax_x = 10;
  63.   ax_y = 11;
  64.   ax_z = 12;
  65.   
  66.   // axonometrick² troj·helnφk
  67.   z_x = rovnobezka(x, _O);
  68.   MX = bod(z_x, _O, ax_x/2):0;
  69.   MY = bod(z_x, _O, ax_x/2):1;
  70.   ky = kruz(Pi, MY, ax_y);
  71.   kz = kruz(Pi, MX, ax_z);
  72.   MZ = p(ky, kz):0;  
  73.   zrus(ky);
  74.   zrus(kz);
  75.   // osy
  76.   osa_x = kolmice(z_y = primka(MZ, MY), MX);
  77.   osa_y = kolmice(z_z = primka(MZ, MX), MY);
  78.   osa_z = kolmice(z_x, MZ);
  79.   S = p(osa_x, osa_y);
  80.   rozdel(osa_x, 1, 1,0, 1,3, S);
  81.   rozdel(osa_y, 1, 1,0, 1,3, S);
  82.   rozdel(osa_z, 1, 1,0, 1,3, S);
  83.   rozdel(z_x, 1, 0,0, 1,0, MY, MX);
  84.   rozdel(z_y, 1, 0,0, 1,0, MZ, MY);
  85.   rozdel(z_z, 1, 0,0, 1,0, MZ, MX);
  86.   
  87.   // sklopenφ os
  88.   T = (MZ + MX)/2;
  89.   t = kruz(Pi, T, v(T, MZ));
  90.   sSxz = p(t, osa_y):1;
  91.   zrus(T);
  92.   zrus(t);
  93.   T2 = (MZ + MY)/2;
  94.   t2 = kruz(Pi, T2, v(T2, MZ));
  95.   sSyz = p(t2, osa_x):1;
  96.   zrus(T2);
  97.   zrus(t2);
  98.   sosa_x = primka(sSxz, MX);
  99.   styl(sosa_x, sklopeny);
  100.   sosa_y = primka(sSyz, MY);
  101.   styl(sosa_y, sklopeny);
  102.   sosa_z = primka(sSxz, MZ);
  103.   styl(sosa_z, sklopeny);
  104.   popis(m(sosa_x, sosa_y, sosa_z, sSxz, sSyz, z_x, z_y, z_z), vse, 0);
  105.   
  106.   //vlastnφ postup:
  107.     
  108.   // vßlec
  109.   // podstava
  110.   r = 2; // polom∞r
  111.   A = abod(5, 6, 0);  // st°ed
  112.   R = abod(5-r, 6, 0):0;  
  113.   R = abod(5+r, 6, 0):0;  
  114.   R = abod(5, 6-r, 0):0;  
  115.   R = abod(5, 6+r, 0):0;  
  116.   v = 10; // v²Üka
  117.   e = rytz(Pi, R:0, R:1, R:2, R:3);
  118.   B = abod(5, 6, v);  
  119.  
  120.   e2 = posun(e, vektor(B:0-A:0));
  121.   styl(e2, silny);
  122.   
  123.   r1 = rovnobezka(x, A:0);
  124.   r2 = rovnobezka(x, B:0);
  125.   E1 = p(e, r1);
  126.   E2 = p(e2, r2);
  127.   bok = usecka(E1:0, E2:0);
  128.   bok = usecka(E1:1, E2:1);
  129.   styl(bok, silny);
  130.   rozdel(e, 1, 1,3, 2,0, E1,-1,E1:0);
  131.   
  132.   zrus(R);
  133.   popis(r1, vse, 0); // bude pou₧ita pro urΦenφ viditelnosti Üroubovice
  134.   zrus(r2);
  135.   zrus(E1);
  136.   zrus(E2);
  137.   
  138.   // Üroubovice v mongeovce
  139.   i = 0;
  140.   zavitu = 1;
  141.   kroku = 100; // na jeden zavit
  142.   uhel = 2*pi/kroku;  
  143.   vystup = v/kroku/zavitu;
  144.   dokud (i < kroku*zavitu) {
  145.     K = bod(5, 6) + bod(r*cos(i*uhel), r*sin(i*uhel), i*vystup); 
  146.     zvetsi(i);
  147.   }
  148.   zrus(i);
  149.  
  150.   // p°evod do axonometrie
  151.   i = 0;
  152.   pocet = pocet(K);
  153.   dokud (i < pocet) {
  154.     D = abod((K:i)."x", (K:i)."y", (K:i)."z");
  155.     AK = D:0; 
  156.     AKP = D:1; 
  157.     zrus(D);
  158.     
  159.     zvetsi(i);
  160.   }
  161.   zrus(i);
  162.   zrus(pocet);
  163.  
  164.   videt(K, vse, 0);
  165.   videt(AK, vse, 0);
  166.   videt(AKP, vse, 0);
  167.   l = ncara(AK);
  168.   styl(l, silny); 
  169.  
  170.   // viditelnost Üroubovice
  171.   i = 0;
  172.   vy = r1."A"."y";
  173.   pocet = pocet(K);
  174.   dokud (i < pocet) {
  175.     kdyz ((AKP:i)."y" < vy) styl(l:i, schovany);
  176.     
  177.     zvetsi(i);
  178.   }
  179.   zrus(i);
  180.   zrus(pocet);
  181.   zrus(vy);
  182.  
  183.   // evolventa - pr∙nik teΦen Üroubovice s p∙dorysnou
  184.   i = 1;  
  185.   pocet = pocet(K)-1;
  186.   dokud (i < pocet) {
  187.     tp = tecna(e, AKP:i);
  188.     tt = primka(AK:(i-1), AK:(i+1));
  189.     t = rovnobezka(tt, AK:i);
  190.     R = p(tp, t);
  191.     zrus(t);
  192.     zrus(tt);
  193.     zrus(tp);
  194.     
  195.     zvetsi(i);
  196.   }
  197.   zrus(i);
  198.   zrus(pocet);
  199.   
  200.   videt(R, vse, 0);
  201.   l2 = ncara(R); 
  202.  
  203.   // viditelnost evolventy
  204.   styl(l2, silny);  
  205.   i = 0;
  206.   vx1 = (bok:1)."A"."x";
  207.   vx2 = (bok:0)."A"."x";
  208.   vy1 = r1."A"."y";
  209.   vy2 = (B:0)."y";
  210.   pocet = pocet(l2);
  211.   dokud (i < pocet) {
  212.     kdyz ( ((R:i)."y" < vy1) & ((R:i)."x" > vx1) & ((R:i)."x" < vx2) & ((R:i)."y" > vy2)) 
  213.       styl(l2:i, schovany);
  214.     zvetsi(i);
  215.   }
  216.   zrus(i);
  217.   zrus(pocet); 
  218. }
  219.