home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1999 November
/
Chip_1999-11_cd.bin
/
ctenari
/
Plavja
/
Exe
/
axonometrie.dk
next >
Wrap
Text File
|
1999-09-02
|
4KB
|
172 lines
// knihovna: AXONOMETRIE.DK
// autor: Petr Plavjanφk
// obsah: funkce pro prßci r²sovßnφ v axonometrii na "papφ°e"
#vloz "zakladni.dk"
// nastavenφ axonometrie:
axonometrie(ax_x, ax_y, ax_z, *AO, *z_x, *z_y, *z_z, *osa_x, *osa_y, *osa_z, *sosa_x, *sosa_y, *sosa_z, *sSxz, *sSyz) {
zobrazeni("papir");
// axonometrick² troj·helnφk
z_x = rovnobezka(x, _O);
MX = bod(z_x, _O, ax_x/2):0;
MY = bod(z_x, _O, ax_x/2):1;
ky = kruz(Pi, MY, ax_y);
kz = kruz(Pi, MX, ax_z);
MZ = p(ky, kz):0;
zrus(ky);
zrus(kz);
// osy
osa_x = kolmice(z_y = primka(MZ, MY), MX);
osa_y = kolmice(z_z = primka(MZ, MX), MY);
osa_z = kolmice(z_x, MZ);
AO = p(osa_x, osa_y);
rozdel(osa_x, 1, 1,0, 1,3, AO);
rozdel(osa_y, 1, 1,0, 1,3, AO);
rozdel(osa_z, 1, 1,0, 1,3, AO);
rozdel(z_x, 1, 0,0, 1,0, MY, MX);
rozdel(z_y, 1, 0,0, 1,0, MZ, MY);
rozdel(z_z, 1, 0,0, 1,0, MZ, MX);
barva([osa_x, osa_y, osa_z], RGB(100,0,0));
barva([z_x, z_y, z_z], vse, vse, RGB(100,0,0));
// sklopenφ os
T = (MZ + MX)/2;
t = kruz(Pi, T, v(T, MZ));
sSxz = p(t, osa_y):1;
zrus(T);
zrus(t);
T2 = (MZ + MY)/2;
t2 = kruz(Pi, T2, v(T2, MZ));
sSyz = p(t2, osa_x):1;
zrus(T2);
zrus(t2);
sosa_x = primka(sSxz, MX);
styl(sosa_x, sklopeny);
sosa_y = primka(sSyz, MY);
styl(sosa_y, sklopeny);
sosa_z = primka(sSxz, MZ);
styl(sosa_z, sklopeny);
popis(m(sosa_x, sosa_y, sosa_z, sSxz, sSyz, z_x, z_y, z_z), vse, 0);
}
abod (ax, ay, az) {
BX = bod(sosa_x, sSxz, ax):0;
kx = kolmice(z_z, BX);
BY = bod(sosa_y, sSyz, ay):0;
ky = kolmice(z_y, BY);
Bp = p(kx, ky);
BZ = bod(sosa_z, sSxz, az):0;
kz = kolmice(z_z, BZ);
P = p(osa_z, kz);
v = v(AO, P);
B = Bp - bod(0,v,0);
vrat m(B, Bp);
}
aprimka (aA, aB) {
vrat [primka(aA:0, aB:0), primka(aA:1, aB:1)];
}
arovina (ax, ay, az) {
AX = abod(ax, 0, 0);
AY = abod(0, ay, 0);
AZ = abod(0, 0, az);
ap = primka(AX:0, AY:0);
at = primka(AY:0, AZ:0);
an = primka(AZ:0, AX:0);
kdyz ( (ax > 0) & (ay > 0) & (az > 0) ) {
rozdel(ap, 1, 1,3, 1,0, AX:0, AY:0);
rozdel(at, 1, 1,3, 1,0, AY:0, AZ:0);
rozdel(an, 1, 1,3, 1,0, AZ:0, AX:0);
}
kdyz ( (ax < 0) & (ay > 0) & (az > 0) ) {
rozdel(ap, 1, 1,3, 1,0, AY:0);
rozdel(at, 1, 1,3, 1,0, AY:0, AZ:0);
rozdel(an, 1, 1,0, 1,3, AZ:0);
}
vrat [ap, an, at];
}
kolmy_smer (p) {
R = p."A";
R = p."B";
s = rovnobezka(osa_y, R:0);
s = rovnobezka(z_x, R:1);
U = p(s:0, s:1);
t = rovnobezka(osa_x, R:1);
t = kolmice(z_x, R:0);
P = p(t:0, t:1);
k = primka(U, P);
vrat k;
}
zkraceni_na_ose_x () {
X = abod(1,0,0);
vrat v(AO, X:0);
}
zkraceni_na_ose_y () {
X = abod(0,1,0);
vrat v(AO, X:0);
}
zkraceni_na_ose_z () {
X = abod(0,0,1);
vrat v(AO, X:0);
}
astopa(ro) {
A = p(ro:0, z_x);
B = p(ro:1, z_z);
a = primka(A, B);
rozdel(a, 1, 1,3, 1,0, A, B);
vrat a;
}
kolmice_k_rovine_bodem(ro, S) {
aro = astopa(ro);
k = kolmice(aro, S:0);
k = rovnobezka(kolmy_smer(ro:0), S:1);
vrat k;
}
prusecik_ro_s_p(ro, p) {
Np = p(osa_x, p:1);
r = rovnobezka(osa_z, Np);
Na = p(r, ro:1);
Pa = p(p:1, ro:0);
s = primka(Pa, Na);
R = p(s, p:0);
vrat R;
}
rovnobezna_rovina_bodem (ro, B) {
ha = rovnobezka(ro:0, B:0);
h1 = rovnobezka(ro:0, B:1);
hN = p(h1, osa_x);
hM = p(h1, osa_y);
Na = p(rovnobezka(osa_z, hN), ha);
Ma = p(rovnobezka(osa_z, hM), ha);
n = rovnobezka(ro:1, Na);
m = rovnobezka(ro:2, Ma);
X = p(n, osa_x);
p = rovnobezka(ro:0, X);
vrat [p, n, m];
}
prusecnice_rovin (ro, sigma) {
P = p(ro:0, sigma:0);
N = p(ro:1, sigma:1);
P1 = P;
N1 = p(rovnobezka(osa_z, N), ro:0);
vrat [primka(P, N), primka(P1, N1)];
}