home *** CD-ROM | disk | FTP | other *** search
- // knihovna: ZAKLADNI.DK
- // autor: Petr Plavjanφk
- // obsah: zßkladnφ funkce
-
- // stφn bodu B ve sm∞ru osv∞tlenφ s
- stin (s, B) {
- r = rovnobezka(s, B);
- V = p(m(Pi, Ny), r);
- videt(V:0, 2, 0);
- videt(V:1, 1, 0);
- vrat V;
- }
-
- // Φφslo barvy slo₧enΘ ze slo₧ek:
- // R Φervenß
- // G zelenß
- // B modrß
- RGB (R, G, B) {
- vrat B*256*256 + G*256 + R;
- }
-
- // p°enese bod nejen na p°φmku a zm∞nφ ho
- // vracφ nßrys
- po_ordinale(Ro1, Ro2, *B, p) {
- kdyz (Ro1==Pi) n=1;
- kdyz (Ro1==Ny) n=2;
- kdyz (Ro1==Tau) n=3;
- kdyz (Ro2==Pi) m=1;
- kdyz (Ro2==Ny) m=2;
- kdyz (Ro2==Tau) m=3;
-
- i=0;
- pocet = pocet(B);
- dokud (i<pocet) {
- k = kolmice(Ro2, x, (B:i).m);
- B2 = p(p.m, k);
- R2 = B2;
- R = bod((B:i), B2);
- zrus(B2);
- zrus(k);
- zvetsi(i);
- }
- prepis(B, R);
-
- vrat R2;
- }
-
- // minimalni rozdil cisel ze skupiny c od (jednoho) cisla x
- min_delta (c, x) {
- minc = -1;
- min = 99999;
- pocet = pocet(c);
- i = 0;
- dokud(i < pocet) {
- kdyz(abs(c:i - x) < min) {
- prepis(min, abs(c:i - x));
- prepis(minc, i);
- }
- zvetsi(i);
- }
- vrat [min, minc];
- }
-
- // prunik krivky tvorene body s primkou (1 bod)
- prunik_k_p(body_krivky, primka) {
- blizkost = poloha(primka, body_krivky);
- cislo = min_delta(blizkost, 0):1;
- kdyz (cislo != -1) { V = body_krivky:cislo;
- k = kolmice(primka, V);
- vrat p(primka, k);
- }
- jinak vrat nic();
- }
-
- prunik_k_p2(body_krivky, primka) {
- blizkost = polohan(primka, body_krivky);
- cislo = min_delta(blizkost, 0):1;
- kdyz (cislo != -1) { V = body_krivky:cislo;
- k = kolmice(primka, V);
- vrat p(primka, k);
- }
- jinak vrat nic();
- }
-
- // prunik krivky tvorene body s primkou (vφce bod∙)
- // nastaveni presnosti (minimalni vzdalenost od primky)
- // a minimalni vzdalenosti dvou sousednich vysledku
- pruniky_k_p(body_krivky, primka, presnost, vzdal) {
- i = 0;
- pocet = pocet(body_krivky);
- dokud (i < pocet) {
- kdyz(abs(poloha(primka, body_krivky:i)) <= presnost)
- {
- k = kolmice(primka, body_krivky:i);
- R = p(primka, k);
- }
- zvetsi(i);
- }
- zrus(i); zrus(pocet);
- V = seradbnp(primka, beznic(R));
-
- i = 1;
- pocet = pocet(V);
- kdyz (pocet > 0) W = V:0;
- dokud (i < pocet) {
- kdyz (v(W:(pocet(W)-1), V:(i)) >= vzdal) W = V:i;
- zvetsi(i);
- }
-
- vrat beznic(W);
- }
-
- pruniky_k_p2(body_krivky, primka, presnost, vzdal) {
- i = 0;
- pocet = pocet(body_krivky);
- dokud (i < pocet) {
- kdyz(abs(polohan(primka, body_krivky:i)) <= presnost)
- {
- k = kolmice(primka, body_krivky:i);
- R = p(primka, k);
- }
- zvetsi(i);
- }
- zrus(i); zrus(pocet);
- V = seradbnp(primka, beznic(R));
-
- i = 1;
- pocet = pocet(V);
- kdyz (pocet > 0) W = V:0;
- dokud (i < pocet) {
- kdyz (v(W:(pocet(W)-1), V:(i)) >= vzdal) W = V:i;
- zvetsi(i);
- }
-
- vrat beznic(W);
- }
-
-
- koule (S, r) {
- k = kruz(Pi, S.1, r);
- k = kruz(Ny, S.2, r);
- vrat k;
- }
-
- // vytvo°φ vßlec v obecnΘ poloze: dv∞ elipsy, boΦnφ p°φmky
- // bez viditelnosti
- valec (Ro, S, r, v) {
- k = kruz(Ro, S, r);
- o = kolmice(Ro, S);
-
- //hornφ podstava
- S2 = bod(o, S, v):1;
- Ro2 = rovnobezna(Ro, S2);
- k = kruz(Ro2, S2, r);
-
- //boΦnφ Φßry vßlce
- stopap = p(Ro, Pi);
- stopan = p(Ro, Ny);
- lp = rovnobezka(stopap, S);
- ln = rovnobezka(stopan, S);
- LP = bod(lp, S, r);
- LN = bod(ln, S, r);
- lp2 = rovnobezka(stopap, S);
- ln2 = rovnobezka(stopan, S);
- LP2 = bod(lp2, S2, r);
- LN2 = bod(ln2, S2, r);
- sn = usecka(LN:0, LN2:0);
- sn = usecka(LN:1, LN2:1);
- sp = usecka(LP:0, LP2:0);
- sp = usecka(LP:1, LP2:1);
-
- // schovßnφ nßrysu nebo p∙dorysu
- // sek(k:0, 1, 1, LP:0, LP:1, 1);
- // sek(k:0, 2, 1, LP:0, LP:1, 0);
- // sek(k:0, 1, 2, LN:0, LN:1, 1);
- // sek(k:0, 2, 2, LN:0, LN:1, 0);
- // videt(k, vse, 1, ?, ?, 2, 0);
- // videt(k:0, 2, vse, 1, ?, ?, 1, 3);
- // videt(k:1, 2, vse, 1, ?, ?, 1, 3);
-
- videt(sp, 2, 0);
- videt(sn, 1, 0);
- // videt(sp, 1, 1, ?, ?, 2, 0);
- // videt(sn, 2, 1, ?, ?, 2, 0);
-
- videt(m(LP, LP2, LN, LN2), vse, 0);
- popis(k:1, vse, 0);
-
- vrat m(k.1, k.2, sp, sn);
- }
-