home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1999 November
/
Chip_1999-11_cd.bin
/
ctenari
/
Plavja
/
Exe
/
zakladni.dk
< prev
Wrap
Text File
|
1999-09-02
|
4KB
|
191 lines
// 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);
}