#vloz "zakladni.dk"

kulova (vyska) {
  B = bod(0, 0, vyska);
  r = rovnobezka(x, B);

  RR = p(alfa:0, r);

  kdyz (pocet(RR) > 1) {
    R = RR:1;  
  
    RS = primka(R, SN:0);
    W = p(o.2, RS.2);
    k = kolmice(Ny, s.2, W);
    T = p(r,k);

    TP = po_ordinale(Ny, Pi, T, h); 
    kp = kolmice(Pi, s.1, TP);
    kk = kruz(Pi, SP, v(R.1, SP.2));
    VV = p(kk, kp);

    kdyz (typ(VV:0)=="bod") {
      V = bod((VV:0)."x", (VV:0)."y", vyska);
      V = bod((VV:1)."x", (VV:1)."y", vyska);
      popis(V, vse, 0);
      videt(V, 1, 0);
      vrat V;
    }
  }
}

hlavni () {
  papir(29.7, 21, 1);
  okraj(0.75,0.75,0.75,0.75,0.25,1,0);
  posunutipss(0,-2);  
  nadpis("", "",
         datum(), "PETR PLAVJANÍK",
         "OSVĚTLENÍ ANULOIDU");

  s = usecka(bod(0,0,0), bod(-1,1,1));  

  SN = bod(-6,0,2.5);
  SN = bod(2,0,2.5);
  SP = bod(-2,7);
  alfa = kruz(Ny, SN, 2);
  alfa = kruz(Pi, SP, 6);
  alfa = kruz(Pi, SP, 2);
  k = kolmice(Ny, x, SN);
  R = p(alfa:0, k:0);
  R = p(alfa:1, k:1);
  a = usecka(R:0, R:2);
  a = usecka(R:1, R:3);
  silny = styl();
  videt(silny, vse, 1, ?, ?, 2, 0);
  styl(a, silny);  
  styl(alfa:[2,3], 1, silny);
  sek(alfa:0, 1, 2, R:0, R:1, 1);
  videt(alfa:0, 1, 2, 1, ?, ?, 1, 3);
  sek(alfa:0, 2, 2, R:0, R:1, 0);
  videt(alfa:0, 2, 2, 1, ?, ?, 2, 0);
  sek(alfa:1, 1, 2, R:2, R:3, 0);
  videt(alfa:1, 1, 2, 1, ?, ?, 1, 3);
  sek(alfa:1, 2, 2, R:2, R:3, 1);
  videt(alfa:1, 2, 2, 1, ?, ?, 2, 0);
  zrus(k);
  zrus(R);
  popis(a, vse, 0);
  o = kolmice(Pi, SP);
  videt(o, vse, 1, ?, ?, 1, 2);
  h = rovnobezka(x, SP); 

  stop();

  vyska = 0.5;
  krok = 0.025;

  dokud (vyska <= 4.5) {
    r = kulova(vyska);
    prepis(vyska, vyska+krok);
  }

  stop();

  r2 = usp(2, 1, -2, r);
  cr = nuhelnik(r2);
  videt(cr, 1, 1, 0, 0);
  videt(r, vse, 0);
  videt(r2, vse, 0);

  kappa = rovnobezna(ny, sp);
  zvn = p(kappa, cr);
  popis(zvn, vse, 0);
  sek(cr, 1, 2, zvn:0, zvn:1, 1);
  videt(cr, 1, 2, 1, 0, 0, 1, 3);
  sek(cr, 2, 2, zvn:1, zvn:0, 1);
  videt(cr, 2, 2, 1, 0, 0, 1, 0);

  lambda = rovnobezna(pi, sn:0);
  zvp = beznic(p(lambda, cr));
  popis(zvp, vse, 0);
  sek(cr, 1, 1, zvp:1, zvp:0, 1);
  videt(cr, 1, 1, 1, 0, 0, 1, 3);
  sek(cr, 2, 1, zvp:0, zvp:1, 1);
  videt(cr, 2, 1, 1, 0, 0, 1, 0);

  stop();

  i = 0;
  dokud (i < pocet(r)) {
    kdyz (typ(r:i)=="bod") {
      x = stin(s, r:i);
      sp = x:0;
      sn = x:1;
      zrus(x);
    }
    zvetsi(i);
  }
  popis(sp, vse, 0);
  popis(sn, vse, 0);
  zrus(i);
  
  sp2 = usp(2, 1, -2, sp);
  csp = nuhelnik(sp2);
  sn2 = usp(2, 1, -2, sn);
  csn = nuhelnik(sn2);
  zrus(sn2);
  zrus(sp2);

  p = beznic(p(alfa:2, csp));

  sek(csp, 1, p:1, p:0, 1);
  sek(csp, 2, p:0, p:1, 1);
  videt(csp, 1, 1, 1, 0, 0, 2, 0);
  videt(csp, 2, 1, 1, 0, 0, 1, 3);
  videt(csp, 3, 1, 3, 0, 0, 1, 3);
  videt(csn, 1, 2, 1, 0, 0, 2, 0);
  videt(csn, 2, 2, 3, 0, 0, 1, 3);

  zrus(p);
  
  videt(sp, 1, 0);
  videt(sn, 2, 0);

  p1 = beznic(p(alfa:1, csn)):0;
  p2 = beznic(p(a:1, csn));
  
  x1 = p1."x";
  x2 = p2."x";
  
  zrus(p1);
  zrus(p2);
  
  stop();
  i = 0;
  pocet = pocet(csn);
  dokud (i < pocet) {
    kdyz ( ((csn:i)."B"."x" < x1) & ((csn:i)."A"."x" > x2) ) 
      videt(csN:i, 2, 1, ?, ?, 1, 3); 
    zvetsi(i);
  }

  b1 = RGB(240,220,130);
  b2 = RGB(230,200,100);
  bs = RGB(150,150,150);
  
  v = vypln(ZVN:0, 1, b1, 0, alfa);
  v = vypln(bod(1.63, 3.03, 0), 1, b2, 0, [cR, alfa]);
  A = p(Lambda, o);
  v = vypln2(A, 2, b1, 0, [alfa, a]);
  v = vypln2(bod(1.38, 0, 1.26), 2, b2, 0, [cR, alfa, a]);
 
  sv = vypln(bod(3.83, 1.91, 0), 1, bs, 0, [csP, alfa, x]);
  sv = vypln(bod(3.75, 0, 0.63), 2, bs, 0, [csN, alfa, x, a]);
}