Spidron (2)
Az
Erdély Dániel
által felfedezett geometriai akakzat mozgásának az elemzése és megjelenítése
Készítette:
dr. Szilassi Lajos
SZTE JGYTF Matematika Tanszék
E-mail:
szilassi@jgytf.u-szeged.hu
A feladat:
Az Erdély Dániel által "spidron"-nak nevezett geometriai konstrukció mozgásának a leírását, elemzését és megjelenítését tűztük ki célul.
A spidron "fészek" egy szabályos hatszög alkalmas módon történő összhajtásával előálló felület. Egy ilyen s pidron-fészek hat, egymással egybevágó spidron-kar -ból áll, ahol mindegyik kar alapalakzatok egymáshoz kapcsolódó sorozata.
Egy alapalakzat egy 120°-os csúcsszögű egyenlőszárú háromszögből és egy ehhez illesztett szabályos háromszögből áll,
amelyek együtt - amennyiben egy síkban vannak - egy derékszögű háromszöget alkotnak.
Hat egybevágó alapalakzatból előállítható egy spidron-gyűrű. Maga a spidron-fészek tekinthető úgy is, mint ilyen egymásba illesztett spidron-gyűrűk sorozata.
A Spidron(1) Maple fájlban kiszámítottuk azokat a függvényeket, amelyek meghatározzák egy alapalakzat, így egy spidron-fészek mozgását.
Most a spidron-fészek rajzolásával, valamint az ezt leírő két függvény elemzésével foglalkozunk.
| > |
| > | restart;with(plots):with(plottools): unprotect(D): |
Warning, the name changecoords has been redefined
Warning, the name arrow has been redefined
| > |
Átalánosan használható eljárások
Szín-skálák
| > | sz:= t-> COLOR(HSV,t,0.5,1): |
Ez egy folytonos szín skála, bemenő adata egy 0 és 1 kötötti szám
| > | sf:=n -> [seq(COLOR(HSV,(i-1)/n,0.5,1),i=1..n)]: |
Ez színeknek egy
n
hosszú listában tárolt
n
tagú sorozata.
Arra fogjuk használni, hogy színekkel (is) érzékeltessük, hogy a megjelenített sorozat tagjai hogyan követik egymást.
| > | #t:= P -> P[1]^2+P[2]^2+P[3]^2: |
A P v ektor hosszának a négyzetét számítja ki.
# #e := transform((x,y,z) -> [x,y,-z]):
Egy már megrajzolt objektum tükrözése az (x,y) síkra
| > |
A spidron előállításához szükséges eljárások
| > | V:= proc(d,alpha,beta) local F,A,c,V; c:=d*cos(beta)*sqrt(3)/2: F:=[c*cos(alpha),c*sin(alpha),0]: A:=[-d*sin(alpha)*cos(beta)/2,d*cos(alpha)*cos(beta)/2,d*sin(beta)/2]: V:=[F+A,F-A]: end proc: a:=f-> arccos(1/4*(3^(1/2)-2*3^(1/2)*cos(f)+3*3^(1/2)*cos(f)^2 -(-1+4*cos(f)-3*cos(f)^2)^(1/2)*sin(f))/(2-4*cos(f)+3*cos(f)^2)^(1/2)/cos(f)): b:= f-> arctan((-1-3*cos(f)^2+4*cos(f))^(1/2)/(2+3*cos(f)^2-4*cos(f))^(1/2)): A V eljárás annak a szakasznak a két végpontját állítja elő, amely a spidron "fészek " térbeli szabályos hatszögének az oldala, vagyis az alapalakzatot alkotó 120°-os egyenlőszárú háromszög alapja. Bemenő adatok: d : a térbeli szabályos hatszög oldala |
Belső változók:
c:
A hatszögoldal felezőpontjának az origótól mért távolsága. (Ez függ
-tól, nagyobb
esetén a felezőpont közelebb kerül az origóhoz)
Kihasználtuk, hogy a hatszögoldal merőleges vetülete is szabályos hatszög.
F:
A hatszög oldalfelező pontja;
A
: a -térbeli - hatszögoldal egyik csúcsa.
Az
a(f)
és
b(f)
függvényben
f
a spidron-alapalakzat
AB
oldalának az
XY
síkkal bezárt szögét jelenti;
a(f)
a FOG szög, ahol
O
az origó,
F
az
AB
oldal,
G
a
CD
oldal felezőpontja - az
(xy)
síkban..
b(f)
a
CD
szakasznak az
XY
síkkal bezárt szöge.
Lényegében ezek a függvények adják meg, hogy a spidron-alapalakzat sorozat következő tagja
hogyan helyezkedik el az előző (
f
-el jellemzett) taghoz képest.
Ezeket egy előző programmal határoztuk meg
.
| > |
A megjelenítés eljárásai
Egy (térbeli ) alapalakzat megjelenítése
| > | P0:=proc(f) local d, A,B,C,D,L,H1,H2,T: d:=10: if is(f<0) or is(f >= Pi/2) then printf("Nincs értelme a feladatnak: f =%d°",fok(f)):else A:=V(d,0,f)[1]: B:=V(d,0,f)[2]: C:=V(d/sqrt(3),a(f),b(f))[1]: D:=V(d/sqrt(3),a(f),b(f))[2]: H1:=polygonplot3d([A,B,D],color=green): H2:=polygonplot3d([A,C,D],color=yellow): T:=textplot3d([ [A[1],A[2],A[3],"A"], [B[1],B[2],B[3],"B"], [C[1],C[2],C[3],"C"], [D[1],D[2],D[3],"D"], [ 0, 0, 0,"O"]] ,font=[TIMES,BOLD,14] ,color=black): display3d(H1,H2 ,T ,axes= normal,scaling= constrained); end if: end proc: |
Az eljárás bemenő adata az a szög -ívmértékben- , amekkora szöget az
AB
oldal az
XY
síkkal bezár.
A spidron-kar szélső helyzete, az, amelyben
f=Pi/3
. Ekkor
AD
merőleges lesz az
XY
síkra.
Igy az e feletti
f
értéknek geometiailag nincs értelme.
| > | P0(Pi/4); |
| > | P0(Pi/3); # Ez a maximális értelmezhető bemenő adat. |
| > | P0(Pi/3+0.15); # Ebből már nem lehet valódi spidront készíteni |
| > | P0(arcsin(sqrt(3)/3)); fok(arcsin(sqrt(3)/3)); |
Ez az az eset, amelyben a spidron-fészek széle éppen egy kocka éleit alkotja.
| > | n:=15: d:=Pi/3/n: display3d(seq(P0(i*d),i=0..n),seq(P0((n-i)*d),i=0..n),insequence=true); |
| > |
A fenti "mozi"-ban n a fázisok számát jelenti. n -et növelve lassúbb és folyanmatosabb lesz a mozgás.
| > |
A fenti kép előállításához javasoljuk a betűzés kiiktatását a P0 eljárásból a mely a T rész-eljárás.
| > | P1:=proc(f) local d, A,B,C,D,L,H1,H2,T: d:=10: if is(f<0) or is(f >= Pi/2) then printf("Nincs értelme a feladatnak: f =%d°",fok(f)):else A:=V(d,0,f)[1]: B:=V(d,0,f)[2]: C:=V(d/sqrt(3),a(f),b(f))[1]: D:=V(d/sqrt(3),a(f),b(f))[2]: H1:=polygonplot3d([A,B,D],color=green): H2:=polygonplot3d([A,C,D],color=yellow): display3d(H1,H2 ,axes= normal,scaling= constrained); end if: end proc: |
Ez az eljárás ugyanaz, mint az elöbbi, csak nem írtuk ki a csúcsok nevét.
Ezzel célszerű olyan sorozatot megjeleníteni, ahol minden fázis egyszerre látszik.
| > | n:=20: d:=Pi/3/n: display3d(seq(P1(i*d),i=0..n),insequence=false); |
Ezt célszerű nagyobb n értékkel kipróbálni, így megfigyelhető, hogy a csúcsok milyen mozgást írnak le.
| > |
| > |
Egy spidron kar megjelenítése
| > | SP:=proc(f) local n,d,i,A,B,C,D,L,L1,L2,H1,H2,nd,na,nb,szin, R: n:=8:szin:=sf(n): nd:=10:na:=0: nb:=evalf(f): szin:=sf(n): A:=V(nd,na,nb)[1]: B:=V(nd,na,nb)[2]: L:=line(A,B,color=blue,linestyle=32): for i from 1 to n do A:=V(nd,na,nb)[1]: B:=V(nd,na,nb)[2]: nd:=nd/sqrt(3):na:=na+a(nb): nb:=b(nb): C:=V(nd,na,nb)[1]: D:=V(nd,na,nb)[2]: L1:=line(D,B, color=magenta, linestyle=32): L2:=line(A,C, color=red, linestyle=32): H1:=polygonplot3d([A,B,D]): H2:=polygonplot3d([A,C,D]): R[i]:= display3d(L,L1,L2,H1,H2,scaling= constrained,color=szin[i]); end do: display3d(seq(R[i],i=1..n),insequence=false); end proc: |
Az eljárás bemenő adata ugyancsak az a szög -ívmértékben- , amekkora szöget a legelső alapalakzat az
XY
síkkal bezár.
Itt - és a továbbiakban is
n=8
alapalakzatát vettük a spidron-karnak, a továbbiak úgy sem látszanak.
A spidron-kar szélső helyzete, az, amelyben
f=Pi/3
. Ekkor
AD
merőleges lesz az
XY
síkra.
Igy az e feletti
f
értéknek geometiailag nincs értelme. Itt nem teszteltük le
f
-et.
Célszerű az alábbi rajzokon be- ill kikapcsolt koordinátarendszerrel is megnézni a jelenséget.
Az eljárás legfontosabb sora ez:
nd:=nd/sqrt(3): na:=na+a(nb): nb:=b(nb):
amelyben (szimultán, azaz egymásra hivatkozó) rekurzív képletekkel határozzuk meg a következő alpalakzathoz a bemenő adatokat.
| > | SP(Pi/4); |
| > | SP(Pi/3); |
| > | SP(0); |
| > | SP(arcsin(sqrt(3)/3)); |
Ez az az eset, amelyben a spidron-fészek széle éppen egy kocka éleit alkotja.
| > | SP(-Pi/4); |
| > | SP(Pi/3+0.1); |
| > | SP(Pi/2); |
Error, (in polygonplot3d) incorrect first argument
Itt már kihagytuk a z ellenőrző részt az eljárásból. Figyeljük meg, hogy rosszul választott adatokkal rosszul, ill, sehogy nem működik az eljárás.
| > | n:=20: d:=Pi/3/n: display3d(seq(SP(i*d),i=0..n),seq(SP((n-i)*d),i=0..n) ,axes=normal ,insequence=true); |
A fenti "mozi"-ban n a fázisok számát jelenti. n -et növelve lassúbb és folyanmatosabb lesz a mozgás.
| > | n:=10: d:=Pi/3/n: display3d(seq(SP(i*d),i=0..n),insequence=false); |
| > |
Egy spidron-fészek megjelenítése
| > | SPF:=proc(f) local n,i,A,B,C,D,L,szin,H1,H2,nd,na,nb, R,t,e,fel,le,E,V1,V2,V3,SPF: t := transform((x,y,z) ->[x,y,-z]): e := transform((x,y,z) ->[x,y,signum(f)*z]): nd:=1: n:=8: na:=0: nb:=abs(evalf(f)): # nd a külső spidrongyű élhossza, n a spidronfészek mélysége # Ezek állitható paraméterek, a rekurzió kezdő adatai # nb-t úgy értelmeztük, hogy negatív bemenő paraméter értékkel is működjön az eljárás # Ehhez kellett az e belső eljárás, mely megfordítja a a már elkészített spidronfészket, ha f<0 volt. szin:=sf(n): E:=line(V(nd,na,nb)[1],V(nd,na,nb)[2], color=blue , linestyle=16 ): for i from 1 to n do A:=V(nd,na,nb)[1]: B:=V(nd,na,nb)[2]: nd:=nd/sqrt(3):na:=na+a(nb): nb:=b(nb): C:=V(nd,na,nb)[1]: D:=V(nd,na,nb)[2]: L:=line(D,B, color=red # , linestyle=16 ): H1:=polygonplot3d([A,B,D]): H2:=polygonplot3d([A,C,D]): R[i]:= display3d(H1,H2 ,L # kiiktatható. Ez a spidronkar külső éle #,color=szin[i] # Ha ezt bekapcsoljuk, akkor változnak a színek a spirál-karon belül ); end do: fel:=display3d(seq(R[i],i=1..n) ,E # kiiktatható, ez a spidronfészek széle ,insequence=false): le:=rotate(t(fel),0,0,Pi/3): V1:=display3d(fel,le): V2:=rotate(V1,0,0,2*Pi/3): V3:=rotate(V2,0,0,2*Pi/3): SPF:=e(display3d(V1,V2,V3 ,lightmodel=light4 ,style=patchnogrid ,scaling= constrained # ,color=cyan #,color=sz(evalf(f)) # Ha ezt bekapcsoljuk, akkor a spidron színe az összehúzódástól függően változik )); end proc: |
A fenti eljárásban - Pi/3<f<Pi/3 esetben kapunk helyes, modellezhető alakzatról készült rajzot.
| > | SPF(Pi/8); SPF(-Pi/8); |
A fenti két rajzból látszik, hogy a térben elhelyezett spidron-fészek esetén nincs értelme "jobbra" ill. "balra" csavarodó spidron-fészekről beszélni, mert mindez attól füg, honnan nézzük. Ez két, vagy több egymáshoz illesztett spidronfészek egymáshoz viszonyított helyzeténén válik vizsgálható kérdéssé.
| > | SPF(Pi/3); |
| > | SPF(0); |
| > | SPF(arcsin(sqrt(3)/3)); |
Ez az az eset, amelyben a spidron-fészek széle éppen egy kocka éleit alkotja.
| > | n:=15: d:=Pi/3/n: display3d(seq(SPF(i*d),i=-n..n),seq(SPF(-i*d),i=-n..n) ,lightmodel=light4 ,insequence=true); |
A fenti "mozi"-ban n a fázisok számát jelenti. n -et növelve lassúbb és folyanmatosabb lesz a mozgás,de jóval hosszabb ideig tart az animáció felépítése.
| > |
| > |
Hét szomszédos spidron-fészek megjelenítése
| > | SOKSP:= proc(beta) local c : c:=cos(beta)*sqrt(3)/2: display3d( SPF(beta) ,translate(SPF(beta), 2*c, 0,0) ,translate(SPF(beta), c,-c*sqrt(3),0) ,translate(SPF(beta), -c,-c*sqrt(3),0) ,translate(SPF(beta),-2*c, 0,0) ,translate(SPF(beta), -c, c*sqrt(3),0) ,translate(SPF(beta), c, c*sqrt(3),0) ,scaling= constrained ,lightmodel=light4 ,style=patchnogrid #,color=cyan #,color=sz(evalf(beta)) ); end proc: |
| > |
Itt az
SPF
egy külső eljárás, elötte aktivizálni kell
Ideiglenesen kiiktathatjuk a piros spirálvonalnak (
L
) valamint a fészek -kék - szélének (
E
) a vasagságát. .Magukat a vonalakat is i lehet iktatni
n:=4
-recélszerű levennünk levettük a spidron kar mélységét, így is sokáig tart egy mozgó kép elkészítése.
| > | SOKSP(Pi/8); |
| > | SOKSP(-Pi/8); |
| > | SOKSP(0); |
| > | SOKSP(arcsin(sqrt(3)/3)); |
Ez az az eset, amelyben a spidron-fészek széle éppen egy kocka éleit alkotja.
| > | nf:=5: d:=Pi/3/nf: display3d(seq(SOKSP(i*d),i=-nf..nf),seq(SOKSP(-i*d),i=-nf..nf) ,lightmodel=light4 ,insequence=true,scaling=constrained); |
A fenti "mozi"-ban
nf
a fázisok számát jelenti.
nf
-et növelve lassúbb és folyanmatosabb lesz a mozgás,
Ugyanakkor lényegesen tovább tart a kép kiszámítása. 2*nf
kép készül
| > |
| > |
| > |
A spidron-fészek közepének a (numerikus) vizsgálata
Azt fogjuk elemezni, hogy a kezdő alapalakzat legnagyobb élét, azaz a (térbeli) hatszögvonal egy élét a lehető legmeredekebbre (azaz 60°-ra) ,vagy egy előre adott értékre állítva, a további si hatszög élek mekkora szöggel fordulnak el az elsőhöz, ill. az előzőhöz képest (
a
étrék) és mekkora szöggel fordulnak el az
(x,y)
síkhoz képest (
b
érték).
A fészek közepe felé tartva a szomszédos alapalakzatok elfordulásainak a különbsége, vagyis
a
(felülről) közelít a 30°-hoz,
b
a 0 fokoz,
Tapasztalni fogjuk, hogy ez a közeledés igen lassú.
| > | a(alpha); b(beta); |
| > | k1:=textplot([Pi/3-0.1,a(Pi/3)-0.1,"a(f)"],color=red,font=[TIMES,BOLD,14]): k2:=textplot([Pi/3-0.1,b(Pi/3)+0.12,"b(f)"],color=blue,font=[TIMES,BOLD,14]): fgv:=plot([a(x),b(x),Pi/6,Pi/3],x=0..Pi/3,color=[red,blue,black,black],linestyle=16): display(fgv,k1,k2,axes=normal,scaling=constrained) ; |
Az alábbiakban megvizsgáljuk, hogy n egymásba épített spidrongyűrű rendre mekkora szöggel fordul el a legkülsőhöz képest ( an ) asz élei mekkora szöget zárnak be a spidron-fészek síkjával ( bn) és melkkora a spidron-gyűrű külső éleinek a gossza ( dn)
| > | fok:= x->round(x*180/Pi): |
Ez az eljárás ívmértékben megadott szöget számít át fokokba.
| > | n:=30;f0:=arcsin(sqrt(3)/3):
# Ez a kocka esete
#f0:=Pi/3; #Ez a szélső helyzet #f0:=Pi/18; f0:=0.85:# Ez már 10°-ról indul f:=f0:an:=0:bn:=f: m:= fok(an) mod 360: k:=trunc(fok(an)/360): d:=10: for i from 0 to n do d:=d/sqrt(3): printf(" %3d. an =%3d fordulat + %4d fok , bn = % 3d fok dn= %g ",i,k,m,fok(bn),d); F[i]:=line([bn,0],[bn,b(bn)],linestyle=16,color=magenta): an:=an+a(f):bn:=b(f): f:=evalf(bn,3): m:= fok(an) mod 360: k:=trunc(fok(an)/360): end do: |
0. an = 0 fordulat + 0 fok , bn = 49 fok dn= 5.773503
1. an = 0 fordulat + 54 fok , bn = 35 fok dn= 3.333333
2. an = 0 fordulat + 96 fok , bn = 31 fok dn= 1.924501
3. an = 0 fordulat + 135 fok , bn = 28 fok dn= 1.111111
4. an = 0 fordulat + 173 fok , bn = 26 fok dn= .6415
5. an = 0 fordulat + 210 fok , bn = 25 fok dn= .37037
6. an = 0 fordulat + 245 fok , bn = 23 fok dn= .213833
7. an = 0 fordulat + 280 fok , bn = 22 fok dn= .123457
8. an = 0 fordulat + 315 fok , bn = 21 fok dn= .071278
9. an = 0 fordulat + 349 fok , bn = 21 fok dn= .041152
10. an = 1 fordulat + 23 fok , bn = 20 fok dn= .023759
11. an = 1 fordulat + 57 fok , bn = 19 fok dn= .013717
12. an = 1 fordulat + 90 fok , bn = 19 fok dn= .007920
13. an = 1 fordulat + 123 fok , bn = 18 fok dn= .004572
14. an = 1 fordulat + 156 fok , bn = 18 fok dn= .002640
15. an = 1 fordulat + 189 fok , bn = 17 fok dn= .001524
16. an = 1 fordulat + 222 fok , bn = 17 fok dn= .000880
17. an = 1 fordulat + 254 fok , bn = 16 fok dn= .000508
18. an = 1 fordulat + 287 fok , bn = 16 fok dn= .000293
19. an = 1 fordulat + 319 fok , bn = 16 fok dn= .000169
20. an = 1 fordulat + 351 fok , bn = 15 fok dn= 9.777478e-05
21. an = 2 fordulat + 24 fok , bn = 15 fok dn= 5.645029e-05
22. an = 2 fordulat + 56 fok , bn = 15 fok dn= 3.259159e-05
23. an = 2 fordulat + 88 fok , bn = 15 fok dn= 1.881676e-05
24. an = 2 fordulat + 119 fok , bn = 14 fok dn= 1.086386e-05
25. an = 2 fordulat + 151 fok , bn = 14 fok dn= 6.272255e-06
26. an = 2 fordulat + 183 fok , bn = 14 fok dn= 3.621288e-06
27. an = 2 fordulat + 215 fok , bn = 14 fok dn= 2.090752e-06
28. an = 2 fordulat + 247 fok , bn = 13 fok dn= 1.207096e-06
29. an = 2 fordulat + 278 fok , bn = 13 fok dn= 6.969172e-07
30. an = 2 fordulat + 310 fok , bn = 13 fok dn= 4.023653e-07
| > |
Láthatóan lassan közeledik a bn rekurzív sorozat a 0-hoz. Ezt az alábbi rajz is szemlélteti.
| > | unassign('x'); display(plot([x,b(x)],x=0..Pi/3,linestyle=16,color=[red,blue],linestyle=16) ,display3d(seq(F[i],i=1..n)) ,scaling=constrained); |
Megvizsgáljuk(igen nagy pontossággal) , hogy egy 170 tagú sorozatnál hogyan alakulnak a fenti értékek
| > | Digits:=100; |
| > | c1:=evalf(sqrt(3)/3):c2:=evalf(180/Pi): n:=169; d:=1e23:x:=evalf(arcsin(sqrt(3)/3)):# Ez a kocka esete bn:=evalf(Pi/3); i:=0:xf:=x*c2; print(i,`. fn = `,bn*c2,` d = `,d); for i from 0 to n do d:=evalf(d/sqrt(3)): bn:=b(bn): #print(i,`. fn = `,bn*c2,` d = `,d); end do: print(i,`. fn = `,bn*c2,` d = `,d); |
| > |
Látható, hogy 170 lépés után is még közel 6°-nyi a spidrongyűrűélének az spidronfészek síkjával bezárt szöge, miközben a az élhossza az edig ismert világegyetem méretérőla kvrk méretéig csökkent.
| > |
| > |
Egy spidron-fészek csúcsainak a koordinátái
| > | n:=4: # itt lehet megadni, hogy hány hatszög álljon elő 1< =n <=8 a javasolt. |
| > | SPA:=proc(f) local i,A,B,nd,na,nb,P,SPA: P:=array(1..6,1..n): nd:=10: na:=0: nb:=evalf(f): for i from 1 to n do A:=evalf(V(nd,na,nb)[1],2): B:=evalf(V(nd,na,nb)[2],2): P[1,i]:=B: P[2,i]:=A: P[4,i]:=-B: P[5,i]:=-A: P[3,i]:=[P[2,i][1]+P[4,i][1],P[2,i][2]+P[4,i][2],P[1,i][3]]: P[6,i]:=[P[5,i][1]+P[1,i][1],P[5,i][2]+P[1,i][2],P[2,i][3]]: nd:=nd/sqrt(3):na:=na+a(nb): nb:=b(nb): end do: SPA:=P: end proc: L0:=[[2,3,4,5] ,[2,5,6,7] ,[2,7,8,3] ]: L1:= i ->[ [3+6*i,4+6*i,9+6*i] ,[4+6*i,9+6*i,10+6*i] ,[4+6*i,10+6*i,5+6*i] ,[5+6*i,10+6*i,11+6*i] ,[5+6*i,6+6*i,11+6*i] ,[6+6*i,11+6*i,12+6*i] ,[6+6*i,7+6*i,12+6*i] ,[7+6*i,12+6*i,13+6*i] ,[7+6*i,8+6*i,13+6*i] ,[8+6*i,13+6*i,14+6*i] ,[8+6*i,3+6*i,14+6*i] ,[3+6*i,14+6*i,9+6*i] ]: L2:=[[1,6*n-3,6*n-2] ,[1,6*n-2,6*n-1] ,[1,6*n-1,6*n ] ,[1,6*n ,6*n+1] ,[1,6*n+1,6*n+2] ,[1,6*n+2,6*n-3] ]: L:=[ #Ez a lapok listája. op(L0) # Ez a belseje, ami az origóból kiinduló háromszögekkel "tömi ki" a belső lyukat. Kiiktatható ,seq(op(L1(i)),i=0..n-2) # Ez maga a spidron fészek ,op(L2) #Ez a kocka (vagy romboéder) három lapja. kiiktatható.( A # jellel) ]: |
| > | L; |
| > | M:=SPA(arcsin(sqrt(3)/3)):
# Ez a kocka esete
#M:=SPA(0.3989112): #M:=SPA(Pi/12): # Ez egy "laposabb" eset. ha a kockánál nagyobb szöget választunk, belemetsz saját magába. |
| > |
| > | C:=[[0,0,0],[0,0,3*M[1,1][3]],seq((seq(M[i,j],i=1..6),j=1..n))]: # Ez állítja elő a C (csúcsok) listáját |
# Az L és C lista tartalmazza azokat az adatokat, amelyek átvihetők más programba Ki is irathatók:
| > | L; |
| > | nops(C); |
| > | C[2]; |
Rajz az L és C listák felhasználásával.
| > | NC:=nops(C): NR:=textplot3d({seq([seq(C[i][k],k=1..3),i],i= 1..NC)} ,color=BLUE #A sorszám színe ,font=[TIMES,BOLD,14] # betűtípus, betűstílus, metűméret. (Most ki van kapcsolva) ): NL:=nops(L); # lapok száma LC:=[seq([seq(C[L[i,j]],j=1..nops(L[i]))],i=1..NL)]: LAP:=display3d(polygonplot3d(LC)): |
| > | LAP; |
| > | polygonplot3d(LC); |
| > |
| > | display3d(LAP,scaling=constrained); |
| > | display3d(LAP,scaling=constrained, lightmodel=light4); |
| > |
Lapszögek meghatározása
| > | hossz:= a -> sqrt(a[1]^2+a[2]^2+a[3]^2): skalarszorzat:= (a,b) ->a[1]*b[1]+a[2]*b[2]+a[3]*b[3]: szog:= (a,b) -> if hossz(a)*hossz(b)<>0 then arccos(skalarszorzat(a,b)/hossz(a)/hossz(b)) else 0 fi: fok:= x -> round(evalf(x*180/Pi)) mod 360: vektoriszorzat:= (a,b) -> [a[2]*b[3]-a[3]*b[2], a[3]*b[1]-a[1]*b[3], a[1]*b[2]-a[2]*b[1]]: vegyesszorzat:= (a,b,c) -> a[1]*b[2]*c[3] +a[2]*b[3]*c[1] +a[3]*b[1]*c[2] -a[3]*b[2]*c[1] -a[2]*b[1]*c[3] -a[1]*b[3]*c[2]: lapszog:= (a,b,c,d) -> sign(vegyesszorzat(b-a,c-a,d-a))* szog(vektoriszorzat(c-a,b-a),vektoriszorzat(d-a,b-a)): |
| > | fok(lapszog(C[3],C[4],C[2],C[9])); |
| > | C[3];C[4];C[2];C[9]; |
| > | y:=x->-(arccos((150.*cos(x)*sin(x)*(10.*(5.*cos(x)-.71/(1.+(-1.-3.*cos(x)^2+4.*cos(x))/(2.+3.*cos(x)^2-4.*cos(x)))^(1/2)*(1.7+5.1*cos(x)^2-3.4*cos(x)-1.*(-1.-3.*cos(x)^2+4.*cos(x))^(1/2)*sin(x))/(2.+3.*cos(x)^2-4.*cos(x))^(1/2)/cos(x)+1.2*(16.-1.*(1.7+5.1*cos(x)^2-3.4*cos(x)-1.*(-1.-3.*cos(x)^2+4.*cos(x))^(1/2)*sin(x))^2/(2.+3.*cos(x)^2-4.*cos(x))/cos(x)^2)^(1/2)/(1.+(-1.-3.*cos(x)^2+4.*cos(x))/(2.+3.*cos(x)^2-4.*cos(x)))^(1/2))*sin(x)-10.*(5.*sin(x)-2.9*(-1.-3.*cos(x)^2+4.*cos(x))^(1/2)/(2.+3.*cos(x)^2-4.*cos(x))^(1/2)/(1.+(-1.-3.*cos(x)^2+4.*cos(x))/(2.+3.*cos(x)^2-4.*cos(x)))^(1/2))*cos(x))-850.0*cos(x)*sin(x)^2*(-8.5*cos(x)+.71*(16.-1.*(1.7+5.1*cos(x)^2-3.4*cos(x)-1.*(-1.-3.*cos(x)^2+4.*cos(x))^(1/2)*sin(x))^2/(2.+3.*cos(x)^2-4.*cos(x))/cos(x)^2)^(1/2)/(1.+(-1.-3.*cos(x)^2+4.*cos(x))/(2.+3.*cos(x)^2-4.*cos(x)))^(1/2)+1.2/(1.+(-1.-3.*cos(x)^2+4.*cos(x))/(2.+3.*cos(x)^2-4.*cos(x)))^(1/2)*(1.7+5.1*cos(x)^2-3.4*cos(x)-1.*(-1.-3.*cos(x)^2+4.*cos(x))^(1/2)*sin(x))/(2.+3.*cos(x)^2-4.*cos(x))^(1/2)/cos(x))-850.0*cos(x)^3*(-8.5*cos(x)+.71*(16.-1.*(1.7+5.1*cos(x)^2-3.4*cos(x)-1.*(-1.-3.*cos(x)^2+4.*cos(x))^(1/2)*sin(x))^2/(2.+3.*cos(x)^2-4.*cos(x))/cos(x)^2)^(1/2)/(1.+(-1.-3.*cos(x)^2+4.*cos(x))/(2.+3.*cos(x)^2-4.*cos(x)))^(1/2)+1.2/(1.+(-1.-3.*cos(x)^2+4.*cos(x))/(2.+3.*cos(x)^2-4.*cos(x)))^(1/2)*(1.7+5.1*cos(x)^2-3.4*cos(x)-1.*(-1.-3.*cos(x)^2+4.*cos(x))^(1/2)*sin(x))/(2.+3.*cos(x)^2-4.*cos(x))^(1/2)/cos(x)))/(29725.00*sin(x)^2*cos(x)^2+7225.00*cos(x)^4)^(1/2)/((10.*(5.*cos(x)-.71/(1.+(-1.-3.*cos(x)^2+4.*cos(x))/(2.+3.*cos(x)^2-4.*cos(x)))^(1/2)*(1.7+5.1*cos(x)^2-3.4*cos(x)-1.*(-1.-3.*cos(x)^2+4.*cos(x))^(1/2)*sin(x))/(2.+3.*cos(x)^2-4.*cos(x))^(1/2)/cos(x)+1.2*(16.-1.*(1.7+5.1*cos(x)^2-3.4*cos(x)-1.*(-1.-3.*cos(x)^2+4.*cos(x))^(1/2)*sin(x))^2/(2.+3.*cos(x)^2-4.*cos(x))/cos(x)^2)^(1/2)/(1.+(-1.-3.*cos(x)^2+4.*cos(x))/(2.+3.*cos(x)^2-4.*cos(x)))^(1/2))*sin(x)-10.*(5.*sin(x)-2.9*(-1.-3.*cos(x)^2+4.*cos(x))^(1/2)/(2.+3.*cos(x)^2-4.*cos(x))^(1/2)/(1.+(-1.-3.*cos(x)^2+4.*cos(x))/(2.+3.*cos(x)^2-4.*cos(x)))^(1/2))*cos(x))^2+100.*(-8.5*cos(x)+.71*(16.-1.*(1.7+5.1*cos(x)^2-3.4*cos(x)-1.*(-1.-3.*cos(x)^2+4.*cos(x))^(1/2)*sin(x))^2/(2.+3.*cos(x)^2-4.*cos(x))/cos(x)^2)^(1/2)/(1.+(-1.-3.*cos(x)^2+4.*cos(x))/(2.+3.*cos(x)^2-4.*cos(x)))^(1/2)+1.2/(1.+(-1.-3.*cos(x)^2+4.*cos(x))/(2.+3.*cos(x)^2-4.*cos(x)))^(1/2)*(1.7+5.1*cos(x)^2-3.4*cos(x)-1.*(-1.-3.*cos(x)^2+4.*cos(x))^(1/2)*sin(x))/(2.+3.*cos(x)^2-4.*cos(x))^(1/2)/cos(x))^2*sin(x)^2+100.*(-8.5*cos(x)+.71*(16.-1.*(1.7+5.1*cos(x)^2-3.4*cos(x)-1.*(-1.-3.*cos(x)^2+4.*cos(x))^(1/2)*sin(x))^2/(2.+3.*cos(x)^2-4.*cos(x))/cos(x)^2)^(1/2)/(1.+(-1.-3.*cos(x)^2+4.*cos(x))/(2.+3.*cos(x)^2-4.*cos(x)))^(1/2)+1.2/(1.+(-1.-3.*cos(x)^2+4.*cos(x))/(2.+3.*cos(x)^2-4.*cos(x)))^(1/2)*(1.7+5.1*cos(x)^2-3.4*cos(x)-1.*(-1.-3.*cos(x)^2+4.*cos(x))^(1/2)*sin(x))/(2.+3.*cos(x)^2-4.*cos(x))^(1/2)/cos(x))^2*cos(x)^2)^(1/2))); |
| > | y(0.4); |
| > | y(0.42); |
| > | y(0.3989111); |
| > | y(0.3989112); |
| > | evalf(0.3989112*180/Pi); |
| > | dy:=diff(y(x),x): |
Error, wrong number (or type) of parameters in function diff
| > | fsolve(dy=0); |
| > | ?solve |
| > | plot(y,0..Pi/4); |
| > | fok(evalf(s(Pi/12))); |
| > |
| > |