home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 November / Chip_1999-11_cd.bin / ctenari / Plavja / Exe / Klir / 802.dg < prev    next >
Text File  |  1999-06-28  |  6KB  |  223 lines

  1. // PR┘NIK DVOU V┴LC┘
  2. // p°φklad bodovΘ konstrukce
  3.  
  4. #vloz "zakladni.dk"
  5.  
  6. // viditelnost v p∙doryse
  7. jevidetp (R, v) {
  8.   ro = kolma(v:_osa, R);
  9.   X = p(ro, v:_osa);
  10.   vrat X."z" <= R."z";
  11. }
  12.  
  13. // viditelnost v nßryse
  14. jevidetn (R, v) {
  15.   ro = rovnobezna(Pi, R);
  16.   O = p(ro, v:_osa);
  17.   vrat R."y" >= O."y" - 0.1;
  18. }
  19.  
  20. // jednotlivß bodovß konstrukce
  21. prunik (p, k1, k2, o1, o2) {
  22.   A1 = p(k1,p);   
  23.   A2 = p(k2,p);
  24.   kdyz ((typ(A1:0)=="bod")&(typ(A2:0)=="bod")) {
  25.     m1 = rovnobezka(o1, A1);
  26.     m2 = rovnobezka(o2, A2);     
  27.     R = bod(m1:0, p((m1:0).1, m2.1)."x", ?, ?);
  28.     R = bod(m1:1, p((m1:1).1, m2.1)."x", ?, ?);
  29.     
  30.     vrat R;
  31.   } 
  32.   jinak vrat nic();
  33. }
  34.  
  35. // nar²suje vßlec
  36. mujvalec (S, T, r1, v1, v2) {
  37.   pd = kruz(Pi, S, r1);
  38.   ph = kruz(rovnobezna(Pi, T), T, r1);
  39.   o = primka(S, T);
  40.   styl(o, osa);
  41.   k = kolmice(Pi, o.1, [S, T].1);
  42.   X = p(pd.1, k:0);
  43.   Y = p(ph.1, k:1);
  44.   bok = usecka(X:0, Y:0);
  45.   bok = usecka(X:1, Y:1);
  46.   videt(bok, 2, 0);
  47.   styl(ph, silny);
  48.   rozdel(pd, 1, 2,0, 1,3, X:0, v1, X:1, v2, X:0);
  49.   
  50.   r = rovnobezka(x, [S, T]);
  51.   XN = p(pd, r:0);
  52.   YN = p(ph, r:1);
  53.   bokn = usecka(XN:0, YN:0);
  54.   bokn = usecka(XN:1, YN:1);
  55.   bokn = usecka(YN:0, YN:1);
  56.   videt(bokn, 1, 0);
  57.   
  58.   vrat [pd, ph, o, bok, bokn];
  59. }
  60.  
  61. hlavni () {
  62.   zobrazeni("mongeovo");
  63.   papir(29.7, 21, 1, 1); //A4
  64.   okraj(0.75,0.75,0.75,0.75,0.25,1,0);
  65.   posunutipss(0,-2);
  66.   nadpis("802.", "", datum(), "PETR PLAVJAN═K", 
  67.     "PR┘NIK DVOU V┴LC┘");
  68.   
  69.   // p°eddefinovanΘ styly
  70.   normal = styl();  
  71.  
  72.   sklopeny = styl();
  73.   videt(sklopeny, vse, 2, ?, ?, 1, 3);
  74.   barva(sklopeny, "seda");
  75.  
  76.   silny = styl();
  77.   videt(silny, vse, 1, 0, 3, 2, 0);
  78.  
  79.   osa = styl();
  80.   videt(osa, vse, 1, 0, 3, 1, 2);
  81.  
  82.   schovany = styl();
  83.   videt(schovany, vse, 1, -1, 2, 1, 3);
  84.   
  85.   nevidet = styl();
  86.   videt(nevidet, vse, 0);
  87.   
  88.   // funkce mujvalec() vracφ skupinu o vφce objektech:
  89.   _pd = 0;    // valec:0 - dolnφ podstava
  90.   _ph = 1;    // valec:1 - hornφ podstava
  91.   _osa = 2;   // valec:2 - osa vßlce
  92.   _bokp1 = 3; // valec:3 - 1. bok v p∙dorysu
  93.   _bokp2 = 4; // valec:4 - 2. bok v p∙dorysu
  94.   _bokn1 = 5; // valec:5 - 1. bok v nßrysu
  95.   _bokn2 = 6; // valec:6 - 2. bok v nßrysu
  96.   _vrch = 7;  // valec:7 - vrÜek v nßrysu
  97.   
  98.   //postup:  
  99.   S = bod(3.5,11,0);
  100.   T = bod(-5,3.5,5);
  101.   r1 = 3.2;
  102.   v1 = mujvalec(S, T, r1, 0,1);
  103.  
  104.   U = bod(-3.5,11.5,0);
  105.   V = bod(3.5,4,6);
  106.   r2 = 2.5;
  107.   v2 = mujvalec(U, V, r2, 1,0);
  108.  
  109.   K = p((v1:_osa).2, (v2:_osa).2);
  110.   prepis(K, bod(v1:_osa, K."x", ?, ?));
  111.   m = rovnobezka(v2:_osa, K);
  112.   zrus(K);
  113.   
  114.   P = p(Pi, m);
  115.   p = primka(P, S);
  116.  
  117.   // v²znamnΘ body
  118.   K = p(v1:_pd, kolmice(x,S));
  119.   K = p(v1:_pd, rovnobezka(x,S));
  120.   K = p(v1:_pd, kolmice(Pi,p.1,S));
  121.   K = p(v2:_pd, kolmice(x,U));
  122.   K = p(v2:_pd, rovnobezka(x,U));
  123.   K = p(v2:_pd, kolmice(Pi,p.1,U));
  124.  
  125.   // bodovß konstrukce
  126.   X = K:1;
  127.   i = 0;  
  128.   krok = 0.1;
  129.   dokud (X."y" <= (K:0)."y") {
  130.     h = rovnobezka(p, X);
  131.     prepis(X, bod(X."x", X."y"+krok));
  132.     H = prunik(h:i, v1:_pd, v2:_pd, v1:_osa, v2:_osa);
  133.     zvetsi(i);
  134.   }
  135.   zrus(i);
  136.   zrus(X);
  137.   zrus(h);
  138.   
  139.   // spojenφ bod∙ do k°ivky
  140.   H2 = usp(4, 1,-3,4,-2, beznic(H));
  141.   videt([H, H2, K], vse, 0);
  142.   h = nuhelnik(H2);
  143.   styl(h, silny);
  144.  
  145.   // viditelnost pr∙niku
  146.   i = 0;
  147.   pocet = pocet(H2);
  148.   dokud (i < pocet) {
  149.     kdyz (!(jevidetp(H2:i, v1)&jevidetp(H2:i, v2))) 
  150.       styl(h:i, 1, schovany);
  151.     kdyz (!(jevidetn(H2:i, v1)&jevidetn(H2:i, v2))) 
  152.       styl(h:i, 2, schovany);  
  153.     zvetsi(i);
  154.   }
  155.   zrus(i);
  156.   
  157.   // viditelnost hran a vybarveni  
  158.  
  159.   R11 = pruniky_k_p(H2, v1:_bokp1, 0.01, 0.1);
  160.   rozdel(v1:_bokp1, 1, 2,0, 1,3, R11:0, R11:(pocet(R11)-1));
  161.   videt(R11, vse, 0);
  162.  
  163.   R12 = p(v1:_bokp2, v2:_bokp1);
  164.   R12 = p(v1:_bokp2, v2:_bokp2);
  165.   rozdel(v1:_bokp2, 1, 2,0, 1,3, R12:0, R12:(pocet(R12)-1));
  166.   videt(R12, vse, 0);
  167.   
  168.   R21 = pruniky_k_p(H2, v2:_bokp1, 0.01, 0.1);
  169.   rozdel(v2:_bokp1, 1, 2,0, 1,3, 
  170.     seradbnp(v2:_bokp1, R21:0, R21:(pocet(R21)-1)));  
  171.   videt(R21, vse, 0);
  172.  
  173.   R22 = p(v2:_bokp2, v1:_bokp1);
  174.   R22 = p(v2:_bokp2, v1:_bokp2);
  175.   R22 = pruniky_k_p(H2, v2:_bokp2, 0.01, 0.1);
  176.   rozdel(v2:_bokp2, 1, 2,0, 1,3, 
  177.     seradbnp(v2:_bokp2, R22:0, R22:(pocet(R22)-1)));  
  178.   videt(R22, vse, 0);
  179.   
  180.   barva1s = RGB(250,0,0);
  181.   barva1t = RGB(220,0,0);
  182.   vypln = vypln(T, 1, barva1s, 0, v1:_ph);
  183.   vypln = vypln2(S, 1, barva1t, 0, [v1:[_pd, _bokp1, _bokp2], v2:[_bokp1], h]);
  184.   X = p(v2:_bokp2, (v1:_osa).1) + bod(0.1, 0.1);
  185.   vypln = vypln2(X, 1, barva1t, 0, [v1:[_ph, _bokp1, _bokp2], v2:[_bokp2], h]);
  186.  
  187.   barva2s = RGB(0,250,0);
  188.   barva2t = RGB(0,220,0);
  189.   vypln = vypln2(U, 1, barva2t, 0, [v2:[_ph, _pd, _bokp1, _bokp2], v1:[_bokp2, _bokp1], h]);
  190.   vypln = vypln(V, 1, barva2s, 0, v2:_ph);
  191.   videt(X, vse, 0);
  192.   
  193.   styl(v1:_vrch, 2, silny);
  194.   styl(v2:_vrch, 2, silny);
  195.   
  196.   N21 = pruniky_k_p2(H2, v2:_bokn1, 0.01, 0.1);
  197.   rozdel(v2:_bokn1, 2, 2,0, 1,3, seradbnp(v2:_bokn1, N21:0, N21:(pocet(N21)-1)));
  198.   videt(N21, vse, 0);
  199.  
  200.   N22 = pruniky_k_p2(H2, v2:_bokn2, 0.01, 0.1);
  201.   rozdel(v2:_bokn2, 2, 2,0, 1,3, seradbnp(v2:_bokn2, N22:0, N22:(pocet(N22)-1)));
  202.   videt(N22, vse, 0);
  203.   
  204.   N11 = p(v1:_bokn1.2, v2:_bokn1.2);
  205.   N11 = p(v1:_bokn1.2, v2:_bokn2.2);
  206.   rozdel(v1:_bokn1, 2, 2,0, 1,3, seradbnp(v1:_bokn1, N11:0, N11:(pocet(N11)-1)));
  207.   videt(N11, vse, 0);
  208.   
  209.   N12 = p(v1:_bokn2.2, v2:_bokn1.2);
  210.   N12 = p(v1:_bokn2.2, v2:_bokn2.2);
  211.   rozdel(v1:_bokn2, 2, 2,0, 1,3, seradbnp(v1:_bokn2, N12:0, N12:(pocet(N12)-1)));
  212.   videt(N12, vse, 0);
  213.   
  214.  
  215.   Y = p(v1:_osa.2, v2:_osa.2) + bod(0.1,0,0.1);
  216.   vypln2 = vypln2(Y, 2, barva2t, 0, [x, v2:[_bokn1, _bokn2, _vrch], h]);
  217.   
  218.   Y2 = p(v1:_osa.2, v2:[_bokn1, _bokn2].2) + bod(0.1,0,0.1);
  219.   vypln2 = vypln2(Y2, 2, barva1t, 0, [x, v1:[_bokn1, _bokn2, _vrch], v2:[_bokn1, _bokn2], h]);
  220.  
  221.   videt([Y, Y2], vse, 0);
  222. }
  223.