home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1999 November
/
Chip_1999-11_cd.bin
/
ctenari
/
Plavja
/
Exe
/
Priklady
/
Axonometrie_Evolventa_a_sroubovice.dg
< prev
next >
Wrap
Text File
|
1999-06-23
|
5KB
|
219 lines
#vloz "zakladni.dk"
#vloz "kuzelosecky.dk"
/*
Tento soubor je p°φkladem toho, ₧e v programu DG
lze pou₧φt jakoukoliv promφtacφ metodu. V programu
jsou zabudovßny pouze tyto t°i: dvourozm∞rnΘ, k≤tovanΘ
a mongeovo, ale ve djvourozm∞rnΘm zobrazenφ m∙₧eme
postupovat tak, jak bychom r²sovali na skuteΦnΘm
papφ°e. V²hodou v programu DG je, ₧e slo₧it∞jÜφ
konstrukce lze napsat do samostatn²ch funkcφ.
Nap°φklad v tomto postupu existuje funkce abod(x, y, z),
kterß vracφ bod v axonometrii o zadan²ch sou°adnicφch.
P°esn∞ji vracφ skupinu o dvou bodech: 1. axonometrick²
pr∙m∞t, 2. p∙dorys. Postup, kter²m je toto vykonßno
je stejn² jako, kdy₧ jsme tuto ·lohu r²sovali na st°ednφ
Ükole. JeÜt∞ p°edtφm, ne₧ zavolßme funkci abod, musφme
definovat axonometrii (vytvo°it osy, axonometrick²
troj·helnφk, sklopit osy).
*/
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(S, P);
B = Bp - bod(0,v,0);
vrat m(B, Bp);
}
hlavni () {
zobrazeni("papir");
papir(29.7, 21, 2, 1); //A4
okraj(0.75,0.75,0.75,0.75,0.25,1,0);
posunutipss(2,4);
nadpis("RYS ╚. 3", "", datum(), "PETR PLAVJAN═K",
"EVOLVENTA A èROUBOVICE");
// p°eddefinovanΘ styly
normal = styl();
sklopeny = styl();
videt(sklopeny, vse, 2, ?, ?, 1, 2);
barva(sklopeny, "seda");
silny = styl();
videt(silny, vse, 2, 0, 3, 2, 0);
schovany = styl();
videt(schovany, vse, 2, -1, 2, 1, 3);
nevidet = styl();
videt(nevidet, vse, 0);
// nastavenφ axonometrie:
ax_x = 10;
ax_y = 11;
ax_z = 12;
// 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);
S = p(osa_x, osa_y);
rozdel(osa_x, 1, 1,0, 1,3, S);
rozdel(osa_y, 1, 1,0, 1,3, S);
rozdel(osa_z, 1, 1,0, 1,3, S);
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);
// 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);
//vlastnφ postup:
// vßlec
// podstava
r = 2; // polom∞r
A = abod(5, 6, 0); // st°ed
R = abod(5-r, 6, 0):0;
R = abod(5+r, 6, 0):0;
R = abod(5, 6-r, 0):0;
R = abod(5, 6+r, 0):0;
v = 10; // v²Üka
e = rytz(Pi, R:0, R:1, R:2, R:3);
B = abod(5, 6, v);
e2 = posun(e, vektor(B:0-A:0));
styl(e2, silny);
r1 = rovnobezka(x, A:0);
r2 = rovnobezka(x, B:0);
E1 = p(e, r1);
E2 = p(e2, r2);
bok = usecka(E1:0, E2:0);
bok = usecka(E1:1, E2:1);
styl(bok, silny);
rozdel(e, 1, 1,3, 2,0, E1,-1,E1:0);
zrus(R);
popis(r1, vse, 0); // bude pou₧ita pro urΦenφ viditelnosti Üroubovice
zrus(r2);
zrus(E1);
zrus(E2);
// Üroubovice v mongeovce
i = 0;
zavitu = 1;
kroku = 100; // na jeden zavit
uhel = 2*pi/kroku;
vystup = v/kroku/zavitu;
dokud (i < kroku*zavitu) {
K = bod(5, 6) + bod(r*cos(i*uhel), r*sin(i*uhel), i*vystup);
zvetsi(i);
}
zrus(i);
// p°evod do axonometrie
i = 0;
pocet = pocet(K);
dokud (i < pocet) {
D = abod((K:i)."x", (K:i)."y", (K:i)."z");
AK = D:0;
AKP = D:1;
zrus(D);
zvetsi(i);
}
zrus(i);
zrus(pocet);
videt(K, vse, 0);
videt(AK, vse, 0);
videt(AKP, vse, 0);
l = ncara(AK);
styl(l, silny);
// viditelnost Üroubovice
i = 0;
vy = r1."A"."y";
pocet = pocet(K);
dokud (i < pocet) {
kdyz ((AKP:i)."y" < vy) styl(l:i, schovany);
zvetsi(i);
}
zrus(i);
zrus(pocet);
zrus(vy);
// evolventa - pr∙nik teΦen Üroubovice s p∙dorysnou
i = 1;
pocet = pocet(K)-1;
dokud (i < pocet) {
tp = tecna(e, AKP:i);
tt = primka(AK:(i-1), AK:(i+1));
t = rovnobezka(tt, AK:i);
R = p(tp, t);
zrus(t);
zrus(tt);
zrus(tp);
zvetsi(i);
}
zrus(i);
zrus(pocet);
videt(R, vse, 0);
l2 = ncara(R);
// viditelnost evolventy
styl(l2, silny);
i = 0;
vx1 = (bok:1)."A"."x";
vx2 = (bok:0)."A"."x";
vy1 = r1."A"."y";
vy2 = (B:0)."y";
pocet = pocet(l2);
dokud (i < pocet) {
kdyz ( ((R:i)."y" < vy1) & ((R:i)."x" > vx1) & ((R:i)."x" < vx2) & ((R:i)."y" > vy2))
styl(l2:i, schovany);
zvetsi(i);
}
zrus(i);
zrus(pocet);
}